Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Гостевая книга с MySQL, Гостевая книга с MySQL 
:(
    Опции темы
ZuLLeR
Дата 18.7.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Вот решил сам попробовать написать и у меня возникла проблема:
База данных создана, все нормально, отправляю сообщение и оно уходит в никуда, что то я забыл)) подскажите что, и правильно ли я все написал??? Мне кажеться что просто напросто я не создал еще одного файла, или этот не дописал, помогите плз, и что бы вы сделали по другому?
Это типа guestbook.php
Код

<?php
    require($_SERVER["DOCUMENT_ROOT"]."/config/db_config.php");
    $connection = @mysql_connect($db_host, $db_user, $db_password) or die("eroor connecting");
    mysql_select_db($db_name, $connection);
    
    $name = $_POST["txt_name"];
    $len = strlen($name);
    //Only write database if there's a name
    if ($len > 0)
    {
        $email = $_POST["txt_email"];
        $comment = $_POST["txt_comment"];
        $date = time();
        
        $query = "INSERT INTO guestbook (autoID, name, email, comment, date_auto) VALUES (NULL, '$name', '$email', '$comment', '$date')";
        mysql_query($query, $connection) or die(mysql_error());
        
    }
?>
<html>
<head>
    <title>Guestbook</title>
</head>
<body>
<center>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <font face="arial" size="1">
     Name: <input type="text" name="text_name">&nbsp;
        Email: <input type="text" name="txt_email"><br><br>
        Comment:<br>
        <textarea style="width: 75%" rows="10" name="txt_comment"></textarea>
        <center><input type="submit" value="Submit"</center>
        </font>
</form>
<br><br>

<table bgcolor="#AAAAAA" border="0" width="75%" cellspacing="1" cellpadding="2">
<?php
    $query = "SELECT * FROM guestbook ORDER BY date_auto";
    $result = mysql_query($query, $connection);
    
    for ($i = 0; $i < mysql_num_rows($result); $i++)
    {
        $name = mysql_result($result, $i, "name");
        $email = mysql_result($result, $i, "email");
        $email_len = strlen($email);
        $comment = mysql_result($result, $i, "comment");
        $date = mysql_result($result, $i, "date_auto");
        $show_date = date("H:i:s m/d/Y", $date);
                
        echo '
            <tr>
                <td width="50%" bgcolor="#EEEEEE">
                    <font face="arial" size="2">';
                        if ($email_len > 0)
                        {
                            echo '<b>Name:</b> <a href="mailto:'.$email.'>"'.$name.'</a>';
                        }
                        else
                        {
                            echo '<b>Name:</b> '.$name;
                        }
                        echo '
                        <br>
                        <b>Comment:</b> '.$comment.'
                    </font>
                <td>
                <td width="1%" valign="top" nowrap bgcolor="#EEEEEE">
                    <font>
                        <b>Date: </b> '.$show_date.'
                    </font>
                </td>
            </tr>
        ';
                    
    }
?>

</table>

</center>
</body>
</html>

Это типа config.php
Код

<?php
$db_host = "localhost";
$db_name = "buzzDB";
$db_user = "root";
$db_password = "";
?>

PM MAIL   Вверх
Feldmarschall
Дата 18.7.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ошибки ищутся не по принципу "правильно ли я все написал", а с помощью отладки.
берешь, разбираешься сам - почему у тебя "уходит в никуда".
запрос выполняется? нормально формируется? 

P.S. С какой книжки списывал?
PM   Вверх
Djinn
Дата 18.7.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: 1
Всего: 1



error_reporting(E_ALL); посомтри что говорит вообще...
PM MAIL   Вверх
ZuLLeR
Дата 18.7.2008, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



С какой книжки, я смотрел во многих, и видео уроки тоже, вот что выходит пока, ша еще пошаманю
PM MAIL   Вверх
snake12
Дата 18.7.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 23.5.2007

Репутация: нет
Всего: нет



