Огромная просьба в этой теме не мусорить, аккуратно и точно указывать на часто встречающиеся ошибки и правильные варианты.
Очень часто встречается ошибка при выборке данных из базы, она есть в учебнике некоего Попова.
Для выборки из базы люди используют цикл do-while вместо while, например
У первого варианта проверка условия идет после выполнения цикла, у второго - перед. То есть если sql запрос вернет ноль строк, то в первом варианте цикл все равно выполнится, чего в принципе быть не должно.
24.01.2010, 20:55
Apay
Заголовки
--
Многие начинающие допускают следующую ошибку в применении функций, работающих с заголовками (такиих как setcookie, header): функия вызывается после того как был осуществлен вывод.
Выводом является результат работы echo, print, любой текст (включая пробелы, перевод строки, заголовки BOM в utf-8) вне <?php и ?>.
приведу пару примеров неверных и верных решений (способов верного решения очень много, я приведу только по одному)
Часто втречаются ошибки при выводе кареток (перевод на другую строку)
Если указать каретку (\r\n) в одинарных кавычках, действия не будет никакого!!! Нужно обезательн в двойных!!! ПРИМЕР:
Также чато есть, когда хотят включить в текстувую переменную элемент массива. В таком случае нужно эелемнет включить либо в фигур скобки либо через сцепление текста. ПРИМЕР
Еще про перевод строки.
Перевод строки в разных ОС разный:
1. Windows, MacOS:
\r\n
2. Unix, MacOS X:
\n
16.04.2010, 15:35
ZhukV
Очень часто приходится проверять данные. Вот к примеру оброботчика форм, на истинность веденных даных.
Шаря по инету, и по своей практике, заметил в этом одну КОНЧЕНУЮ ошибку начинающего програмера.
Вот к примеру проверка поля формы (метод передачи $_GET) с именем name
if(isset($_GET['name'])){
....
}
Либо при выборке с базы
$sql="SELECT * FROM table";
$ires=mysql_query($ires);
$ires_result=mysql_fetch_array($ires);
if(isset($ires_result)){
....
}
И вот в этом есть некая ошибка начинающего програмера, а особенно в функции isset()
Ошибка в том, что функция проверит, есть ли переменная в ядре PHP. Проверяет только переменную, а не ее значение.. С этого можна сказать, что если переменная имеет нулевое значение, isset() все равно вернет true
Значение переменной лучше всего проверять при помощи empty()
Вернет true если переменная значение не имеет, в противном случае false
if(!empty($_GET['name'])){
....//если имеется переменная и имеет значение кроме нуля
}
16.04.2010, 15:56
alexdrob
Цитата:
Сообщение от ZhukV
Вот к примеру проверка поля формы
С другой стороны ошибка бывает как раз наоборот с использованием empty
Например передают значение 0 в какой либо форме или в списке select есть значение 0 его передать надо
что то типа
Если выбрать первое в списке то empty не пропустит переменную...
24.09.2010, 14:45
Mulder
Часто встречающаяся ошибка: средствами пхп производить разбор и вычисления данных из баз данных. Золотое правило: операции над данными, принадлежащие бд, нужно производить самой бд. Бд организует и хранит данные специальным образом, только она знает, как наиболее оптимально и быстро произвести запрошенные операции. В идеале вы должны использовать только функции парсинга результатов работы бд - mysql_fetch_*().
Распространенные ошибки.
Подсчет числа строк:
неверно:
$result = mysql_query("SELECT * FROM `table`");
$count = mysql_num_rows($result);
верно:
$result = mysql_query("SELECT COUNT(*) AS `count` FROM `table`");
$data = mysql_fetch_assoc($result);
$count = $data['count'];
Подсчет числа символов в поле (данные типа varchar или text):
неверно:
$result = mysql_query("SELECT `text` FROM `table` WHERE `id` = 1");
$data = mysql_fetch_assoc($result);
$count = strlen($data['text']);
верно:
$result = mysql_query("SELECT CHAR_LENGTH(`text`) FROM `table` WHERE `id` = 1");
$data = mysql_fetch_assoc($result);
$count = $data[0];
Определение разницы даты (текущей и датой из таблицы):
неверно:
$result = mysql_query("SELECT `date` FROM `table` WHERE `id` = 1");
$data = mysql_fetch_assoc($result);
$date = $data['date'];
// функции php по определению разницы дат
...
верно:
$result = mysql_query("SELECT DATEDIFF(NOW(), `date`) FROM `table` WHERE `id` = 1");
$data = mysql_fetch_assoc($result);
$date = $data[0];
Обходится легко, отключаете Cookies, из исх кода(если опера) удаляете <input type="text" name="captcha" ..... />
и отправляете запрос, тогда $_POST['captcha'] равна NULL и $_SESSION['captcha'] равна NULL, получается — условие выполнено, "катпча введена верно.".
решение: