Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: PHP и MySql. простенький скрипт. Помогите исправить ошибки.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Добавление данных в поле базы
nurv_ad
Отправлено: 28 Февраля, 2007 - 01:57:43
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




Задача:
Есть созданная база с темами рефератов. Студен может подписаться под темой, написав свою фамилию, но при этом надо чтоб повторная запись фамилии был запрещен.

Что уже есть:
выводятся данные Фамилия | ID | Название темы
но почему при заполнении формы данные в поле name не заносятся. Помогите решить проблему.
Заранее благодарен.

Делаю следующее:

#
# Структура таблицы `referat`
#

CREATE TABLE `referat` (
`id` int(2) NOT NULL auto_increment,
`title` varchar(255) default NULL,
`name` varchar(50) default NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=41 ;
INSERT INTO `referat` VALUES (1, 'Общественное питание и его место на потребительском рынке', '');
INSERT INTO `referat` VALUES (2, 'Проблемы и тенденции развития общественного питания', '');

(и т.д.)

show.php

CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. error_reporting (E_ALL ^ E_NOTICE);
  4.  
  5. if($_GET['action'] == "add"){
  6.    include("1.php");
  7. }
  8. ?>
  9. <?php
  10.  $host = "localhost";    // Имя хоста
  11.  $port = "3306";         // Номер порта, 3306 - по умолчанию
  12.  $user = "root";         // Имя пользователя
  13.  $pass = "*******";    // Пароль
  14.  $dbnm = "plexa_ref";         // Имя Базы Данных
  15.  $h = ( empty( $port ) ) ? $host : $host . ":" . $port;
  16.  $db = mysql_connect( $host , $user , $pass );
  17.  // Соединяемся с Сервером Баз Данных
  18.  if( !$db )   // Если соединиться не удалось:
  19.   {
  20.    print ("Извиняй ошибка вышла");
  21.    // Пишем ошибку и завершаем выполнение скрипта.
  22.    exit();
  23.   }
  24.  // иначе выбираем Базу Данных для работы
  25.  if( ! mysql_select_db( $dbnm ) )  // Если нет такой БД
  26.   {
  27.    print ("Ваще нет такой базу че гонишь то??");
  28.    // Пишем ошибку и завершаем выполнение скрипта.
  29.    exit();
  30.   }
  31. $res = mysql_query( "SELECT `*` FROM `referat`" );
  32. while( $row = mysql_fetch_object( $res ) )
  33.  {  print "<br><a href="?action=add">Фамилия:</a> " . $row -> name .", №: " . $row -> id . ", Тема: " . $row -> title . ".";  }
  34. ?>
  35.  


form.php

CODE (text):
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <body>
  4. <form name="add" action="add.php"  method="post">
  5. Фамилия<br>
  6. <input type="text" name="name">
  7. <input type="submit" name="submit" value="Добавить">
  8. </form>
  9. </body>
  10. </html>
  11.  


add.php

CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?
  3.  $host = "localhost";    // Имя хоста
  4.  $user = "root";         // Имя пользователя
  5.  $pass = "*****";    // Пароль
  6.  $dbnm = "plexa_ref";         // Имя Базы Данных
  7.  
  8. /* Соединение с сервером базы данных */
  9. mysql_connect ($host, $user, $pass);
  10. /* Выбор базы данных */
  11. mysql_select_db($dbnm);
  12. $a=$_GET['name'];
  13. $e=$_GET['id'];
  14. $sql="INSERT INTO ref (id, title, name) VALUES ('$e', '','$a')";
  15. $result=mysql_query($sql);
  16. echo "Спасибо! Информация изменена. <a href="show.php">Назад</a>n";
  17. echo $_FILES['userfile']['error'];
  18. ?>
  19.  
 
 Top
-SCHATTEN-
Отправлено: 28 Февраля, 2007 - 08:33:50
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Ну вопервых у тебя в скриптах очень много мелких ошибок, из-за которых они собственно и неработают.
Во вторых, надо было скинуть фаил 1.php, но из всего что ты скинул я заменил его файлом form.php .
Вот твои скрипты с истправлениями.

show.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. error_reporting (E_ALL ^ E_NOTICE);
  4.  
  5. if($_GET['action'] == "add"){
  6. include("form.php");
  7. }
  8. ?>
  9. <?PHP
  10. $host = "localhost";
  11. $port = "3306";
  12. $user = "root";
  13. $pass = "";
  14. $dbnm = "plexa_ref";
  15. $h = ( empty( $port ) ) ? $host : $host . ":" . $port;
  16. $db = mysql_connect( $host , $user , $pass );
  17.  
  18. if( !$db )
  19. {
  20. print ("error !");
  21.  
  22. exit();
  23. }
  24.  
  25. if( ! mysql_select_db( $dbnm ) )
  26. {
  27. print ("!!!!!!!!");
  28.  
  29. exit();
  30. }
  31. $res = mysql_query( "SELECT * FROM referat" );
  32. while( $row = mysql_fetch_object( $res ) )
  33. { print "
  34. <a href='?action=add&id=".$row->id."'>Фамилия:</a> " . $row->name .", №: " . $row->id . ", Тема: " . $row->title . "."; }
  35. ?>


form.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <html>
  3. <body>
  4. <form name="add" action="add.php" method="post">
  5. Фамилия
  6.  
  7. <input type="hidden" name="id" value=<?echo $_GET['id'];?>>
  8. <input type="text" name="name">
  9. <input type="submit" name="submit" value="Добавить">
  10. </form>
  11. </body>
  12. </html>


Ну и наконец add.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $host = "localhost";
  4. $user = "root";
  5. $pass = "";
  6. $dbnm = "plexa_ref";
  7.  
  8.  
  9. mysql_connect ($host, $user, $pass);
  10.  
  11. @$a=$_POST['name'];
  12. @$e=$_POST['id'];
  13.  
  14. $sql = "UPDATE referat SET  name = '".$a."'
  15.                   WHERE id=".$e;
  16.  
  17. $result=mysql_query($sql);
  18. echo "Информация изменена. <a href='show.php'>Назад</a>n";
  19. echo @$_FILES['userfile']['error'];
  20. ?>


Извеняй что стер все коментарии но мне так надо было, напиши их ещё раз =)
Ну вот собственно и все, обращайся если что непоймешь.
 
 Top
nurv_ad
Отправлено: 28 Февраля, 2007 - 13:00:20
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




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

Спасибо большое, за 3 дня только на этом форуме получил адекватный ответ.
 
 Top
-SCHATTEN-
Отправлено: 28 Февраля, 2007 - 14:17:17
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Замени скрипт form.php вот этим, а название оставь form.php

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if (!$_GET['name'])
  4. {
  5. echo "
  6. <html>
  7. <body>
  8. <form name='add' action='add.php' method='post'>
  9. Фамилия
  10.  
  11. <input type='hidden' name='id' value=".$_GET['id'].">
  12. <input type='text' name='name'>
  13. <input type='submit' name='submit' value='Добавить'>
  14. </form>
  15. </body>
  16. </html>";
  17. }
  18. else
  19. {
  20.   exit ("Извините но фамилия уже существует.&nbsp;<a href='./show.php'>Вернуться</a>");
  21. }
  22. ?>
  23.  
 
 Top
nurv_ad
Отправлено: 28 Февраля, 2007 - 23:50:14
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




нет все равно пишется повторно.
попытался соединить все в один файл,
CODE (php):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $host = "localhost";
  4. $port = "3306";
  5. $user = "root";
  6. $pass = "****";
  7. $dbnm = "plexa_ref";
  8. $h = ( empty( $port ) ) ? $host : $host . ":" . $port;
  9. $db = mysql_connect( $host , $user , $pass );
  10. if( !$db )
  11. {
  12. print ("error !");
  13. exit();
  14. }
  15. if( ! mysql_select_db( $dbnm ) )
  16. {
  17. print ("error !");
  18. exit();
  19. }
  20. $res = mysql_query( "SELECT * FROM referat" );
  21. while( $row = mysql_fetch_object( $res ) )
  22. { print "
  23. <a href='?action=add&id=".$row->id."'><br>Фамилия:</a> " . $row->name .", №: " . $row->id . ", Тема: " . $row->title . "."; }
  24.  
  25.  
  26. if($_GET['action'] == "add"){
  27. if ($_GET['name'])
  28. {
  29. echo "
  30. <html>
  31. <body>
  32. <form name='add' action='add.php' method='post'>
  33. Фамилия
  34. <input type='hidden' name='id' value=".$_GET['id'].">
  35. <input type='text' name='name'>
  36. <input type='submit' name='submit' value='Добавить'>
  37. </form>
  38. </body>
  39. </html>";
  40. }
  41. else
  42. {
  43. exit ("Извините но фамилия уже существует.&nbsp;<a href='./show.php'>Вернуться</a>");
  44. }
  45. else
  46. {
  47. @$a=$_POST['name'];
  48. @$e=$_POST['id'];
  49. $sql = "UPDATE referat SET  name = '".$a."' WHERE id=".$e;
  50. $result=mysql_query($sql);
  51. echo "Информация изменена. <a href='show.php'>Назад</a>n";
  52. echo @$_FILES['userfile']['error'];
  53. }
  54. }
  55. ?>
  56.  
 
 Top
valenok
Отправлено: 01 Марта, 2007 - 08:14:24
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




form.php если не ошибаюсь..
PHP:
скопировать код в буфер обмена
  1.  
  2.  <?PHP
  3.  if (isset($_GET['id']) && ctype_digit($_GET['id']) &&mysql_num_rows(mysql_query("SELECT `name` FROM `referat` WHERE `id`= ".$_GET['id']))!=0)
  4.  {
  5.  echo "
  6. <html>
  7. <body>
  8. <form name='add' action='add.php' method='post'>
  9. Фамилия
  10.  
  11. <input type='hidden' name='id' value=".$_GET['id'].">
  12. <input type='text' name='name'>
  13. <input type='submit' name='submit' value='Добавить'>
  14. </form>
  15. </body>
  16. </html>";
  17.  }
  18.  else
  19.  {
  20.    exit ("Извините но фамилия уже существует.&nbsp;<a href='./show.php'>Вернуться</a>");
  21.  }
  22.  ?>
  23.  


-----
Truly yours, Sasha.
 
My status
 Top
nurv_ad
Отправлено: 01 Марта, 2007 - 17:14:36
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




Помогите найти ошибку.
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if($_GET['action'] == "add"){
  3. //------------------
  4. $name = mysql_escape_string($_POST['name']);
  5. $sql = "select count(*) as c from referat where name='$name'";
  6. $result=mysql_query($sql);
  7. $row = mysql_fetch_object( $result );
  8. if ($row->c == '0')
  9. {
  10.   //Все нормально, такого имени нету.
  11.   echo "
  12. <form name='add' action='add.php' method='post'>
  13. Фамилия
  14. <input type='hidden' name='id' value=".$_POST['id'].">
  15. <input type='text' name='name'>
  16. <input type='submit' name='submit' value='Добавить'>
  17. </form>
  18. ";
  19. @$a=$_POST['name'];
  20. @$e=$_POST['id'];
  21. $sql="INSERT INTO referat (id, title, name) VALUES (NULL, '','$a')";
  22.  echo ("Информация изменена. <a href='show.php'>Назад</a>n");
  23.  
  24. }
  25. else
  26. {
  27.   //Ошибка, уже есть.
  28.   exit ("<br><B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");
  29. }
  30. }
  31.  
 
 Top
-SCHATTEN-
Отправлено: 01 Марта, 2007 - 18:13:01
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Напиши ошибку которую выдаёт этот скрипт ...
 
 Top
nurv_ad
Отправлено: 01 Марта, 2007 - 18:27:34
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




он не выдает ошибки он просто пишет что фамилия уже добавлена
А хочется чтоб он перед этим посмотрел есть и запись в поле если нет то вывести форму если есть вывести ошибку
 
 Top
-SCHATTEN-
Отправлено: 01 Марта, 2007 - 19:11:12
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Так он так и сделан, что если из формы ему передают
if($_GET['action'] == "add"){

тока тогда он проверяет есть ли имя... и выводит форму, которая ему и должна передать этот параметр
 
 Top
nurv_ad
Отправлено: 01 Марта, 2007 - 19:36:07
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




почему тогда он выводит сообщение что в поле есть запись хотя в базе она пустая...
Я просто нажимаю на фамилию и он мне вместо формы выдает что запись уже есть
http://nurv-ad[dot]net[dot]ru/plexa/referat/123.php
 
 Top
-SCHATTEN-
Отправлено: 01 Марта, 2007 - 19:43:43
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Потому что , если в скрипт не передается параметр ADD из формы, он даже нестанет проверять !!!

Щас постараюсь обьяснить что у тебя там сделано :

Если нет параметра add

то ошибка :
PHP:
скопировать код в буфер обмена
  1.  
  2. else
  3. {
  4. //Ошибка, уже есть.
  5. exit ("
  6. <B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");
  7. }
  8. }

 
 Top
nurv_ad
Отправлено: 01 Марта, 2007 - 20:15:17
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




А как тогда правильно. Можешь показать на моем примере.
 
 Top
-SCHATTEN-
Отправлено: 01 Марта, 2007 - 20:47:51
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Прошу прощения, кажется я немного ошибся =) глюк ... и такое бывает после 12 часов за компом..
И если честно я мало понял что ты сделал , у тебя же были полностью рабочие скрипты.

И меня смущают вот эти строки... Не понял
$name = mysql_escape_string($_POST['name']);
$sql = "select count(*) as c from referat where name='$name'";

Откуда ты взял $_POST['name'] ? Его там просто нет... оно должно передаваться из формы...
Зачем это тебе , просто ищи в БД имя по заданному ID. который у тебя вместе с add передается... зачем усложнять себе жизнь.

Сделай что-то типа этого.
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = "SELECT name FROM referat WHERE id=".$_GET["id"];
  3. $r= mysql_query($query);
  4. if($r = false)
  5. {


Еще раз извеняюсь, за ошибку Закатив глазки
 
 Top
nurv_ad
Отправлено: 01 Марта, 2007 - 21:10:08
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Февр. 2007  
Откуда: Москва


Помог: 0 раз(а)




http://nurv-ad[dot]net[dot]ru/plexa/referat/123.php

при нажатии на фамилию сразу пишет
Извините но фамилия уже существует Вернуться\n\n(Добавление)
может я уже что то не догоняю, все таки 3 день делаю его хотя запросы то легкие.

конект к базе далее

$res = mysql_query( "SELECT * FROM referat" );
while( $row = mysql_fetch_object( $res ) )
{ print "
<a href='?action=add&id=".$row->id."'><br>Фамилия:</a> " . $row->name .", №: " . $row->id . ", Тема: " . $row->title . "."; }
if($_GET['action'] == "add"){
//------------------
$query = "SELECT name FROM referat WHERE id=".$_GET["id"];
$r= mysql_query($query);
if($r = false)
{
//Все нормально, такого имени нету.
echo "
<form name='add' action='123.php' method='post'>
Фамилия
<input type='hidden' name='id' value=".$_POST['id'].">
<input type='text' name='name'>
<input type='submit' name='submit' value='Добавить'>
</form>
";
@$a=$_POST['name'];
@$e=$_POST['id'];
$sql="INSERT INTO referat (id, title, name) VALUES (NULL, '','$a')";
echo ("Информация изменена. <a href='show.php'>Назад</a>n");

}
else
{
//Ошибка, уже есть.
exit ("
<B><span style='color: red';>Извините но фамилия уже существует</span></B> <a href='123.php'>Вернуться</a>");
}
}
?>

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB