5

私がやろうとしているのは、ユーザーがブログ投稿のタグを入力するテキスト入力をループすることです。各タグがまだ存在しない場合は、データベースに追加したいと思います。

以下の実際のクエリ文字列は、データベースでテストするときに機能します。

しかし、私のループ構文はおそらく完全に正しくないと思います。DBに何も追加されていません。

誰かが私のループで「データベースへの追加」が失敗する原因となるエラーを見つけることができますか?

よろしくお願いします!

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

3 に答える 3

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関数を使用してください。

于 2013-03-19T04:41:39.377 に答える
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>

これはあなたの問題を解決するのに役立つかもしれないと思います。

于 2013-03-19T04:49:33.367 に答える
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>
于 2013-03-19T05:12:17.713 に答える