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

Форум MySQL

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

 

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

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

тема: Ошибка при повторной записи в базу данных
 
 автор: Qbass   (28.04.2008 в 11:49)   письмо автору
 
 

Здравствуйте!
Помогите с записью в бд.
При записи записывает только один раз, а если ещё раз записать , то выдаёт ошибку error.
Как сделать так чтоб можно было записать множественное число раз, чтоб каждому новому комментарию задавалось своё id?
Вот кусок этого кода.
<?
echo "<form action=\"mnenie.php?mod=yes&amp;ide=$ide&amp;".session_name()."=".session_id()."\" method=\"post\">";
           echo 
"Мнение:<br/>";
           echo 
"<input name=\"text\" maxlength=\"300\" type=\"text\"/><br/>";
           echo 
"<input class=\"ibutton\" type=\"submit\" value=\"Добавить\"/>";
           echo 
"</form>";
 
mysql_query("insert into news_com set id='$ide',login='$login',date='$date',msg='$text'") or die ('Error!');
echo 
"Ваше мнение записано!!!<br/>";
?>

   
 
 автор: Qbass   (28.04.2008 в 11:51)   письмо автору
 
   для: Qbass   (28.04.2008 в 11:49)
 

А вот структура таблицы бд
CREATE TABLE `news_com` (

  `id` int(11) NOT NULL auto_increment,
  
  `login` text NOT NULL,
  
  `date` varchar(255) NOT NULL default '',

  `msg` text NOT NULL,

  PRIMARY KEY  (`id`)

) TYPE=MyISAM AUTO_INCREMENT=1

   
 
 автор: Valick   (28.04.2008 в 12:01)   письмо автору
 
   для: Qbass   (28.04.2008 в 11:51)
 

Добавьте в таблицу ещё одно поле id_msg например, которое и будете добавлять

mysql_query("insert into news_com set id_msg='$ide',login='$login',date='$date',msg='$text'") or die ('Error!');


А id будет уникальным.

   
 
 автор: Valick   (28.04.2008 в 11:56)   письмо автору
 
   для: Qbass   (28.04.2008 в 11:49)
 

У вас id - Примари кей? Скорее всего это так, и вы его пытаетесь добавить несколько раз, а оно по определению должно быть уникальным.

З.Ы. Второй пост подтвердил мою догадку))

   
 
 автор: Qbass   (28.04.2008 в 11:59)   письмо автору
 
   для: Valick   (28.04.2008 в 11:56)
 

т.е. что надо сделать?

   
 
 автор: Axxil   (28.04.2008 в 12:00)   письмо автору
 
   для: Qbass   (28.04.2008 в 11:59)
 

убрать ide вообще отовсюду. Автоматом назначится.
<?
mysql_query
("insert into news_com set login='$login',date='$date',msg='$text'") or die ('Error!');
?>

   
 
 автор: Valick   (28.04.2008 в 12:07)   письмо автору
 
   для: Axxil   (28.04.2008 в 12:00)
 

Нет просто так убирать нельзя (ошибок не будет, согласен) но как вы будете производить выборку коментариев относящихся к определённой теме?

   
 
 автор: Qbass   (28.04.2008 в 12:12)   письмо автору
 
   для: Valick   (28.04.2008 в 12:07)
 

мне вообще надо к новостям комментарии.
Определённая дата и новость, а в ней уже комментарии к этой новости.

   
 
 автор: Axxil   (28.04.2008 в 12:14)   письмо автору
 
   для: Qbass   (28.04.2008 в 12:12)
 

Надо таблицу с коментариями переделать

CREATE TABLE `news_com` ( 

  `com_id` int(11) NOT NULL auto_increment, 

  `news_id` int(11) NOT NULL 
   
  `login` text NOT NULL, 
   
  `date` varchar(255) NOT NULL default '', 

  `msg` text NOT NULL, 

  PRIMARY KEY  (`id`) 

) TYPE=MyISAM AUTO_INCREMENT=1 


Первое поле хранить уникальное id комментария, второе - id новости, к которой данный комментарий принадлежит.

   
 
 автор: Qbass   (28.04.2008 в 12:18)   письмо автору
 
   для: Qbass   (28.04.2008 в 12:12)
 

