|
|
|
| В чем туплю?
Матом не крыть 2 дня только с MySql.
Короче пытаюсь данные из формы в БД записать, таким вот способом
// Это сама форма index.php
<form action="add_states.php" method="post">
<input type="hidden" name="action" value="post">
<p>
<table align="center">
<tr>
<td>
<table cellpadding="0" cellspacing="0">
<tr>
<td>
Имя:
</td><td>
<Input name="name" type="text" size="32">
</td></tr>
<tr>
<td>
Сообщение:
</td>
</tr>
<tr>
<td colspan="2">
<textarea cols="50" rows="7" name="msg"></textarea>
</td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" name="add_post" value="Добавить сообщение">
</td>
</tr>
</table>
</td>
</tr>
</table>
</p>
</form>
|
//А вот файл который это всё должен записать по идее.add_states.php
// код не мой. стырил из какой то гостевухи. так шо не ругаем. просто хочу понять вот чужое и колупаю
<?
session_start();
$sid_add_theme = session_id();
// Устанавливаем соединение с базой данных
include "config.php";
$error = "";
$action = "";
// Возвращаем значение переменной action, переданной в урле
$action = $_POST["action"];
// Если оно не пусто - добавляем сообщение в базу данных
if (!empty($action))
{
// Проверяем совпадает ли идентификатор сессии с
// переданным в форме - защита а авто-постинга
if($sid_add_theme != $_POST['sid_add_theme'])
{
$action = "";
$error = $error."<LI>Ошибка добавления сообщения в гостевую книгу\n";
}
// Проверяем сообщение на слишком длинные слова
$lenmsg = strlen($msg);
$templen = 0;
$temp = strtok($msg, " ");
if (strlen($msg)>60)
{
while ($templen < $lenmsg)
{
if (strlen($temp)>60)
{
$action = "";
$error = $error."<LI>Текст сообщения содержит слишком много символов без пробелов\n";
break;
}
else
{
$templen = $templen + strlen($temp) + 1;
}
$temp = strtok(" ");
}
}
// Проверяем правильность ввода информации в поля формы
if (empty($_POST["msg"]))
{
$action = "";
$error = $error."<LI>Вы не ввели сообщение\n";
}
if (empty($_POST["name"]))
{
$action = "";
$error = $error."<LI>Вы не ввели имя\n";
}
// Запрос к базе данных на добавление сообщения
$query = "INSERT INTO guest VALUES (0,
'$name',
'$msg',
NOW(),
'show');";
if(mysql_query($query))
{
// Возвращаемся на главную страницу если всё прошло удачно
print "<HTML><HEAD>\n";
print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
print "</HEAD></HTML>\n";
exit();
}
else
{
// Выводим сообщение об ошибке в случае неудачи
echo "<a href='index.php'>Вернуться</a>";
echo("<P> Ошибка при добавлении сообщения</P>");
echo("<P> $query</P>");
exit();
}
}
?>
Пусто :(
|
Записывает всё кроме Имени и самого сообщения :(
Как мне их туда передать.
Если тут усё совсем неправильно то покажите простейший пример хотяб с одним какимто полем :) | |
|
|
|
|
|
|
|
для: Sywooch
(28.03.2006 в 13:40)
| | Лучше немного для начала упростить код add_states.php (усложнить всегда успеете :)
<?php
// Устанавливаем соединение с базой данных
include "config.php";
// Возвращаем значение переменной action, переданной в урле
$action = $_POST['action'];
// Если оно не пусто - добавляем сообщение в базу данных
if (!empty($action))
{
// Проверяем правильность ввода информации в поля формы
if (empty($_POST['msg'])) exit("Вы не ввели сообщение");
if (empty($_POST['name'])) exit("Вы не ввели имя");
// Защищаемся от SQL-инъекций
if (!get_magic_quotes_gpc())
{
$_POST['msg'] = mysql_escape_string($_POST['msg']);
$_POST['name'] = mysql_escape_string($_POST['name']);
}
// Запрос к базе данных на добавление сообщения
$query = "INSERT INTO guest VALUES (0,
'$_POST[name]',
'$_POST[msg]',
NOW(),
'show');";
if(mysql_query($query))
{
// Возвращаемся на главную страницу если всё прошло удачно
print "<HTML><HEAD>\n";
print "<META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'>\n";
print "</HEAD></HTML>\n";
exit();
}
else
{
// Выводим сообщение об ошибке в случае неудачи
echo "<a href='index.php'>Вернуться</a>";
echo("<P> Ошибка при добавлении сообщения</P>");
echo("<P> $query</P>");
exit();
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(28.03.2006 в 13:54)
| | Согласен.
А с формой все нормально чтоли? | |
|
|
|
|
|
|
|
для: Sywooch
(28.03.2006 в 13:56)
| | Да, с формой всё нормально. | |
|
|
|
|
|
|
|
для: cheops
(28.03.2006 в 14:00)
| | Опять вопросики. Но если вручную вводить то русским показует!
Значит гдето на пути теряеться.
Как это можно побороть.
ЗЫ. Кодировки везде cp1251_general_cs | |
|
|
|
|
|
|
|
для: Sywooch
(28.03.2006 в 14:02)
| | Заработало!
Как вы ранее и писали.
После выбора базы:
mysql_query("SET NAMES 'cp1251'"); | |
|
|
|
|
|
|
|
для: Sywooch
(28.03.2006 в 14:09)
| | Уважаемый cheops !
А переменной $action в файле config.php чего присваиваем (после подключения к хосту и выбора базы) ?
Очень интересуюсь !
Спасибо!
P.S. Или эта та самая $action, которая из скрытого поля формы пришла ..?
Тогда вот это чего такое :
...
// Устанавливаем соединение с базой данных
include "config.php";
$error = "";
$action = "";
|
? | |
|
|
|
|
автор: cheops (из кафе) (29.03.2006 в 13:09) |
|
|
для: evgen
(29.03.2006 в 04:39)
| | Нет, комментарий
// Устанавливаем соединение с базой данных
|
относится только к конструкции include, а следующие переменные - это вспомогательные переменные самого скрипта, т.е. $action - это переменная из HTML-формы. | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(29.03.2006 в 13:09)
| | Понял, спасибо!
Только не совсем понятен тайный смысл передачи этой переменной из формы в сценарий, что она (переменная) дает?
форма:
...
<input type="hidden" name="action" value="post">
|
сценарий:
...
// Возвращаем значение переменной action, переданной в урле
$action = $_POST['action'];
// Если оно не пусто - добавляем сообщение в базу данных
if (!empty($action))
...
|
Все что она ($action) выполняет - сообщает о том, что форма запустила файл *.php? А разве этот файл может быть как-то иначе запущен?
Или я ошибаюсь? | |
|
|
|
|
|
|
|
для: Evgen
(29.03.2006 в 15:28)
| | Если у вас нет HTML-формы в этом же файле, то $action не нужна (если честно, если и есть без неё вполне можно обойтись) - поэтому всё что с ней связано можно удалять - она обычно нужна когда у вас в этом же файл HTML-форма и необходимо различать состояния когда нажата кнопка отправки данных из HTML-формы, а когда нет. | |
|
|
|
|
|
|
|
для: cheops
(29.03.2006 в 18:25)
| | Спасибо за пояснение - значит верной дорогой иду ..! | |
|
|
|
|
|
|
|
для: cheops
(29.03.2006 в 18:25)
| | - | |
|
|
|