PM MAIL   Вверх
ZuLLeR
Дата 20.7.2008, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Итак кто чем может помогайте, я начал писать простенькую гостевуху, пока только написал вот что:
1) Сама База guestbook:
Код

CREATE TABLE `guestbook` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(40) NOT NULL default '',
  `email` varchar(30) NOT NULL default '',
  `message` text NOT NULL,
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;

2) И конфиг config.php
Код

<?php
//НАСТРОЙКА БАЗЫ ДАННЫХ
$mysqlserver="localhost";
$mysqllogin="root";
$mysqldatabase="guestbook";
$mysqlpassword = "";

// ПОДКЛЮЧЕНИЕ К БАЗЕ
$connection = mysql_connect($mysqlserver,$mysqllogin,$mysqlpassword);
$select = mysql_select_db($mysqldatabase,$connection);
if (!$connection){
die( "соединение не установленно");
}
if (!$select){
die("соединение с табилицой невозможно");
}
?>

Теперь осталось как я понял самое главное)) и для меня самое сложное это файл guestbook.php, но что я хочу сделать у меня есть форма на html:
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Гостевая книга</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<body>
<form action="" method="POST" name="guestform">
    Ваше имя:<br>
    <input type="text" name="text_name"><br><br>
    Ваш E-mail:<br>
    <input type="text" name="text_email"><br><br>
    Ваше сообщение:<br>
    <textarea rows="5" cols="30" name="text_message"></textarea><br>
    <input type="submit" name="send" value="Отправить">
</form>
</body>
</head>
</html>

Как я представляю должно это все выглядить:
1) запускаю форму
2) заполняю ее
3) жму кнопку, добавляется сообщение, и перекидывает на форму уже с введеным мною сообщением.
Мне как я понимаю нужно в форму заинклюдить guestbook.php, который я еще не написал и пока не четко представляю как должен он выглядить, у кого есть желание помогите) И правильно ли я мыслю?? Что бы Вы посоветовали?
Есть еще вариант, формы на хтмл не будет, а она будет в самом файле  guestbook.php, Но у меня страничка сама на хтмле как мне тогда все это организовать? просто в страницу сайта заинклюдить guestbook.php?

PM MAIL   Вверх
Feldmarschall
Дата 20.7.2008, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Если ты используешь базу данных, то "страничка сама на хтмле" у тебя быть не может. она должна выводить сообщения гостевой из базы данных. а хтмл пока с базой работать не научился.
поэтому страничка должна быть на пхп. 

на этапе обучения языку, удобнее, чтобы каждое действие было в разных файлах. вывод в одном, запись в другом.
поэтому тебе надо сделать два файла - guestbook.php, который вывордит сообщения из базы, и guestbook_add.php, который записывает полученные из формы поля в базу.
поскольку пока мы ничего не занесли, и выводить нечего, то традиционно сначала пишется добавление.
вот и пиши. только в форме поставь экшен на скрипт добавления.
и пиши его
данные формы лежат в массиве $_POST
обработать их надо функцией mysql_real_escape_string и подставить в запрос.
Вот и все, в общем-то
PM   Вверх
ZuLLeR
Дата 20.7.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Так это я все понял, но прикинь если у меня весь сайт на хтмл, и мне нужно гостевуху вставить как мне проще сделать это будет??? Можно ли заинклюдить или т.п.??? или мне всю страницу на пхп ваять придеться???? а дизайн я бы сказал не особо простой). ТО что ты написал я ша сделаю) Спасибо)
PM MAIL   Вверх
Feldmarschall
Дата 20.7.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



А какая разница, какой дизайн?
что значит "ваять на пхп"?
PM   Вверх
ZuLLeR
Дата 20.7.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Ваять это писать) Можно же как нить вставить в хтмл сам пхп и что бы работало) типа страница на хтмл в нее вставлен пхп код
PM MAIL   Вверх
MuToGeN
Дата 20.7.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лесник
****


