2013-03-19 1 views
5

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

Фактическая строка запроса ниже работает, когда я тестирую в базе данных.

Однако я думаю, что мой синтаксис цикла, возможно, не совсем прав, потому что я ничего не добавляю в БД.

Может ли кто-нибудь обнаружить ошибку в моей петле, вызвав неудачу моего «добавления в базу данных»?

Заранее благодарим за вашу помощь!

foreach ($_POST['__tags'] as $key=>$ls_value) { 

     $value = strtolower(mysql_real_escape_string($ls_value)); 

     mysql_query("INSERT INTO `table` (`field`) 
       SELECT * FROM (SELECT '$value') as tmp 
       WHERE NOT EXISTS (
         SELECT `field` FROM `table` WHERE `field` = '$value') 
       LIMIT 1") or trigger_error(mysql_error(), E_USER_ERROR);    

    } 
+4

Что возвращает эхо или использует print_r на $ _POST ['__ tags']? С чего начать? –

+1

Ваш код уязвим для SQL-инъекции. Также функции mysql_ * устарели и больше не должны использоваться, если это вообще возможно. http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Cfreak

ответ

1

попробовать, используя следующий код:

if(is_array($_POST['__tags'])) 
{ 
    foreach ($_POST['__tags'] as $key=>$ls_value) { 

     $value = strtolower(mysql_real_escape_string($ls_value)); 

     mysql_query("INSERT INTO table (field) 
      SELECT * FROM (SELECT '".$value."') as tmp 
      WHERE NOT EXISTS (SELECT field FROM table WHERE field = '".$value."') LIMIT 1") or trigger_error(mysql_error(), E_USER_ERROR);    

    } 
} 

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

+0

Легенда! Теперь все отлично работает. Спасибо! –

+0

@Becs Carter: Добро пожаловать –

0

Просто попробуйте с нижеследующим:

PHP Часть:

<?php 

$tags = $_POST['tags']; 

foreach ($tags as $tag){ 
$value = strtolower(mysql_real_escape_string($tag)); 
$sel_tag = mysql_query("select * from `table` where `field`='$value'")or die(mysql_error()); 
$num_rows = mysql_num_rows($sel_tag); 
if($num_rows > 0){ 
echo "Tag Already Exists"; 
} 
else { 
$ins_tag = mysql_query("insert into `table` (`field`) values ('$value');")or die(mysql_error()); 
echo "Tag Successfully Inserted"; 
} 
} 

?> 

HTML Часть:

<form action="" name="tags" method="post"> 
<p>Please select the tags names : </p> 
<p> 
<input type="checkbox" name="tags[]" value="tag1"> Tag1 
<input type="checkbox" name="tags[]" value="tag2"> Tag2 
<input type="checkbox" name="tags[]" value="tag3"> Tag3 
</p> 
<p><input type="submit" name="tag_submit" value="Submit"></p> 
</form> 

Я думаю, что это может помочь вам решить вашу проблему.

0

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

post.php

<?php 
     $keys=array(); 
     $values=array();  
     foreach ($_POST as $key=>$ls_value) { 
      $keys[]=$key; 
      $values[]="'".mysql_real_escape_string($ls_value)."'";  
     } 
     echo $fileds=implode(",", $keys); 
     echo $values=implode(",", $values); 
    ?> 

form.html

<form action="post.php" method="post"> 
    <input type="text" value="123" name="number"/> 
    <input type="text" value="firstname" name="name"/> 
    <input type="submit" value="submit"/> 
</form> 
Смежные вопросы