2013-03-19 38 views
5

Điều tôi cố gắng thực hiện là lặp qua đầu vào văn bản nơi người dùng nhập thẻ cho bài đăng trên blog. Tôi muốn thêm từng thẻ vào cơ sở dữ liệu nếu nó chưa tồn tại.

Chuỗi truy vấn thực tế bên dưới hoạt động khi tôi kiểm tra trong cơ sở dữ liệu.

Tuy nhiên tôi nghĩ rằng cú pháp vòng lặp của tôi có thể không hoàn toàn đúng cos Tôi không nhận được gì thêm vào DB.

Có ai có thể phát hiện lỗi trong vòng lặp của tôi khiến việc 'thêm vào cơ sở dữ liệu' của tôi không thành công?

Cảm ơn trước sự giúp đỡ của bạn!

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

Những gì hiện vang vọng hoặc sử dụng print_r trên $ _POST ['__ thẻ'] trở lại? Nó có trả lại bất cứ thứ gì để bắt đầu không? –

+1

Mã của bạn dễ bị chèn ép sql. Ngoài ra các hàm mysql_ * cũng không còn được sử dụng nữa và sẽ không còn được sử dụng nếu có thể. http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php – Cfreak

Trả lời

1

thử sử dụng đoạn mã sau:

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

    } 
} 

Hãy sử dụng PDO thích hợp hoặc báo cáo được chuẩn bị và mysql_query bị phản đối, thay vì sử dụng các chức năng mysqli

+0

Truyền thuyết! Tất cả đang hoạt động hoàn hảo ngay bây giờ. Cám ơn rất nhiều! –

+0

@Becs Carter: Bạn được chào đón –

0

Chỉ cần Hãy thử những điều sau:

PHP Phần:

<?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 Part:

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

Tôi nghĩ rằng đây có thể giúp bạn giải quyết vấn đề của bạn.

0

tôi đã đưa cho bạn gợi ý để có những giá trị mảng và các phím tạo tên nên bằng với cơ sở dữ liệu kiểm tra đệ này

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> 
Các vấn đề liên quan