За последние 24 часа нас посетил 22791 программист и 1267 роботов. Сейчас ищут 776 программистов ...

!!! Help !!!

Тема в разделе "PHP для новичков", создана пользователем SimplexWeb Int., 21 мар 2007.

  1. SimplexWeb Int.

    SimplexWeb Int. Активный пользователь

    С нами с:
    25 фев 2007
    Сообщения:
    22
    Симпатии:
    0
    Я уже поднимал эту тему... Можете пожалуйста подсказать, какие у меня ошибки... Весь код с прошлой темы почти полностью исправил...
    PHP:
    1. <?php
    2. include "config.php";
    3. $1 = mysql_query("select * from stat;");
    4. if($1)
    5. {
    6. // определяем таблицу и заголовки
    7. echo "<table border=1>";
    8. echo "<tr>
    9.          <td>Автор:</td>
    10.          <td>Заголовок:</td>
    11.          <td>Текст:</td>
    12.      </tr>";
    13. }
    14. else
    15. {
    16. echo "Невозможно произвести  желаемую операцию, т.к на сервере возникла ошибка...";
    17. exit();
    18. }
    19. // так как запрос возвращает несколько строк, применяем цикл "while"
    20. while(list($avtor, $id_stat, $text) = mysql_fetch_row($1))
    21. {
    22. echo "<tr>
    23.          <td>$avtor</td>
    24.          <td>$id_stat</td>
    25.          <td>Stext</td>
    26.      </tr>";
    27. }
    28. echo "</table>";
    29. {
    30. else
    31. }
    32. echo "<p><b>Error: ".mysql_error()."</b></p>";
    33. exit();
    34. {    
    35. ?>
    Это был первый файл, выводящий содержимое страницы...
    А теперь код записи в базу
    PHP:
    1. <?php
    2. // сгенирируем уникальное значение для id_stat
    3. $query = "SELECT MAX(id_stat) AS id_stat FROM stat";
    4. $stat = mysql_query($query);
    5. if($stat)
    6. {
    7. // получаем максимальное значение id_stat
    8. // и увиличиваем его на единицу
    9. $state = mysql_fetch_array($stat);
    10. $id_stat = $state['id_stat'] + 1;
    11. // добавляем в таблицу запись
    12. mysql_query("INSERT INTO stat VALUES ($avtor, $id_stat, $text");
    13. }
    14. else
    15. {
    16. echo "<p><b>Error: ".mysql_error()."</b></p>";
    17. exit();
    18. }
    19. ?>
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    [sql]"select * from stat;"[/sql]
    лишняя ;
    $1 - переменная не может начинаться с цифры (почитай тут)
    PHP:
    1. <?php
    2.  echo "</table>";
    3.  {
    4.  else
    5.  }
    6.  echo "<p><b>Error: ".mysql_error()."</b></p>";
    7.  exit();
    8.  {    
    9.  ?>
    else не относится к какому-нибудь if

    PHP:
    1. <?php
    2.   // сгенирируем уникальное значение для id_stat
    3.  $query = "SELECT MAX(id_stat) AS id_stat FROM stat";
    4.  $stat = mysql_query($query);
    5.  if($stat)
    6.  {
    7.  // получаем максимальное значение id_stat
    8.  // и увиличиваем его на единицу
    9.  $state = mysql_fetch_array($stat);
    10.  $id_stat = $state['id_stat'] + 1;
    11. ?>
    если в БД поле id_stat сделать auto_increment и PRIMARY, то кусок можно выбросить, и при вводе в БД не указывать это поле (увеличится на 1 автоматически)
    [sql]INSERT INTO stat VALUES ($avtor, $id_stat, $text")[/sql]
    [sql]INSERT INTO `stat` VALUES ($avtor, $id_stat, $text")[/sql]
    переменные $avtor, $id_stat, $text надо брать в одинарные кавычки
    [sql]INSERT INTO `stat` VALUES ('$avtor', '$id_stat', '$text'")[/sql]
    всё что пришло от пользователя надо экранировать (addslashes() или mysql_escape_string())
    [sql]INSERT INTO `stat` VALUES ('mysql_escape_string($avtor)', '$id_stat', 'mysql_escape_string($text)'")[/sql]

    P.S. уже лучше :)
    P.P.S. почитай http://phpfaq.ru/
     
  3. metadon

    metadon Активный пользователь

    С нами с:
    6 фев 2006
    Сообщения:
    779
    Симпатии:
    0
    25. <td>Stext</td>

    Тут вместо S должно стоять $
     
  4. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    ну да, пропустил :)
    и заодно
    PHP:
    1. <?php
    2.  echo "<tr>
    3.         <td>$avtor</td>
    4.         <td>$id_stat</td>
    5.         <td>$text</td>
    6.       </tr>";
    я так понимаю, что $avtor и $text зависят от ввода пользователя, значит надо ещё и через htmlspecialchars() прогнать, а то кто знает, что там ввести могут, помнишь было такое:
    так вот, при загрузке страницы будет вылетать окно с надписью "Привет" :) и это всего лишь цветочки... так что перед выводом
    PHP:
    1.  
    2. <?php
    3. $avtor=htmlspecialchars($avtor);
    4. $text=htmlspecialchars($text);
    5. ?>
    6.  
     
  5. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    а будет ли это работать, как ожидалось? кстати, скобку забыли закрыть еще или не там поставили...

    может, все же так?
    PHP:
    1. <?php
    2. $sql = "INSERT INTO `stat` VALUES ('" . mysql_escape_string($avtor) . "', '$id_stat', '" . mysql_escape_string($text) . "')";
    3. ?>
     
  6. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    [off]
    убил бы :).
    [/off]
     
  7. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    vb, стесняюсь спросить, кого? :)
     
  8. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    аффтара топика.
    У меня на второй глупой ошибке подряд, начинает нервно подергиваться глаз :)
    Если бы кто то подошел ко мне с таким кодом... гы, не уверен в своем душевном состоянии :)
     
  9. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    копировал у аффтара :) поэтому и кавычки не в том месте просмотрел
    с mysql_escape_string аналогично... мдя, ну а что сделать, если глаза разбегаются, пишешь про одно, а уже другое замечаешь
    не смешно :(