Профиль
Группа: Модератор
Сообщений: 4379
Регистрация: 15.8.2002
Где: Москва

Репутация: 7
Всего: 32



Цитата(ZuLLeR @  20.7.2008,  13:35 Найти цитируемый пост)
как мне проще сделать это будет???

Проще будет самомтоятельно немного напрячь собственный мозг, а не орать "сделайте все за меня". Тут не решают чужие проблеиы. Тут только подсказывают пути их решения.

/* а не попросить ли мне Вову дать мне в руки плюсомет, что будет и в этом разделе действовать? а то чем дальше в лес, тем больше партизан */


--------------------
Three pings for the token rings,
Five pings for the UNIX machines,
Hundred pings for the broken links,
One special ping to check them all
Through Simple Network Management Protocol!
PM MAIL ICQ   Вверх
Feldmarschall
Дата 20.7.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(ZuLLeR @  20.7.2008,  14:03 Найти цитируемый пост)
Можно же как нить вставить в хтмл сам пхп

нет, нельзя.
но можно наоборот.

PM   Вверх
ZuLLeR
Дата 20.7.2008, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Цитата(MuToGeN @ 20.7.2008,  14:04)
Цитата(ZuLLeR @  20.7.2008,  13:35 Найти цитируемый пост)
как мне проще сделать это будет???

Проще будет самомтоятельно немного напрячь собственный мозг, а не орать "сделайте все за меня". Тут не решают чужие проблеиы. Тут только подсказывают пути их решения.

/* а не попросить ли мне Вову дать мне в руки плюсомет, что будет и в этом разделе действовать? а то чем дальше в лес, тем больше партизан */

Я спросил совета а не просил делать за меня
PM MAIL   Вверх
Feldmarschall
Дата 20.7.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



я тебе дал совет. еще вопросы будут?
PM   Вверх
ZuLLeR
Дата 20.7.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Пока нет. Вот посмотри написал еще guestbook_add.php
Код

<html>
<head>
    <title>Гостевая</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
     Ваше Имя:<br>
        <input type="text" name="text_name"><br><br>
        Ваш E-mail:<br>
        <input type="text" name="txt_email"><br><br>
        Ваше сообщение:<br>
        <textarea rows="5" cols="30" name="text_message"></textarea>
        <input type="submit" name="send" value="Отправить">
</form>
</body>
</head>
</html>

<?php
require_once('./config.php');
if ($_POST[action] == 'OK'){
$message = mysql_real_escape_string($_POST[message]);
$name = mysql_real_escape_string($_POST[name]);
$email = mysql_real_escape_string($_POST[email]);
$date = time();

$query = "INSERT INTO guestbook (ID, name, email, message, date) VALUES (NULL, '$name', '$email', '$message', '$date')";
mysql_query($query);  /////Можно вот так я еще видел: mysql_query($query, $connection) or die(mysql_error());
}
?>

Шас вот напишу файл для просмотра. Я надеюсь не отнимаю у тебя много времени.
PM MAIL   Вверх
Feldmarschall
Дата 20.7.2008, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



В конфиге напиши строчку 
Код

error_reporting(E_ALL);

и посмотри, что будет тебе выводить.
если ничего не будет выводить, то найди в php.ini строчку 
Код

diaplay_errors = off

и замени на on
а сам php.ini положи в каталог виндоус.
и перезагрузи после этого апач
PM   Вверх
ZuLLeR
Дата 20.7.2008, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Жаль что я еще не могу ставить репутацию smile
PM MAIL   Вверх
Dima 2015
Дата 20.7.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 16.3.2008
Где: SPb

Репутация: 2
Всего: 2



ZuLLeR, меня вот это немного смущает:

Код

$query = "INSERT INTO guestbook (autoID, name, email, comment, date_auto) VALUES (NULL, '$name', '$email', '$comment', '$date')";


