Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ввод данных через форму
 
 автор: 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.

Вопрос: что нужно добавить сюда, чтобы осуществить задуманное самым простым способом? =)

Заранее благодарю. :)

   
 
 автор: napTu3aH   (01.09.2005 в 16:43)   письмо автору
 
   для: 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?

   
 
 автор: napTu3aH   (01.09.2005 в 16:53)   письмо автору
 
   для: 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
Сами можете попробывать - почему-то не работает... *_* Точнее, все отображается, но данные в базу не добавляются... (внизу отображается все содержимое базы)

   
 
 автор: napTu3aH   (01.09.2005 в 18:29)   письмо автору
 
   для: 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)
 

выделила. эффект тот же... =((

   
 
 автор: cheops   (01.09.2005 в 18:55)   письмо автору
 
   для: 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

Эмм... Т.е. как я понимаю, ошибка в запросе?..

   
 
 автор: cheops   (01.09.2005 в 19:12)   письмо автору
 
   для: 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()); 
  } 

и почему не работало без нее?..

   
 
 автор: cheops   (01.09.2005 в 20:09)   письмо автору
 
   для: 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 должно было быть написано по-русски, а полчилось вообще ничего...)

   
 
 автор: cheops   (02.09.2005 в 12:56)   письмо автору
 
   для: Zew   (02.09.2005 в 00:07)
 

Пока сложно сказать... а почему у вас под name, copyright и text используются отдельные INSERT-запросы, ведь каждый отдельный запрос вставляет новую запись, присваивая остальным полям значения по умолчанию - т.е. нули, может дело в этом?

   
 
 автор: Zew   (02.09.2005 в 17:16)   письмо автору
 
   для: cheops   (02.09.2005 в 12:56)
 

аааа.... ну да, может быть поэтому... =) Попробую исправить...

   
 
 автор: napTu3aH   (01.09.2005 в 17:27)   письмо автору
747 байт
 
   для: Zew   (01.09.2005 в 16:50)
 

полностью admin.php будет выглядеть примерно так

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования