Помощник
|
Часто встречающиеся ошибки |
Apay
|
Сообщение
#1
|
|
Заголовки
-- Многие начинающие допускают следующую ошибку в применении функций, работающих с заголовками (такиих как setcookie, header): функия вызывается после того как был осуществлен вывод. Выводом является результат работы echo, print, любой текст (включая пробелы, перевод строки, заголовки BOM в utf-8) вне <?php и ?>. приведу пару примеров неверных и верных решений (способов верного решения очень много, я приведу только по одному) пример 1 неверно файл index.php [php]<?php include( 'header.php' ); ... setcookie( $name, $value ); ... ?>[/php]файл header.php [php]<!DOCTYPE ...> <html... ... <?php ... ?> [/php]решение [php]<?php ob_start(); include( 'header.php' ); ... setcookie( $name, $value ); header( ... ); ... ob_end_flush(); ?>[/php]пример 2 (обработчик формы) неверно [php]<!DOCTYPE ...> <html... ... <?php if( empty($_POST['name']) ){ echo 'Вы не ввели имя, заполните форму заново<br /><a href="form.html">Перейти к форме</a>'; header( 'Refresh: 10; url=form.html' ); } ... ?> ... </html>[/php]решение [php]<?php $output = ''; if( empty($_POST['name']) ){ $output = 'Вы не ввели имя, заполните форму заново<br /><a href="form.html">Перейти к форме</a>'; header( 'Refresh: 10; url=form.html' ); } ... ?><!DOCTYPE ...> <html... ... <?php echo $output; ?> ... </html>[/php] |
|
|
ZhukV |
22.3.2010, 11:31;
Ответить: ZhukV
Сообщение
#2
|
|
Часто втречаются ошибки при выводе кареток (перевод на другую строку)
Если указать каретку (\r\n) в одинарных кавычках, действия не будет никакого!!! Нужно обезательн в двойных!!! ПРИМЕР: [PHP] $text='ZhukV\r\n';//НЕВЕРНО $text="ZhukV\r\n";//ВЕРНО [/PHP] Также чато есть, когда хотят включить в текстувую переменную элемент массива. В таком случае нужно эелемнет включить либо в фигур скобки либо через сцепление текста. ПРИМЕР [PHP] $array['ZhukV']='ZhukV'; $text="text -- $array['ZhukV']";НЕВЕРНО $text="text -- ".$array['ZhukV'];ВЕРНО $text="text -- {$array['ZhukV']}";ВЕРНО [/PHP] Также заметил, что очень часто встречаются ошибки при инклюд файла. Лучше сначала проверить его наявность, а аж потом подключать: [PHP] $inc_file='inc/zhukv.php'; if(is_file($inc_file))include($inc_file); else echo 'not_file'; [/PHP] |
|
|
Zippovich |
26.3.2010, 18:39;
Ответить: Zippovich
Сообщение
#3
|
|
Еще про перевод строки.
Перевод строки в разных ОС разный: 1. Windows, MacOS: \r\n 2. Unix, MacOS X: \n |
|
|
ZhukV |
16.4.2010, 17:35;
Ответить: ZhukV
Сообщение
#4
|
|
Очень часто приходится проверять данные. Вот к примеру оброботчика форм, на истинность веденных даных.
Шаря по инету, и по своей практике, заметил в этом одну КОНЧЕНУЮ ошибку начинающего програмера. Вот к примеру проверка поля формы (метод передачи $_GET) с именем name [PHP] if(isset($_GET['name'])){ .... } [/PHP] Либо при выборке с базы [PHP] $sql="SELECT * FROM table"; $ires=mysql_query($ires); $ires_result=mysql_fetch_array($ires); if(isset($ires_result)){ .... } [/PHP] И вот в этом есть некая ошибка начинающего програмера, а особенно в функции isset() Ошибка в том, что функция проверит, есть ли переменная в ядре PHP. Проверяет только переменную, а не ее значение.. С этого можна сказать, что если переменная имеет нулевое значение, isset() все равно вернет true Значение переменной лучше всего проверять при помощи empty() Вернет true если переменная значение не имеет, в противном случае false [PHP] if(!empty($_GET['name'])){ ....//если имеется переменная и имеет значение кроме нуля } [/PHP] |
|
|
alexdrob |
16.4.2010, 17:56;
Ответить: alexdrob
Сообщение
#5
|
|
Вот к примеру проверка поля формы С другой стороны ошибка бывает как раз наоборот с использованием empty Например передают значение 0 в какой либо форме или в списке select есть значение 0 его передать надо что то типа <select> <option valeu="0"></option> <option valeu="1"></option> ... </select> Если выбрать первое в списке то empty не пропустит переменную... |
|
|
Mulder_hb |
24.9.2010, 16:45;
Ответить: Mulder_hb
Сообщение
#6
|
|
Часто встречающаяся ошибка: средствами пхп производить разбор и вычисления данных из баз данных. Золотое правило: операции над данными, принадлежащие бд, нужно производить самой бд. Бд организует и хранит данные специальным образом, только она знает, как наиболее оптимально и быстро произвести запрошенные операции. В идеале вы должны использовать только функции парсинга результатов работы бд - mysql_fetch_*().
Распространенные ошибки. Подсчет числа строк: неверно: [PHP]$result = mysql_query("SELECT * FROM `table`"); $count = mysql_num_rows($result);[/PHP] верно: [PHP]$result = mysql_query("SELECT COUNT(*) AS `count` FROM `table`"); $data = mysql_fetch_assoc($result); $count = $data['count'];[/PHP] Подсчет числа символов в поле (данные типа varchar или text): неверно: [PHP]$result = mysql_query("SELECT `text` FROM `table` WHERE `id` = 1"); $data = mysql_fetch_assoc($result); $count = strlen($data['text']); [/PHP] верно: [PHP]$result = mysql_query("SELECT CHAR_LENGTH(`text`) FROM `table` WHERE `id` = 1"); $data = mysql_fetch_assoc($result); $count = $data[0];[/PHP] Определение разницы даты (текущей и датой из таблицы): неверно: [PHP]$result = mysql_query("SELECT `date` FROM `table` WHERE `id` = 1"); $data = mysql_fetch_assoc($result); $date = $data['date']; // функции php по определению разницы дат ...[/PHP] верно: [PHP]$result = mysql_query("SELECT DATEDIFF(NOW(), `date`) FROM `table` WHERE `id` = 1"); $data = mysql_fetch_assoc($result); $date = $data[0];[/PHP] и т.д. |
|
|
Apay
|
Сообщение
#7
|
|
|
|
|
Boolean |
7.4.2011, 15:44;
Ответить: Boolean
Сообщение
#8
|
|
Очень распространенная ошибка в разработке разных видов каптч.
[PHP]<?php if ($_POST['captcha'] != $_SESSION['captcha']) echo 'не правильно'; else echo ' правильно'; ?>[/PHP] Обходится легко, отключаете Cookies, из исх кода(если опера) удаляете <input type="text" name="captcha" ..... /> и отправляете запрос, тогда $_POST['captcha'] равна NULL и $_SESSION['captcha'] равна NULL, получается — условие выполнено, "катпча введена верно.". решение: [PHP]<?php if ($_POST['captcha'] != $_SESSION['captcha'] || !isset($_POST['captcha']) ) echo 'не правильно'; else echo ' правильно'; ?>[/PHP] |
|
|
Mulder_hb |
7.4.2011, 16:45;
Ответить: Mulder_hb
Сообщение
#9
|
|
|
|
|
zabmix |
27.6.2011, 6:41;
Ответить: zabmix
Сообщение
#10
|
|
[PHP]if (isset($_POST['a']) && $_POST['a'] == $b)[/PHP]
а так куда будет правильнее: [PHP]if (!empty($_POST['a']) && $_POST['a'] == $b)[/PHP] |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
У вас часто просят денег в долг? Как отказываете? | 94 | uahomka | 7124 | 5.3.2024, 4:32 автор: Liudmila |
|
Исправлю HTML ошибки на страницах Вашего сайта | 17 | guruapps | 17198 | 11.2.2020, 15:06 автор: guruapps |
|
Ошибки при выборе оффера! | 0 | leadkreditrf | 1427 | 21.7.2019, 20:30 автор: -leadkreditrf- |
|
Seo аудит и анализ конверсии сайта. Выявляем ошибки оптимизации | 0 | РАН | 1468 | 25.5.2016, 17:13 автор: РАН |
|
Поправить ошибки на сайте-визитке Joomla До 28.03.2016 г. - поправить ошибки |
0 | Onix | 1917 | 26.3.2016, 8:35 автор: Onix |
Текстовая версия | Сейчас: 24.4.2024, 1:43 |