При этом в структуре таблицы у тебя соотв. 1е поле называется 'id'. По идее если отображение ошибок включено оно должно выругаться на них последними словами что поля такого нету. Аналогично и поле date_auto...

Воть, эт раз.

А вообще вот погляди, несколько дней назад делал эту тему, мож чего поможет...

http://razoom.petrovnn.net/PHP_MyProg/guest_book/
http://razoom.petrovnn.net/PHP_MyProg/gues...ok/add_post.php

Код конечно кривой, но понять можно вроде чего к чему...
PM MAIL ICQ   Вверх
Feldmarschall
Дата 20.7.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ZuLLeR, погоди ставить репутацию. Доделай сначала.
Странно, что ты поместил форму вместе с обработчиком. Но раз уж так сделал, то делать гостевую на части и вовсе смысла нет. Вывод-то тем более можно в том же файле делать

Добавлено через 1 минуту и 6 секунд
Dima 2015, у ZuLLeR-а код гораздо лучше. Это тебе надо у него поучиться, а не ему у тебя.

Добавлено через 2 минуты и 59 секунд
Цитата(ZuLLeR @  20.7.2008,  14:33 Найти цитируемый пост)
mysql_query($query);  /////Можно вот так я еще видел: mysql_query($query, $connection) or die(mysql_error());

лучше всего писать 
Код

mysql_query($query, $connection) or trigger_error(mysql_error());

PM   Вверх
Dima 2015
Дата 20.7.2008, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 16.3.2008
Где: SPb

Репутация: 2
Всего: 2



Feldmarschall, зато у меня работает :р
PM MAIL ICQ   Вверх
ZuLLeR
Дата 20.7.2008, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Все включил вот что вышло хмм буду разбираться)
Notice: Use of undefined constant action - assumed 'action' in Z:\home\test1.ru\www\guestbook.php on line 21
PM MAIL   Вверх
Dima 2015
Дата 20.7.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 16.3.2008
Где: SPb

Репутация: 2
Всего: 2



ZuLLeR, в скобочки action возьми smile

У ассоциативных массивов индексы - строки.

$_POST[message] -> $_POST['message'], ну и везде аналогично...

Это сообщение отредактировал(а) Dima 2015 - 20.7.2008, 15:20
PM MAIL ICQ   Вверх
Feldmarschall
Дата 20.7.2008, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Цитата(Dima 2015 @  20.7.2008,  15:10 Найти цитируемый пост)
Feldmarschall, зато у меня работает :р 

Это самая дурацкая фраза, которую только можно сказать.

Добавлено через 2 минуты и 46 секунд
Цитата(Dima 2015 @  20.7.2008,  15:19 Найти цитируемый пост)
У ассоциативных массивов индексы - строки.

не у "ассоциативных массивов строки", а message - строка. и неважно, у ассоциативного массива или в каком другом месте кода.
 массив тут не при чем.

Это сообщение отредактировал(а) Feldmarschall - 20.7.2008, 15:24
PM   Вверх
skyboy
Дата 20.7.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Dima 2015, будь добр, если не уверен в корректности своего кода, не советуй другим.
в любом случае, "у меня так работает" - не аргумент. обычная машина вполен может ехать на трех колесах, если хитро разместить нагрузку. но ехать так она будет до первого поворота.
FeldmarschallDima 2015, прошу вынести обсуждение подходов к программированию в отдельную тему.
PM MAIL   Вверх
ZuLLeR
Дата 20.7.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Цитата(Feldmarschall @ 20.7.2008,  15:05)
Странно, что ты поместил форму вместе с обработчиком. Но раз уж так сделал, то делать гостевую на части и вовсе смысла нет. Вывод-то тем более можно в том же файле делать

А ты как предлагал форму отдельно, add отдельно и просмотр отдельно?
PM MAIL   Вверх
Feldmarschall
Дата 20.7.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



