AGAVA partners programs http://agava.ru/partners/            

Название функции

             
Веб-курсы


Что это?

Оглавление

Основы
Основы основ

Практика
Гостевая книга
Простой сайт
Структура сайта (MVC)
Ядро (Light)
Ядро
Гостевая на SQL
Статические страницы
Модуль новостей
Система регистрации

Теория
Дебаггинг
Регулярные выражения
Введение в ООП
Паттерны проектирования

Репозитарий
BB-code
Почтовый класс
Пагинатор
Всякие полезности

Download
Полезные утилиты

Разное
Видеокурсы
Последние изменения
Вопросы и замечания сюда



Реклама

Диеты для похудения
Фреймворк Kohana. Обучение. Мануал на русском.
скачать прогу для восстановления данных на жестком диске






Самые распространенные ошибки

Ну не станем тратить время на точки с запятой и прочий синтаксис. Рассмотрим более серьёзные грабли.

1. Упомянутая уже тут ошибка отправки заголовков. Это
Warning: Cannot modify header information - headers already sent by 
(output started at Z:\home\my-site.ru\www\index.php:1) 
in Z:\home\my-site.ru\www\index.php on line 3 

обозначает ни что иное, как вывод перед отправкой заголовка. Причем указано место этого вывода: index.php:1
и местоположение этого заголовка index.php on line 3 . Ничего в этом ни страшного ни сложного нет. Варианта всего два - либо стоит пробел перед открывающим дескриптором <?php, либо файл сохранени с маркировкой BOM. Нужно перенастроить редактор.

2. Откуда то тянется мода писать переменные в кавычках. Вот так:
1
2
3
4
5

    
echo "$var";

Оно конечно работает, хотя порядочно тормозит. Но это пол беды. Увлекшись этим многие пишут переменные в апострофах, вот так:
1
2
3
4
5

    
echo '$var';

и потом сильно удивляются, что результат не тот. Запомните. Тарэлька пишэтся бэз мягкий знак, а сол с мягкий знак.
Переменные не нужно обрамлять ни кавычками, ни апострофами. А вот элементы массива (если они строковые), обязательно нужно.
Вот так правильно:
1
2
3
4
5
6
7

    
echo $var
    echo 
$array['var'];
    echo 
$array[10];


3. Посеръёзнее вариант. Уже стал академическим примером, с подачи одного известного горе-кодера такой код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14

    $query 
"SELECT * FROM table";  
    
$result mysql_query($query);  
      
    
$my_row mysql_fetch_array($result);  
      
        do  
        {  
            
printf ("<div class='my_div'>%s</div>",$my_row["text"]);  
        }  
        while(
$my_row  mysql_fetch_array($result));
Узнаете? Тут целый букет заболеваний.

Самые грубые.
а)Цикл do... while тут некорректен, так как может сложится ситуация, когда не будет записей, удовлетворяющих условию, а цикл совершит интерацию независимо от.
б)Применение printf() тут не к месту, так как функция служит для форматирования значений, а не для организации разметки. Она сложна и непрозрачна в использовании для простого вывода.
в)Неоправдано применение mysql_fetch_array() Если и применять её, то с подобающим случаю флагом. А лучше воспользоваться mysql_fetch_assoc()

Этот код по хорошему должен выглядеть так:
1
2
3
4
5
6
7
8
9
10
11

    $sql 
"SELECT * FROM `table`"
    
$result mysql_query($sql) or die(mysql_error() .'<br/>'$sql); 
     
    while (
$row mysql_fetch_assoc($result)) 
    { 
        echo 
'<div class="my_div">'htmlspecialchars($my_row['text']) .'</div>';  
    }


Ну пока достаточно, в процессе накопятся.)
Рейтинг@Mail.ru Рейтинг@Mail.ru Яндекс цитирования
irbis-team © 2009