Не получается сделать скрипт :(

sigi

Постоялец
Регистрация
17 Дек 2006
Сообщения
58
Реакции
2
Задача: есть форма textarea. туда вписываю текст типа :
1
2
3

нужно что бы скрипт брал каждую стручку отдельно... сверял есть ли такая строчка в базе... и если нету то заносил ее... вот что я написал
PHP:
<form id="form1" name="form1" method="post" action="">
  <label>
    <textarea name="test" id="textarea" cols="45" rows="5"></textarea><input name="" type="submit" />
  </label>
</form>

<?

mysql_connect($hostname,$username,$password) OR DIE("error"); 

mysql_select_db($dbName) or die(mysql_error()); 
mysql_query("SET NAMES 'utf8'"); 
$test = $_POST['test'];
$query = "SELECT id, title FROM base"; 
$res = mysql_query($query) or die(mysql_error()); 

  while ($row=mysql_fetch_array($res)) { 
$r_t = $row['title'];
$r = explode("\n", $test);
foreach( $r as $s )
{
if ($s == $r_t) {
echo 'error';
}
else {
mysql_query("INSERT INTO `base`(`id`, `title`)  VALUES ('',$s)");	
}}
  }
по моей слабо знающей php логике получился такой код.. но он не работает.. помогите если не трудно.
 
какие ошибки выскакивают... или просто не работает?
 
Ошибок нет... просто не работает...
 
это весь листинг файла?
в конце не хватает ?>

попробуй заменить $r = explode("\n", $test);
на $r = explode("\r\n", $test);
 
Я смотрю ты такой же спец как и я :)
 
PHP:
<form id="form1" name="form1" method="post" action="">
  <label>
    <textarea name="test" id="textarea" cols="45" rows="5"></textarea><input name="" type="submit" />
  </label>
</form>

<?

mysql_connect($hostname,$username,$password) OR DIE("error"); 

mysql_select_db($dbName) or die(mysql_error()); 
mysql_query("SET NAMES 'utf8'"); 
$test = $_POST['test'];
 
$r = explode("\n", $test);
foreach( $r as $s ){
	$select = mysql_query("SELECT id FROM base WHERE title='$s' LIMIT 1");
	if(mysql_num_rows($select)){echo 'уже есть в базе<br>';}
	else {
	$insert = mysql_query("INSERT INTO base SET title='$s'");	
	}
}
 
PHP:
mysql_connect($hostname,$username,$password) OR DIE("error"); 

mysql_select_db($dbName) or die(mysql_error()); 
mysql_query("SET NAMES 'utf8'"); 
$test = $_POST['test'];
$r = explode("\n", $test);
// Обходим массив из текстАреи и сравниваем с базой
foreach( $r as $s )
{
// ищем нужную строку $s в колонке title таблицы 
$query = "SELECT id FROM base WHERE title='".trim($s)."'"; 
$res = mysql_query($query) or die(mysql_error()); 
//если колво строк больше нуля, значит есть такая строка в БД
if (mysql_num_rows>0){
echo 'Строка есть в БД '.$s;
}
else {
echo 'Строки нет в БД '.$s;
mysql_query("INSERT INTO `base`(`id`, `title`)  VALUES ('',$s)");    
  }//if
}// foreach
 
а можно не заморачиваться с получением и сравнением строк
можно в MySQL базе полю по которому идёт сравнение добавить свойство UNIQUE и в запрос при вставке IGNORE
тогда о чистке дублей будет заботится Mysql
IGNORE
- Если некоторые поля таблицы имеют ключи PRIMARY или UNIQUE, и производится вставка новой строки, в которой эти поля имеют дублирующее значение, то действие команды аварийно завершается и выдается ошибка №1062 ("Duplicate entry 'val' for key N"). Если в команде INSERT указано ключевое слово IGNORE, то вставка записей не прерывается, а строки с дублирующими значениями просто не вставляются.

при таком подходе можно будет вставить все строки сразу - дубликаты не запишутся
 
Еще вариант выбрать все титлы из таблицы в массив, затем перебором строк из текст ареа выполнять
PHP:
foreach ($array_textarea as $value){
   if in_array($value, $fromBD_Massiv){
      echo 'есть в массиве';
      }
   else {
      echo 'нет в массиве';
      }
   }

Добавлено через 3 минуты
добавить свойство UNIQUE и в запрос при вставке IGNORE
Есть маленькая проблема. Если в БД уже есть неуникальные строки, то сначала нужно будет сделать их уникальными.
 
Не работает ни первый код ни второй :(((
 
Назад
Сверху