да но неважно уже.
написал вывод?
PM   Вверх
ZuLLeR
Дата 20.7.2008, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Как я понимаю мне теперь нужно в этом же файле сделать вывод сообщения из бд) ша че нить попробую)

Добавлено через 22 секунды
пишу)

Добавлено через 9 минут и 28 секунд
Кстате я решил проблему))
Код

if ($_POST['action'] == 'OK')
 
заменил на
Код

 if (isset($_POST['action']) == 'OK')

Вроде все правильно и ошибки не выдает)
PM MAIL   Вверх
Fortop
Дата 20.7.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(ZuLLeR @  20.7.2008,  16:19 Найти цитируемый пост)
заменил на
Выделить всёкод PHP

    
Код

 if (isset($_POST['action']) == 'OK')


Вроде все правильно и ошибки не выдает) 

А подумать что ты тут делаешь?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ZuLLeR
Дата 20.7.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



А что бы ты сделал?
PM MAIL   Вверх
Feldmarschall
Дата 20.7.2008, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ZuLLeR, он бы прочитал в документации описание функции isset, оператора if, оператора сравнения == и подумал над осмысленностью всей конструкции в целом.
PM   Вверх
Nigel
Дата 20.7.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: 7
Всего: 19



эх, жаль, что в php нет строгой типизации переменных
PM MAIL   Вверх
ZuLLeR
Дата 24.7.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Вот посмотрите и оцените, все ли с вашей точки зрения правильно, посоветуйте что еще сделать, и правильно ли оформлен код (если нет, то можно с примерами буду только благодарен). Вообщем прошу рецензию)))

БАЗА ДАННЫХ:
Код

CREATE TABLE `guestbook` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(40) NOT NULL default '',
  `email` varchar(30) NOT NULL default '',
  `message` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;


ФАЙЛ КОНФИГА:
Код

<?php
//ПРОВЕРКА НА НАЛИЧИЕ ОШИБОК
error_reporting(E_ALL);

//НАСТРОЙКИ БАЗЫ ДАННЫХ
$mysqlserver="localhost"; // Имя сервера базы данных
$mysqldatabase="guestbook"; // Имя базы данных
$mysqllogin="root"; // Имя пользователя базы данных
$mysqlpassword = ""; // Пароль ползователя базы данных

// ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ
$connection = mysql_connect($mysqlserver,$mysqllogin,$mysqlpassword);
$select = mysql_select_db($mysqldatabase,$connection);
if (!$connection){
die("Соединение не установлено");
}
if (!$select){
die("Соединение с таблицей невозможно");
}
?>


И САМА ГОСТЕВУХА:
Код


<!--СОЗДАНИЕ ФОРМЫ-->
<html>
<head>
    <title>Гостевая</title>
</head>
<body>
<form action="<?=$_SERVER['PHP_SELF']?>" method="POST">
     Ваше Имя:<br>
        <input type="text" name="name"><br><br>
        Ваш E-mail:<br>
        <input type="text" name="email"><br><br>
        Ваше сообщение:<br>
        <textarea rows="5" cols="30" name="message"></textarea><br>
        <input type="submit" name="send" value="OK">
</form>
<br><br>

</body>
</html>

<?php
//СОЗДАНИЕ СООБЩЕНИЯ И ОТПРАВКА ИХ В БАЗУ ДАННЫХ
require_once('./config.php');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']);

$query = "INSERT INTO `guestbook` (name,email,message) VALUES ('$name','$email','$message')";

mysql_query($query, $connection) or trigger_error(mysql_error());
}

//ВЫВОД СООБЩЕНИЯ ИЗ БАЗЫ ДАННЫХ
$query = "SELECT * FROM  guestbook ORDER BY id DESC";
$res = mysql_query($query);
while ($table=mysql_fetch_array($res))

{
echo "<hr>";
echo "Сообщение №" .$table['id']."<br>";
echo "Имя: ".$table['name']."<br>";
echo "E-mail: ".$table['email']."<br>";
echo "Cообщение: ".$table['message']."<br>";
}
?>

