|
автор: Zew (01.09.2005 в 16:22) |
|
| Здравствуйте, уважаемые знатоки пхп. =) Совсем недавно у меня возникла необходимость изучать этот язык *хотя желание это сделать было уже дааавно*, и конечно же у меня появилось несколько вопросов, на которые я никак не могу найти ответа.
Во-первых, мне нужно сделать форму, посылающую данные в базу. Из всех учебников, сайтов и готовых скриптов я никак не пойму сам принцип, как создать самую простейшую форму отправки данных в базу - везде попадаются либо слишком навороченные, либо вообще неработающие... =( В тонкостях я бы хотела попытаться разобраться самостоятельно, а вот общие принципы мне не ясны...
Вот к примеру, есть файл admin.php, в котором содержится следующий код:
<?php
$server="localhost";
$user="user";
$password="pass";
$database="base";
if(!mysql_connect($server, $user, $password))
{echo "<p>Ошибка!</p>";
exit;}
mysql_select_db($database);
?>
<html><head><title>заголовок</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<LINK href="style.css" type=text/css rel=STYLESHEET>
</head><body>
<form name="add" method="post" action="admin.php">
<input name="author" type="text" id="author" maxlength="30">
<input type="submit" name="Submit" value="Submit">
</form>
</body></html>
т.е. должно быть некое поле, к примеру author, которое отправляется в соответствующее поле author уже созданной таблицы authors.
Вопрос: что нужно добавить сюда, чтобы осуществить задуманное самым простым способом? =)
Заранее благодарю. :) | |
|
|
|
|
|
|
|
для: Zew
(01.09.2005 в 16:22)
| | У вас нет самого запроса к БД, который бы заносил данные из формы
mysql_query(' CREATE TABLE $table ( 'author' TINYTEXT) ');
#создаем таблицу, с именем $table, если ее еще нет
mysql_query('INSERT INTO $table values('$author')') ;
#добавляем в нее данные из формы
|
| |
|
|
|
|
автор: Zew (01.09.2005 в 16:50) |
|
|
для: napTu3aH
(01.09.2005 в 16:43)
| | Ну да, я знаю, т.к. в этот запрос еще надо каким-то образом доставить то, что юзер напишет в форме. Вопрос в том, как?
Ну ладно, допустим мы имеем следующее:
<?php
$server="localhost";
$user="user";
$password="pass";
$database="base";
if(!mysql_connect($server, $user, $password))
{echo "<p>Ошибка!</p>";
exit;}
mysql_select_db($database);
mysql_query('INSERT INTO authors values('$author')') ;
?>
Но откуда возьмется значение переменной $authors? | |
|
|
|
|
|
|
|
для: Zew
(01.09.2005 в 16:50)
| | переменная автоматически создаеться из названия формы, в вашем случае это
<input type="Text" name="author"></input>
|
| |
|
|
|
|
автор: Zew (01.09.2005 в 17:57) |
|
|
для: napTu3aH
(01.09.2005 в 16:53)
| | таак, уже яснее. =) Но все же что-то не работает. Вот как сейчас выглядит мой код:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<?php
$server="localhost";
$user="helsinru_fic";
$password="vsx3wk";
$database="helsinru_fic";
if(!mysql_connect($server, $user, $password))
{echo "<p>Ошибка!</p>";
exit;}
mysql_select_db($database);
?>
<title>Панель управления фанфикера</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<LINK href="style.css" type=text/css rel=STYLESHEET>
</head><body>
<div align="center"><br>
<?
if (empty($author)){echo "<center>Введите имя автора</center><br><br>";}
else {mysql_query("INSERT INTO authors ('author') values($author)");}
?>
<form name="add" method="post" action="admin.php">
<input name="author" type="text" id="author" maxlength="30">
<input type="submit" name="Submit" value="Submit">
</form><br></div>
<ul><?
echo "Уже в базе:<br>";
$query = mysql_query("select * from authors");
for($i = 0; $i < mysql_num_rows($query); $i++)
{$sdf = mysql_fetch_array($query);
echo '<li>' . $sdf[author] . '</li>';}
?></ul>
</body></html>
|
А вот страница, где он исполняется: http://art.hellsinguniverse.ru/fanfiction/admin.php
Сами можете попробывать - почему-то не работает... *_* Точнее, все отображается, но данные в базу не добавляются... (внизу отображается все содержимое базы) | |
|
|
|
|
|
|
|
для: Zew
(01.09.2005 в 17:57)
| | Попробуйте выделить кавычками переменную $author
<?
if (empty($author)){echo "<center>Введите имя автора</center><br><br>";}
else {mysql_query("INSERT INTO authors (author) values('$author')");}
?>
|
| |
|
|
|
|
автор: Zew (01.09.2005 в 18:40) |
|
|
для: napTu3aH
(01.09.2005 в 18:29)
| | выделила. эффект тот же... =(( | |
|
|
|
|
|
|
|
для: Zew
(01.09.2005 в 17:57)
| | Так как SQL - это отдельный мини-язык, то PHP не сообщает о возникающих проблемах - их следует обрабатывать самостоятельно. Пожалуйста исправьте код
<?
if (empty($author)){echo "<center>Введите имя автора</center><br><br>";}
else {mysql_query("INSERT INTO authors ('author') values($author)");}
?>
|
следующим образом
<?
if (empty($author)){echo "<center>Введите имя автора</center><br><br>";}
else
{
$query = "INSERT INTO authors ('author') values($author)";
if(!mysql_query($query))
{
echo $query."<br>";
exit("Ошибка - ".mysql_error());
}
}
?>
|
Что-нибудь дополнительно выводится? | |
|
|
|
|
автор: Zew (01.09.2005 в 19:06) |
|
|
для: cheops
(01.09.2005 в 18:55)
| | Исправила. Выводит следующее:
INSERT INTO authors ('author') values(333)
Ошибка - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''author') values(333)' at line 1
Эмм... Т.е. как я понимаю, ошибка в запросе?.. | |
|
|
|
|
|
|
|
для: Zew
(01.09.2005 в 19:06)
| | >Эмм... Т.е. как я понимаю, ошибка в запросе?..
да, попробуйте исправить код следующим образом
<?
if (empty($author)){echo "<center>Введите имя автора</center><br><br>";}
else
{
$query = "INSERT INTO authors (author) values($author)";
if(!mysql_query($query))
{
echo $query."<br>";
exit("Ошибка - ".mysql_error());
}
}
?>
|
Что пишет на этот раз (если пишет)? | |
|
|
|
|
автор: Zew (01.09.2005 в 19:32) |
|
|
для: cheops
(01.09.2005 в 19:12)
| | Работает! )) Спасибо огромное! =)
Эм, а вот чтобы окончательно расставить все точки над i, не могли бы вы объяснить, что означает часть
if(!mysql_query($query))
{
echo $query."<br>";
exit("Ошибка - ".mysql_error());
}
|
и почему не работало без нее?.. | |
|
|
|
|
|
|
|
для: Zew
(01.09.2005 в 19:32)
| | Теперь будет работать и без неё, достаточно оставить
<?php
mysql_query($query)
?>
|
Эта часть нужна была для отладки, функция mysql_query() возвращает дескриптор запроса или false, если база данных возвращает ошибку, поэтому применяя конструкцию
<?php
if(!mysql_query($query))
{
// ...
}
?>
|
мы всегда можем определить ошибка в PHP или в MySQL. Строка
<?php
echo $query."<br>";
?>
|
Выводит сам запрос, иногда одного взляда на SQL-запрос достаточно чтобы определить в чём проблема. Функция exit() останавливает работу скрипта и выводит строку, пераданную ей в качестве аргумента в окно браузера
<?php
exit("Ошибка - ".mysql_error());
?>
|
Здесь мы к сообщению прикрепляем сообщение, возвращаемое функцией mysql_error(), которая возвращает текст об ошибке от базы данных. Использование этой функции полезно, так как всегда можно узнать, что не понравилось СУБД и в каком месте запроса. Иногда без этой функции можно очень долго вылизывать запрос, а в результате оказывается, что забыл установить соединение с сервером базы данных. Поэтому хорошей практикой при отладке является вывод сообщений mysql_error() - это экономит массу времени. | |
|
|
|
|
автор: Zew (02.09.2005 в 00:07) |
|
|
для: cheops
(01.09.2005 в 20:09)
| | Ааа, понятненько. =) Еще раз пасибочки.
Хм, а вот вопрос на засыпку: почему русские буквы в базу не переправляются через форму? )) вот тут: http://art.hellsinguniverse.ru/fanfiction/admin.php я пыталась расширить форму отправки, изменила код до:
<form name="add" method="post" action="admin.php" style="width: 90% ">
<p align="left"><span class="text4">Название фанфика:</span>
<input name="name" type="text" value="<?
if (empty($name)){echo "до 100 любых символов";}
else {$query_a = "INSERT INTO $author (name) values($name)";
mysql_query($query_a);} ?>" size="50" maxlength="100"></p>
<p align="left"><span class="text4">От автора:<br></span>
<textarea name="copyright" cols="50" wrap="VIRTUAL">
<? if (empty($copyright)){echo "Ваш копирайт, возможно небольшое вступление, опровержения и т.п.";}
else {$query_c = "INSERT INTO $author (copyright) values($copyright)";
mysql_query($query_c);} ?></textarea></p>
<p align="left" class="text4">Фанфик:<br>
<textarea name="text" cols="100" rows="20" wrap="VIRTUAL"><? if (empty($text)){echo "Заполнять в формате HTML.
Основные теги:
<br> - переход на новую строку
<em>текст</em> - курсив;
<strong>text</strong> - жирный
<center>text</center> - по центру
<p>абзац текста<p><p></p> - абзац (аналогично 2 <br>)";}
else {$query_t = "INSERT INTO $author (text) values($text)";
mysql_query($query_t);} ?></textarea></p>
<p align="left"><input name="Submit" type="submit" class="butt" value="Submit"></p></form><br></div>
<ul><?
echo "<strong>Уже в базе:</strong><br>";
$query = mysql_query("select name, id from Aneris order by id");
for($i = 0; $i < mysql_num_rows($query); $i++)
{$sdf = mysql_fetch_array($query);
echo '<li>' . $sdf[id] . ' | ' . $sdf[name] . '</li>';}
?></ul>
|
И если записать туда цифры, они отлично переправляются в базу. Но вот с кирилицей что-то не работает, и получаются пустые ячейки (то, что внизу под номерами 20, 21, 23 и 24 должно было быть написано по-русски, а полчилось вообще ничего...) | |
|
|
|
|
|
|
|
для: Zew
(02.09.2005 в 00:07)
| | Пока сложно сказать... а почему у вас под name, copyright и text используются отдельные INSERT-запросы, ведь каждый отдельный запрос вставляет новую запись, присваивая остальным полям значения по умолчанию - т.е. нули, может дело в этом? | |
|
|
|
|
|
|
|
для: cheops
(02.09.2005 в 12:56)
| | аааа.... ну да, может быть поэтому... =) Попробую исправить... | |
|
|
|
|
 747 байт |
|
|
для: Zew
(01.09.2005 в 16:50)
| | полностью admin.php будет выглядеть примерно так | |
|
|
|