За последние 24 часа нас посетили 62917 программистов и 1679 роботов. Сейчас ищут 982 программиста ...

Гостевая средствами PHP и MySQL.

Тема в разделе "MySQL", создана пользователем amen, 18 сен 2009.

  1. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Здравствуйте. Помогите с одной проблемой.
    Я сделал гостевую, но она не работает. Судя по всему данные не заносятся в базу. Вот фрагменты кода:

    PHP:
    1. !-- блок отображения сообщений-->
    2. <?php
    3. $server="database";
    4. $pass="ZgESNqVX ";
    5. $user="tuitkar8";
    6. $DB="tuitkar8";
    7. mysql_connect($server,$user,$pass) or die ("Нет соединения с MySQL сервером!");
    8. mysql_query ("CREATE DATABASE IF NOT EXISTS ".$DB) or die ("Не могу создать базу данных gb.");
    9. mysql_query ("CREATE TABLE IF NOT EXISTS  a (
    10.   id int(10) unsigned NOT NULL auto_increment,
    11.   dt datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
    12.   name varchar(100) NOT NULL,
    13.   theme varchar(100),
    14.   email varchar(100),
    15.   message text NOT NULL,
    16.   PRIMARY KEY (id))") or die ("Не могу создать таблицу gb2.");
    17.    
    18. $c=0;
    19. $r=mysql_query ("SELECT * FROM a ORDER BY dt DESC"); // выбор всех записей из БД, отсортированных так, что самая последняя отправленная запись будет всегда первой.
    20.     while ($row=mysql_fetch_array($r))  // для каждой записи организуем вывод.
    21.     {
    22.         if ($c%2)
    23.             $col="bgcolor='#f9f9f9'";    // цвет для четных записей
    24.         else
    25.             $col="bgcolor='#f0f0f0'";    // цвет для нечетных записей
    26.            
    27.             ?>
    28.             <table border="0" cellspacing="3" cellpadding="0" width="90%" <? echo $col; ?> >
    29.             <tr>
    30.                 <td width="150" ><b>Имя:</b></td>
    31.                 <td><?php echo $row['name']; ?></td>
    32.             </tr>
    33.             <tr>
    34.                 <td width="150" ><b>E-mail:</b></td>
    35.                 <td><?php echo $row['email']; ?></td>
    36.             </tr>
    37.             <tr>
    38.                 <td width="150" ><b>Тема:</b></td>
    39.                 <td><?php echo $row['theme']; ?></td>
    40.             </tr>
    41.             <tr>
    42.                 <td width="150" style="color: #000000;">Дата:</td>
    43.                 <td><?php echo $row['dt']; ?></td>
    44.             </tr>    
    45.            
    46.             <tr>
    47.                 <td colspan="2" style="color: #000000;">---------------------------------------------------------------</td>
    48.             </tr>        
    49.             <tr>
    50.                 <td colspan="2">
    51.                     <?php echo $row['message']; ?>
    52.                     <br><hr>
    53.                 </td>
    54.             </tr>
    55.            
    56.             </table>      
    57. <?php
    58.         $c++;
    59.     }
    60.    
    61.    
    62.     if ($c==0) // если ни одной записи не встретилось
    63.         echo "Гостевая книга пуста!<br>";
    PHP:
    1. <form name="myForm" action="add.php" method="post" onSubmit="return splash();">
    2. <input type="hidden" name="action" value="add">
    3.  
    4.     <tr>
    5.         <td width="20%">
    6.             Имя:
    7.         </td>
    8.         <td>
    9.             <input name="name" size="40" style="width: 300px;">
    10.         </td>
    11.     </tr>
    12.    
    13.     <tr>
    14.         <td width="20%">
    15.             E-mail:
    16.         </td>
    17.         <td>
    18.             <input name="email" size="40" style="width: 300px;">
    19.         </td>
    20.     </tr>
    21.    
    22.     <tr>
    23.         <td width="20%">
    24.             Тема:
    25.         </td>
    26.         <td>
    27.             <input name="theme" size="40" style="width: 300px;">
    28.         </td>
    29.     </tr>  
    30.    
    31.     <tr height="165">
    32.         <td valign="top">
    33.             Сообщение:
    34.         </td>
    35.         <td width="80%">
    36.             <textarea name="message" cols="40" rows="8" wrap=hard style="width: 300px;"></textarea>
    37.         </td>
    38.     </tr>      
    39.     <tr>
    40.         <td>&nbsp;</td>
    41.         <td><p align="left"><input type="submit" value="Отправить сообщение"> </p> </td>
    42.     </tr>
    43. </form>
    add.php:

    PHP:
    1. <?
    2. $server="database";
    3. $pass="ZgESNqVX ";
    4. $user="tuitkar8";
    5. $DB="tuitkar8";
    6. mysql_connect($server,$user,$pass) or die ("Нет соединения с MySQL сервером!");
    7. mysql_query("Insert into tuitkar8(dt,name, email, theme,  message)
    8. VALUES (now(),'$name', $email,'$theme','$message')");

    При открытии гостевой выводится форма и надпись, что гостевая пуста. При добавлении записи ничего не происходит. При попытке просмотреть уникальные значения столбцов таблицы на сервере в зависимомти от выбранного столбца выдаётся ошибка:


    Очень нужна помощь, подскажите где я ошибся.
    PHP:
    1.  
    PHP:
    1.  
     
  2. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    добро пожаловать в ряды программистов.
    Ряды замените на rows_count
     
  3. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    iliavlad, поясните пож. в каком месте нужно заменить это слово?
    Как вы могли заметить в коде такого нет. А эта ошибка выводится программой РНРMyAdmin.
     
  4. kostyl

    kostyl Guest

    amen
    для полной наглядности не хватает IP сервера базы данных ))
     
  5. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Поправка. Я исправил одну ошибку - в add.php в запрсе
    PHP:
    1. mysql_query("Insert into tuitkar8(dt,name, email, theme,  message)
    заменил tuitkar8 на a.
    Теперь при добавлении новой записи в гостевой появляется новый пост, однако он не содержит введённых значений. Попросту выводится пустое сообщение, без имени, темы и самого сообщения.
    Посмотрел на серваке через PHPMyAdmin - в таблицу не заносится ничего кроме даты.

    Возможно проблема в этом:
    прочитал в одной книжке, что количество значений в скобках
    PHP
    mysql_query("Insert into a(dt,name, email, theme, message)
    VALUES (now(),'$name', '$email','$theme','$message')");


    должно соответствовать количеству столбцов в таблице. Вместе с ключевым id у меня в таблице 6 столбцов, в запросе выше - 5. Возможно ошибка в этом? Каким образом включить id в этот список?
     
  6. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    где код скамуниздил?
    читай про
    register_globals
    Sql Injection
    XSS
    Про каптчи почитай

    короче читай тут
    http://phpfaq.ru
    и купи норм книжку
     
  7. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Mr.M.I.T., скомуниздил - это грубо сказано. Я учусь по исходникам, ковыряю, разбираю, что к чему. Читать длинные мануалы - дико скучно и малоэффективно. Например данную гостевуху я склеил из двух-трёх других + засунл всё в таблицу собственного "изобретения"))

    Спасибо за ссылку, обязательно последую твоим советам. Но всё же не мог бы ты подсказать, где ошибка?
     
  8. kostyl

    kostyl Guest

    amen
    лучше скомунизди гостевую на этом форуме в решениях и ковыряй нормальный код...
     
  9. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    amen
    ой, да ошибок много =)
    код видно - устаревший

    Гостевых на форуме действительно много,
    от самых простых и до MVC
     
  10. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    kostyl, Mr.M.I.T., эта гостевуха - мой первый опыт использования РНР и над тем результатом, которого я добился на данный момент я корпел не один день - три)). Осталось совсем чуть чуть. Главное, чтоб она худо-бедно заработала, а доводить до ума я её потом буду. Поэтому, если не особо трудно, всё же укажите на ошибки, а я постараюсь их исправить.))

    ВСЁ. Я ЕЁ СДЕЛАЛ
    Оказывается надо было просто убрать знак $ вот отсюда:
    mysql_query("Insert into a(dt,name, theme, email, message) VALUES (now(),'$name','$theme', '$email','$message')");
    Я не указывал таких переменных. Теперь всё работает.

    Mr.M.I.T., а ты говорил много)))
     
  11. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    если первый - очень молодец =)

    ошибки, потом сам разберёшься
    начни с гугления про register_globals
    на phpfaq кстати, хорошо про это написано
     
  12. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Mr.M.I.T., ок. Теперь у меня на очереди - новостная лента. Так что я ещё загляну;)
     
  13. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Значит гостевую я сделал, теперь очередь за новостной лентой.
    Почитал тут главу из книги Колисниченко "Самоучитель РНР5" и мои мысли пришли в тупик.
    Вот значит я собрался делать нов. ленту. Что из себя будет представлять админка к ней? Это будет обычная страница, с полями для ввода данных, которую я сам должен написать? Если да то как я буду на неё попадать? Ясное дело, что ссылка "Администрирование" на главной странице неуместна.
    И ещё, мне говорили, что нужно будет сделать одну админку для управления всем сайтом, а Колисниченко говорит, что такая админка предоставляется самим хостингом. Вобщем я запутался.
    Если лучше делать админку (для управления сайтом) самому, то не лучше ли в неё включить управление лентой новостей, гостевой книгой и т.п.? И опять же каким образом получать к ней доступ?
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  15. amen

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

    С нами с:
    18 сен 2009
    Сообщения:
    298
    Симпатии:
    0
    Адрес:
    Узбекистан
    Mr.M.I.T., это точно. Но пока в книжке что-нибудь найдёшь (если найдёшь) уйдёт много времени. Я решаю задачи по мере их поступления и пока результаты меня удовлетворяют. Те знания, которые я получил создавая гостевую книгу намного весомее чем те, которые я добыл из книг. Спасибо за ссылку, тред изучу.

    Я сейчас поэксперементировал с одним исходником новостной ленты. На неё и сообщения и ссылка добавить новость находилась на одной странице. Я вынес эту ссылку на другую - add.php и получил такой результат - на индексе размещаются новости, а чтобы добавить новую, нужно в адресной строке вместо индекса вписать add. На эдде нужно ввести имя и пароль и можно добавлять новость.
    Вопрос - можно ли такую систему использовать для крупного сайта?