PM MAIL   Вверх
dimcat
Дата 24.7.2008, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 15.5.2007

Репутация: нет
Всего: нет



Ну, ещё в таких случаях принято время записывать smile А так навскидку вроде всё правильно...


Код

$query = "INSERT INTO `guestbook` (name,email,message,time) VALUES ('$name','$email','$message',NOW())";

PM MAIL   Вверх
ZuLLeR
Дата 24.7.2008, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Ок, сделаю время еще)
PM MAIL   Вверх
MoLeX
Дата 24.7.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(Nigel @  20.7.2008,  23:11 Найти цитируемый пост)
эх, жаль, что в php нет строгой типизации переменных


наооборот хорошо. (лично мне)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 24.7.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



ZuLLeR, прекрасно. просто прекрасно.
Сказать по правде, я счастлив видеть такой код. Независимо от того, написан ли он полностью самостоятельно, или заимствован кусками.
Главное, что код простой и понятный и в нем нет ничего лишнего. А это очень важно, чтобы не было лишнего. Разными деталями - капчами, антиматами, картинками и прочим можно обрасти потом. Но при первом написании важно, чтобы был понятен и четко виден основной принцип. Чтобы потом можно было легко превратить гостевую в форум, в ленту новостей и почти в любой другой тип приложения.

Не хватает буквально пары мелочей.
Во-первых, после получения формы методом POST, надо делать редирект методом GET. чтобы не добавляли записи повторно. 
После mysql_query надо дописать
Код

header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); 
exit;

Во-вторых, надо отдать должное Dima 2015, в его гостевой реализована защита от XSS инъекций. Не сказать, что для гостевой это так уж актуально, но тем не менее, позволять использовать хтмл теги посетителям, все же, не стоит.
Это можно сделать двумя путями: либо просто убрать все теги функцией strip_tags(), либо заменять теги на html-эквиваленты. Я предпочитаю второй способ. Соответственно, код вывода изменится на 

Код

echo "Сообщение №" .$table['id'])."<br>";
echo "Имя: ".htmlspecialchars($table['name'])."<br>";
echo "E-mail: ".htmlspecialchars($table['email'])."<br>";
echo "Cообщение: ".htmlspecialchars($table['message'])."<br>";


Вот и все. Теперь можно приступать к написанию админки.
Кстати, пока писал код, обнаружил неувязку. id в базе - это совсем не порядковый номер. Ведь ты же можешь удалять некоторые сообщения.
Чтобы пронумеровать сообщения, надо завести отдельную переменную, и увеличивать её при выводе на единицу.
Код

$res = mysql_query($query);
$i=1;
while ($table=mysql_fetch_array($res)) {
echo "<hr>";
echo "Сообщение №" .$i++."<br>";

PM   Вверх
ZuLLeR
Дата 25.7.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Обязательно все поправлю и доведу до ума)))
PM MAIL   Вверх
Gold Dragon
Дата 29.7.2008, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



ну и я добавлю пару замечаний smile 

после того, как пользователь нажал "Отправить"

- для начала вводим переменную ошибки
Код

$info['error'] = '';

