Вопрос № 98748: Здравствуйте уважаемы знатоки PHP!
Вопрос в следующем: обычно результаты формы я обрабатываю через массив $_REQUEST, но меня смущает, что вы во всех ответах с обработкой форм используете $_POST, $_GET. А чем плох $_REQUEST? Может я чего-то ...Вопрос № 98750: Уважаемые знатоки! Вопрос по объектно ориентированному программированию.
есть класс (приложение)
пытаюсь обратиться к члену, не получается! В чем проблема?
У меня несколько бОльший код, но суть здесь ясна. Не могу вывести член id. Может э...Вопрос № 98826: Здравствуйте.
Скачал денвер, установил, написал такой код:
<html>
<head>
<body>
<?
echo "<p>Это php код</p>";
?>
</body>
</head>
</html>
А браузер мне выдает следущее:
Это php код"; ...Вопрос № 98836: Здрасьте граждане программеры!
У меня такой вопрос.
У меня на своём сайте есть админка в которую в принципе никто кроме меня доступа иметь не должен.
В некоем файле qwe.dat хранится в виде переменных логин и пароль админа. этот файл подкл...
Вопрос № 98.748
Здравствуйте уважаемы знатоки PHP!
Вопрос в следующем: обычно результаты формы я обрабатываю через массив $_REQUEST, но меня смущает, что вы во всех ответах с обработкой форм используете $_POST, $_GET. А чем плох $_REQUEST? Может я чего-то не догоняю и имеет место брешь в безопасности или это только для старых версий PHP? Просветите пожалуйста.
Отправлен: 17.08.2007, 19:10
Вопрос задал: Почерк (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Kruphi
Здравствуйте, Почерк!
Если есть четкая уверенность что данные сейчас (и в будущем) передаются только методом post или get, то для обеспечения дополнительного контроля можно использовать $_POST или $_GET.
У меня на практике есть данные которые могут передаваться и через форму (post) и по ссылке (get) - обычно это интерфейсные данные (порядок сортировки отображаемой таблицы данных, текущая страница, число записей на страницу и т.п.). В этом случае используется $_REQUEST.
Ответ отправил: Kruphi (статус: 2-ой класс)
Ответ отправлен: 17.08.2007, 19:33 Оценка за ответ: 5 Комментарий оценки: Я по этой же причине и использую $_REQUEST - частенько в сложных формах использую методы post и get одновременно
Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Почерк!
Дело в том, что в массив $_REQUEST включаются все передоваемые переменные вне зависимо от того, какой метод использовался. А в массивы ГЭТ и ПОСТ включаются только `свои` переменные. К примеру, если в обоих методах есть $_GET['var'] и $_POST['var'], то в $_REQUEST окажется только одна из них.
Другой вопрос еще и в безопасности.
В принципе, если пользоваться $_REQUEST, то это также, как было бы при включенном register_globals в php.ini, а это, с точки зрения безопасности, не очень то безопасно.
--------- Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.
Ответ отправил: Бобровский Сергей Сергеевич (статус: 2-ой класс)
Ответ отправлен: 17.08.2007, 19:34 Оценка за ответ: 3 Комментарий оценки: Насчет сравнения с включенном register_globals мне кажется вы погорячились. И ответы остальных экспертов говорят, о том же
Отвечает: PVS
Здравствуйте, Почерк!
Да разницы никакой, разве что Вы ухитритесь написать Form с action="act1=чего-то" и в ней задать input name=act1 value=чего-то другое. Тогда что придёт в $_REQUEST - загадка природы, но так как подобные случаи вряд ли существуют в природе (в нормальных скриптах), то Вам всё равно $_POST, $_GET или $_REQUEST.
Ответ отправил: PVS (статус: Специалист)
Ответ отправлен: 17.08.2007, 20:12 Оценка за ответ: 5 Комментарий оценки: Все ясно! Спасибо, а то я уже запереживал, что придется все обработчики форм исправлять
Отвечает: Flynn
Здравствуйте, Почерк!
$_REQUEST - это сборный массив из трех штук - $_GET, $_POST, $_COOKIE. Т.е. создав какую-то переменную в одном из этих массивов - она окажется и в $_REQUEST.
В общем-то с моей точки зрения особой бреши в безопасности тут не будет, так как register_global были опасны тем, что могли подменить неинициализированные переменные. Сдесь же в этом массиве переменная либо будет, либо нет. Но зато их можно очень просто подменить подставив значение в ту же строку запроса.
Единственное что не объясняет этот массив - это откуда эта переменная пришла. А енсли потребуется этот скрипт потом модифицировать или же изменять что-то, то тратить лишнее время на поиски из чего же явилась эта переменная никто не будет. Поэтому ради более красивого кода лучше использовать специализированные массивы - никто не запутается :)
Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 17.08.2007, 20:57
Вопрос № 98.750
Уважаемые знатоки! Вопрос по объектно ориентированному программированию.
есть класс (приложение)
пытаюсь обратиться к члену, не получается! В чем проблема?
У меня несколько бОльший код, но суть здесь ясна. Не могу вывести член id. Может это потому, что я передаю конструктору в качестве аргумента массив?
id_pic это поле в базе данных такое
Отвечает: Powoditch konstantin
Здравствуйте, Бобровский Сергей Сергеевич!
первое: используйте не var a public
второе:
почему ?
$this->id = $pic['id_pic'];
а не:
$this->id = $pic['id'];
У вас в результирующем запросе нету id_pic, как я понял там есть только id
Второй вариант правильный.
Ответ отправил: Powoditch konstantin (статус: 4-ый класс)
Ответ отправлен: 17.08.2007, 19:38 Оценка за ответ: 4 Комментарий оценки: Опечатался ^^ $query = "SELECT * FROM pictures WHERE id_pic='83'"; То есть там всё таки я правильно написал. А вот var на public я заменил. Выводится ошибка Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in z:home elpics.ruwwwclass.php on line 3 Как его использовать то? Я
так использовал: public $id; //ID картинки
Отвечает: Бородин Александр Олегович
Здравствуйте, Бобровский Сергей Сергеевич!
Справедливости ради надо сказать, что использовать var можно - если на хостинге, который Вы используете, стоит PHP 4. Такое приложение будет работать на любой версии. Так что если Вам следует руководствоваться соображениями совместимости, то надо исходить из версии 4, а это как раз var. Впрочем, думаю, что не очень-то и надо, потому что PHP4 уже морально устарел.
Но если Вы используете Денвер, не потрудившись установить PHP5, то public использовать нельзя. Я имею ввиду, что у Вас PHP 4 установлен в качестве обработчика файлов PHP по умолчанию. При этом PHP5 установлен как CGI. Сталкивался я с такой ситуацией. Именно, когда работал с Денвером.
Отвед на второй вопрос:
Чтобы вывести id, надо в конструкторе обратиться к базе данных. Либо написать метод для класса, который вытаскивает значение из базы, а потом его прописать в конструктор. Ведь как у Вас? Вы написали конструктор. Конструктор - функция которая вызывается раньше всех функций класса. Вы присваиваете свойству значение элемента массива, которого Вы еще не получили. Пропишите так(см. приложение). Итак, последовательность действий:
1) получить значение в конструкторе
2) Присвоить значение свойству
Приложение:
--------- Ничто не сближает людей так, как совместное преступление. Или покупка телевизора.
Отвечает: Flynn
Здравствуйте, Бобровский Сергей Сергеевич!
После прочтения общения с Бородином Александром Олеговичем хочу спросить - а зачем вам там класс? Если у вас выбирается девять картинок в базе данных и сразу выводятся - то создавать для каждой картинки класс нерезонно. Конечно, если с ним будут производиться действия - это уже другой разговор, но все равно можно обойтись и без классов.
Так же в том коде что вы написали (в приложении) получается что вы каждый раз в одну и ту же переменную присваиваете новый класс, при этом нигде не освобождая старый. Это тоже не совсем верно, так как старый в данном лсучае надо было бы освобождать.
На счет вопроса (кроме того что уже ответили) - функция __construct добавлена в РНР начиная с пятой версии. Судя по всему вы говорили, что у вас 4 - поэтому класс её и не видит - для него это просто функция. В 4-той версии конструктором становилась функция с именем класса - поэтому её вам надо заменить. Смотрите приложение.
Приложение:
Ответ отправил: Flynn (статус: 4-ый класс)
Ответ отправлен: 17.08.2007, 21:16 Оценка за ответ: 5 Комментарий оценки: Спасибо, кажется, верно замечено!
Вопрос № 98.826
Здравствуйте.
Скачал денвер, установил, написал такой код:
А браузер мне выдает следущее:
Это php код"; ?>
В чем дело?
Отправлен: 18.08.2007, 14:11
Вопрос задал: Sager (статус: Практикант)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: Селев Валерий
Здравствуйте, Sager!
Попробуйте так:
<?php
echo "Это php код";
?>
Ответ отправил: Селев Валерий (статус: 5-ый класс)
Ответ отправлен: 18.08.2007, 14:14 Оценка за ответ: 3 Комментарий оценки: Так у меня вообще ничего не выводится! Без тега
почему-то не выводит.
Отвечает: Kruphi
Здравствуйте, Sager!
Правильный вид как сказал Селев Валерий с открывающим тегом <?php
Правильно ли Вы обращаетесь к Вашему коду?
Если он лежит в Денере в папке: Z:home estwww .php
то в браузере укажите http://test/t.php
Замечание: Денвер надо стартовать вручную, используя созданный им при установке ярлык "Start servers". Если Вы не создали ярлыки, то переустановите денвер поверх в туже папку (обычно C:WebServers).
Ответ отправил: Kruphi (статус: 2-ой класс)
Ответ отправлен: 18.08.2007, 15:17
Отвечает: Khalafov Rashad
Здравствуйте, Sager!
Вывод <_p>Это php код<_/p> берёт на себя браузер. Так, что мой Вам совет, не использовать начальные пробелы в тегах.
А насчёт первого вопроса: какая версия php у Вас с денвером стоит?
Ответ отправил: Khalafov Rashad (статус: 1-ый класс)
Ответ отправлен: 19.08.2007, 03:46
Вопрос № 98.836
Здрасьте граждане программеры!
У меня такой вопрос.
У меня на своём сайте есть админка в которую в принципе никто кроме меня доступа иметь не должен.
В некоем файле qwe.dat хранится в виде переменных логин и пароль админа. этот файл подключается путём include_once();
Чтобы к этому файлу нельзя было получить доступ и просмотреть его содержимое из браузера, просто ввидя директорию и имя файла в адресной строке в файле .htaccess есть такой редирект:
Redirect /path/qwe.dat http://wmzar.com/errors/403.phtml
Насколько может быть эффективна такая защита от кражи логина пароля?
И сдаётся мне что мой способ хранения и авторизации админа очень нкстандартное и чистое извращение!
Есть ли более универсальный способ хранения логина и пароля админа? Как это делают обычно программеры? Кроме правда баз данных. В БД я не шарю, пока не изучил ещё.
Такие данные я храню в php файле, который точно не будет отправлен пользователю без предварительной обработки.
Я в основном коде до include(...) устанавливаю константу
define('Enter_Is_OK', true);
А в include файлах в начале проверяю ее наличие, иначе принудительно 404
<?php
if( !defined('Enter_Is_OK') )
{
// die('Hacking attempt');
header('HTTP/1.0 404 Not Found'); // типа такой страницы нет
include('../missing.html');
exit();
}
Здесь ../missing.html - путь к тексту с ошибкой 404.
Ответ отправил: Kruphi (статус: 2-ой класс)
Ответ отправлен: 18.08.2007, 18:01 Оценка за ответ: 5 Комментарий оценки: Спасибо. Тоже вариант!
Отвечает: Azrr
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
Вы можЕте хранить логин-пароль в php файле и точно также подключать его + не будет гиморояпроблем с редиректами.
[Отредактировано. Эксперту-устное предупреждение за некорректные выражения и безграмотность (к тому же, в зачеркнутом слове допущена ошибка, уникальная орфография автора сохранена).] [ Климова М. ]
Ответ отправил: Azrr (статус: 2-ой класс)
Ответ отправлен: 18.08.2007, 22:15 Оценка за ответ: 4 Комментарий оценки: Ясно))) Но заметьте, тоже самое (но гораздо шире) уже сказал предыдущий эксперт за 4 часа до вашего ответа. Зачем же повторяться то...
Во-первых о вашем способе хранения пароля, в принципе он более менее нормальный, но я так понял, вы не шифруете пароль, что крайне необходимо. В качестве шифрования используйте, например, md5. Также, вспомните, как многие хранят данные для подключения к базе данных - в простом php-файле, где прописаны необходимые переменные и хотя доступ к этому файлу могут получить все, кто знает имя файла, в браузере его содержимое не выведется, потому как в тегах <?php ?> содержаться только необходимые переменные. А
если содержимое переменных зашифровать...
Также могу предложить защищать админку с помощью htaccess. В папке где содержаться админовские скрипты создается два файла .htaccess и .htpasswd, с примерно следующим содержанием (см. приложение). После чего, когда вы обратитесь к любому скрипту в админовском разделе, будут запрошены имя пользователя и пароль, которые записаны в файле .htpasswd. В Windows создать эти файлы будет проблематично, т.к. точка в имени файла запрещена, поэтому .htaccess надо найти уже созданный, или же создать непосредственно на сервере
и внести туда соответствующие строки, а .htpasswd создаётся с помощью специальной программы, которая шифрует пароль. Для более детального ознакомления с данной защитой можете посетить сайт htaccess.net.ru и поискать в google.
Приложение:
Ответ отправил: Gines (статус: 4-ый класс)
Ответ отправлен: 19.08.2007, 12:12 Оценка за ответ: 5 Комментарий оценки: Большое вам спасибо за столь подробный ответ! Буду пробовать)))
Отвечает: Бобровский Сергей Сергеевич
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
Страху нет! Ваш способ также имеет право на существование. Если глюков со стороны .htaccess не будет (на моей практики не было), то это вполне надежно. Но шифровать данные всё же не помешает!
--------- Никогда не бойтесь делать то, что не умеете! Помните: Ноев Ковчег построил любитель, а Титаник - профессионал.
Ответ отправил: Бобровский Сергей Сергеевич (статус: 2-ой класс)
Ответ отправлен: 19.08.2007, 18:27 Оценка за ответ: 5 Комментарий оценки: Понятно. Спасибо за ответи совет шифровать пароль.