X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Часто встречающиеся ошибки
Apay
Apay
Topic Starter сообщение 24.1.2010, 22:55; Ответить: 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
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
Zippovich
сообщение 26.3.2010, 18:39; Ответить: Zippovich
Сообщение #3


Еще про перевод строки.
Перевод строки в разных ОС разный:

1. Windows, MacOS:
\r\n

2. Unix, MacOS X:
\n
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
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
alexdrob
сообщение 16.4.2010, 17:56; Ответить: alexdrob
Сообщение #5


(ZhukV @ 16.4.2010, 20:35) *
Вот к примеру проверка поля формы

С другой стороны ошибка бывает как раз наоборот с использованием empty
Например передают значение 0 в какой либо форме или в списке select есть значение 0 его передать надо
что то типа
<select>
<option valeu="0"></option>
<option valeu="1"></option>
...
</select>

Если выбрать первое в списке то empty не пропустит переменную...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
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
Apay
Topic Starter сообщение 11.1.2011, 12:48; Ответить: Apay
Сообщение #7


(ZhukV @ 16.4.2010, 20:35) *
Либо при выборке с базы
При выборке с базы при проверке использовать:
[PHP]$result = mysql_query( ... );
if( $result === false ){
// ERROR!!!
}
else{
// do something
}[/PHP]т.к. mysql_query при ошибке почти всегда возвращает false
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Boolean
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
Mulder_hb
сообщение 7.4.2011, 16:45; Ответить: Mulder_hb
Сообщение #9


(zBool @ 7.4.2011, 18:44) *
Очень распространенная ошибка в разработке разных видов каптч.

Вообще-то, при сравнении возможно неинициализированных данных пишут так:
[PHP]if (isset($_POST['a']) && $_POST['a'] == $b)[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
zabmix
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]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) У вас часто просят денег в долг? Как отказываете?
94 uahomka 6977 5.3.2024, 4:32
автор: Liudmila
Открытая тема (нет новых ответов) Исправлю HTML ошибки на страницах Вашего сайта
17 guruapps 17046 11.2.2020, 15:06
автор: guruapps
Открытая тема (нет новых ответов) Ошибки при выборе оффера!
0 leadkreditrf 1405 21.7.2019, 20:30
автор: -leadkreditrf-
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыSeo аудит и анализ конверсии сайта. Выявляем ошибки оптимизации
0 РАН 1450 25.5.2016, 17:13
автор: РАН
Открытая тема (нет новых ответов) Поправить ошибки на сайте-визитке Joomla
До 28.03.2016 г. - поправить ошибки
0 Onix 1893 26.3.2016, 8:35
автор: Onix


 



RSS Текстовая версия Сейчас: 28.3.2024, 16:25
Дизайн