- проверяем имя (нельзя доверять тому что приходит от пользователя
Код

$info['name'] = (isset($_POST['name'])) ? strip_tags(trim($_POST['name'])) : '';
if($info['name']==''){
    $info['error'] .= "<br>Вы не указали имя.";
}

ну если быть более требовательным и в имени оставить только буквы и цифры, то можно проверить ещё и на это
Код

/**
 * остаются только словарные символы
 */
function fValidWord($int){
    $id = preg_replace('#\W#','',$int);
    return $id;
}

- не думаю что в сообщении вообще должно быть что-то кроме текста, так что теги там не нужны. и удалять их нужно перед сохранением в базе. За одно не помешает удалить все пробелы до и после сообщения. И заодно поставить ограничение на количество символов в сообщении, а то некоторые попытаются загрузить "Войны и Мир". В итоге должно получиться примерно такое
Код

$info['message'] = (isset($_POST['message'])) ? substr(strip_tags(trim($_POST['message'])), 0, 1000) : '';
if($info['message']==''){
    $info['error'] .= "<br>Вы не написали сообщение.";
}

- не мешало бы проверить и правильность мыла smile
Код

$info['mail'] = (isset($_POST['mail'])) ? strip_tags(trim($_POST['mail'])) : '';
$info['mail'] = (preg_match('/[0-9A-Za-z._-]+@([0-9a-z_-]+\.)+[a-z]{2,4}/', $info['mail'])==0)? '' : $info['mail'] ;
// а так как mail не обязательный параметр, то если оно не верно. оставляем просто пустым


Добавлено через 6 минут и 14 секунд
- затем обрабатываем всё что у нас получилось
Код

if($info['error']!=''){
    /**
     * выводим сообщение об ошибках
     * я например выводу туже форму с уже введёнными данными и
     * в верху перечень ошибок
     */
}else{
    /**
     * сохраняем данные в базе и делаем переход на сообщения
     */
}

- ещё бы не помещало предусмотреть "фильтр мата"

- ну и обязательно добавить проверочный код. Если не сделать, то роботы завалят спамом


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ZuLLeR
Дата 30.7.2008, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Супер спасибо всем) я и сам мог бы все это написать, но все равно огромное спасиб smile о)
PM MAIL   Вверх
Gold Dragon
Дата 30.7.2008, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



и про постраничный вывод не забудь

Добавлено через 3 минуты и 5 секунд
кстати, зачем нужна нумерация сообщений? Не достаточно просто использовать ID? При таком условии каждое сообщение будит иметь индивидуальный номер на который можно ссылаться


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
ZuLLeR
Дата 30.7.2008, 07:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 5.6.2008

Репутация: нет
Всего: нет



Про страничный вывод я помню))) и про нумерацию тоже уже сделал, но все равно спасибо за советы) Как все доработаю выложу, пока времени нет нужно логотип, дизайн сайта и наружку сделать, вообщем дел попа) Кстати ты не знаешь смотри есть форма для отправки сообщений с сайта, как сделать что бы помимо самого сообщения отправляемого мне на мыло, отправлялось тому кто пишет стандартное для всех сообщение типа: "спасибо, но на данный момент все заняты" что то в этом роде. Часть кода формы выглядит так:
Код

// создаем наше сообщение
        $mess = '
ФИО:'.$_POST['fio'].'
Город:'.$_POST['city'].'
Контактное лицо:'.$_POST['cont'].'
Контактный email:'.$_POST['email'].'
Написал Вам:'.$_POST['testimonials'];

        // $to - кому отправляем
        $to = '[email protected]';
        // $from - от кого
        $from='сдесь типа мыло от кого';
        mail($to, $_POST['cont'], $mess, "From:".$from);

    echo '<br><br><br><p align="center"><strong><h1>Спасибо! Ваше письмо отправлено.</h1></strong></p>';
        echo ('<html><head>
<meta http-equiv="refresh" content="3; url=http://www.123.com">
</head></html>');
}

Извиняюсь что не в тему, если знаете ответ, можно с примером кода))) а после плз удали сообщение из темы, если можешь) Спс smile 
PM MAIL   Вверх
Gold Dragon
Дата 30.7.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



есть готовые классы, но пользуюсь этим (может конечно это и не правильно, пусть тогда подправят)
Код

$to  = "=?windows-1251?b?".base64_encode('Имя')."?= <мыло_куда>" ;
$subject = "=?windows-1251?b?".base64_encode('Сообщение с сайта о чём-то')."?=";
$message = "само_сообщение";
$headers  = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: =?windows-1251?b?".base64_encode('От куда')."?= <мыло_от_куда>\r\n";
mail($to, $subject, $message, $headers);




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1878 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.