2013-03-19 7 views
5

Co próbuję zrobić, to przechodzić przez wpis tekstowy, w którym użytkownik wprowadza znaczniki do posta na blogu. Chcę dodać każdy tag do bazy danych, jeśli jeszcze nie istnieje.

Rzeczywisty ciąg zapytania poniżej działa, gdy testuję w bazie danych.

Jednak myślę, że moja składnia pętli może nie całkiem się zgadza, ponieważ nic nie dodaje się do DB.

Czy ktoś może wykryć błąd w mojej pętli, powodując niepowodzenie mojego "dodaj do bazy danych"?

Z góry dziękuję za pomoc!

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

Co wywołuje echo lub używanie print_r na $ _POST ['__ tags']? Czy na początku coś wraca? –

+1

Twój kod jest podatny na wtrysk sql. Również funkcje mysql_ * są przestarzałe i nie powinny być dłużej używane, jeśli to możliwe. http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Cfreak

Odpowiedz

1

Spróbuj użyć następującego kodu:

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);    

    } 
} 

Proszę za pomocą właściwego PDO lub przygotowane oświadczenie i mysql_query jest nieaktualna, zamiast użyć mysqli funkcje

+0

Legenda! Wszystko działa teraz idealnie. Dzięki wielkie! –

+0

@Becs Carter: Nie ma za co –

0

prostu spróbować z następującymi:

Część 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 części:

<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> 

myślę, że może to pomóc w rozwiązaniu problemu.

0

Dałem Ci podpowiedź wziąć wartość tablicową i klawisze tworzą nazwa powinna być równa złożony sprawdzenia bazy to

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> 
Powiązane problemy