Вот все коды:
news.php:
<?
session_start
();
if(empty(
$startan)) $startan 0;
$startan=intval($startan);
if(
$startan<0$startan=0$num_msgs_an=10;
$arr mysql_query("select * from `news`");
$qi mysql_query("select * from `news` order by `id` desc limit $startan,$num_msgs_an;;");
           if (
mysql_affected_rows()==0)
           {
           echo 
"Новостей пока нет...<br/>";
           }
           else
           {
while(
$row=mysql_fetch_array($qi))
{
echo 
"<b>".$row['date']."</b><br/>".$row['msg']."<br/>";
$d=$row['id'];
$q=mysql_query("select * from `news_com` where `nid`='$d'");
$xx=mysql_num_rows($q);
echo 
'<a href="mnenie.php?ide='.$row['id'].'&amp;'.session_name()."=".session_id().'">Комментарии</a> [';
echo 
$xx;
echo 
"]<br/>";
}
           }
$i = @mysql_num_rows($arr);
if(
$startan!=0)
echo 
"<a href=\"news.php?".session_name()."=".session_id()."&amp;startan=".($startan-$num_msgs_an)."\">".htmlspecialchars("<<-- Предыдущая")."</a><br/>";
if(
$i>$startan+$num_msgs_an)
echo 
"<a href=\"news.php?".session_name()."=".session_id()."&amp;startan=".($startan+$num_msgs_an)."\">".htmlspecialchars("Следующая -->>")."</a><br/>";
?>


mnenie.php:
<?
session_start
();
echo 
"<b>Комментировать</b>";
if (empty(
$mod)) $mod="all";
switch (
$mod) {
case 
"all":
if (
$autorize) {echo "<a href=\"mnenie.php?mod=form&amp;ide=$ide&amp;".session_name()."=".session_id()."\">Добавить мнение</a><br/>"; }
$q mysql_query("select * from `news_com` where `nid`='$ide'");
if (
mysql_affected_rows()==0)
{
echo 
"Нет мнений!";
}
else
{
while(
$row=mysql_fetch_array($q))
{
$c1=$row['login'];
$c2=$row['date'];
$c3=$row['text'];
echo 
"<b>$c1</b><br/>$c2<br/>$c3<hr/>";
}
}
break;
   case 
"form":
echo 
"<form action=\"mnenie.php?mod=yes&amp;ide=$ide&amp;".session_name()."=".session_id()."\" method=\"post\">";
           echo 
"Мнение:<br/>";
           echo 
"<input name=\"text\" maxlength=\"300\" type=\"text\"/><br/>";
           echo 
"<input class=\"ibutton\" type=\"submit\" value=\"Добавить\"/>";
           echo 
"</form>";
           break;
           case 
"yes":
 
mysql_query("insert into news_com set login='$login',nid='$ide',text='$text',date='$date'") or die ('Error!');
echo 
"Ваше мнение записано!!!<br/>";
?>

   
 
 автор: Axxil   (28.04.2008 в 12:12)   письмо автору
 
   для: Valick   (28.04.2008 в 12:07)
 

Тут согласный.
На структуру базы толком не посмотрел.

   
 
 автор: Qbass   (28.04.2008 в 12:20)   письмо автору
 
   для: Axxil   (28.04.2008 в 12:12)
 

а вот структура бд к новостям:
CREATE TABLE `news` (

  `id` int(11) NOT NULL auto_increment,

  `date` varchar(255) NOT NULL default '',

  `msg` text NOT NULL,

  PRIMARY KEY  (`id`)

) TYPE=MyISAM AUTO_INCREMENT=1;


Помогите сделать бд к комментариям, а то не получается... ((

   
 
 автор: Axxil   (28.04.2008 в 12:26)   письмо автору
 
   для: Qbass   (28.04.2008 в 12:20)
 

поменяйте структуру таблицы с комментариями, как указано выше

и поменяйте этот кусок:

<?
// ....
echo "<form action=\"mnenie.php?mod=yes&amp;".session_name()."=".session_id()."\" method=\"post\">"
           echo 
"Мнение:<br/>"
           echo 
"<input name=\"text\" maxlength=\"300\" type=\"text\"/><br/>"
           echo 
"<input class=\"ibutton\" type=\"submit\" value=\"Добавить\"/>"
           echo 
"</form>"
           break; 
           case 
"yes"
 
mysql_query("insert into news_com set login='$login',text='$text',date='$date'") or die ('Error!'); 
echo 
"Ваше мнение записано!!!<br/>"?>


Только кривовато у вас построено приложение. Код обработки формы желательно в самом верху страницы размещать.

   
 
 автор: Qbass   (28.04.2008 в 12:39)   письмо автору
 
   для: Axxil   (28.04.2008 в 12:26)
 

CREATE TABLE `news_com` (  

  `com_id` int(11) NOT NULL auto_increment,  

  `news_id` int(11) NOT NULL , 
    
  `login` text NOT NULL,  
    
  `date` varchar(255) NOT NULL default '',  

  `msg` text NOT NULL,  

  PRIMARY KEY  (`id`)  

) TYPE=MyISAM AUTO_INCREMENT=1

фууух... что-то я вообще запутался... ((
откуда берётся PRIMARY KEY (`id`) ?

   
 
 автор: Axxil   (28.04.2008 в 12:46)   письмо автору
 
   для: Qbass   (28.04.2008 в 12:39)
 

ну конечно тут ошибка :)

правильно так:
PRIMARY KEY  (`com_id`)   


А вообще это стандартная задача. И тут по правилам надо-бы 3 таблицы.

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

   
 
 автор: Dimka31   (28.04.2008 в 16:33)   письмо автору
 
   для: Qbass   (28.04.2008 в 11:49)
 

Усли нет нужды явно указывать какой именно вам нужен id запишите это так


   mysql_query("insert into news_com values (NULL , '$login', '$date', '$text')")

   
Rambler's Top100
вверх

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