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

Тема в разделе "PHP", создана пользователем sigi, 30 ноя 2011.

Модераторы: latteo
  1. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    Задача: есть форма 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 логике получился такой код.. но он не работает.. помогите если не трудно.
     
  2. krivov

    krivov Постоялец

    Регистр.:
    24 дек 2007
    Сообщения:
    142
    Симпатии:
    19
    какие ошибки выскакивают... или просто не работает?
     
  3. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    Ошибок нет... просто не работает...
     
  4. krivov

    krivov Постоялец

    Регистр.:
    24 дек 2007
    Сообщения:
    142
    Симпатии:
    19
    это весь листинг файла?
    в конце не хватает ?>

    попробуй заменить $r = explode("\n", $test);
    на $r = explode("\r\n", $test);
     
  5. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    Я смотрю ты такой же спец как и я :)
     
  6. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.035
    Симпатии:
    703
    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'");    
        }
    }
     
  7. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    989
    Симпатии:
    267
    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
     
  8. o_nix

    o_nix

    Регистр.:
    7 ноя 2007
    Сообщения:
    1.073
    Симпатии:
    1.039
    а можно не заморачиваться с получением и сравнением строк
    можно в MySQL базе полю по которому идёт сравнение добавить свойство UNIQUE и в запрос при вставке IGNORE
    тогда о чистке дублей будет заботится Mysql
    при таком подходе можно будет вставить все строки сразу - дубликаты не запишутся
     
  9. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    989
    Симпатии:
    267
    Еще вариант выбрать все титлы из таблицы в массив, затем перебором строк из текст ареа выполнять
    PHP:
    foreach ($array_textarea as $value){
       if 
    in_array($value$fromBD_Massiv){
          echo 
    'есть в массиве';
          }
       else {
          echo 
    'нет в массиве';
          }
       }
    Добавлено через 3 минуты
    Есть маленькая проблема. Если в БД уже есть неуникальные строки, то сначала нужно будет сделать их уникальными.
     
  10. sigi

    sigi Постоялец

    Регистр.:
    17 дек 2006
    Сообщения:
    56
    Симпатии:
    1
    Не работает ни первый код ни второй :(((