1

これに同意しない人もいるかもしれませんが、それは良いことです。以下に、私の 2 つのテーブルがあります。

テーブルItem

pid     Name
1        cat
2        dogs
3        cows

テーブルCategory

CatID    pid  Name
11        1   banana
33        1   apple
44        2   strawberry

基本的に、選択オプションがあり、オプションは次のようになります

<option selected="" value="33">apple</option>

valuealetterまたはnumberor のままにするとblank value=""

次に、送信ボタンをクリックします。

私が投稿しているページには

if(isset($_POST['pid']) && isset($_POST['length']) && isset($_POST['Qty']) && isset($_POST['Category'])){ 
        $pid = $_POST['pid'];
        $length = $_POST['length'];
        $qty = $_POST['Qty'];
        $Category = $_POST['Category'];
        $wasFound = false;

<-I have a query here ->

 <-I have another if statement here which should run if everything is okay ->
}

<-ここに質問があります -> これが私の問題です

ユーザーが投稿しているものがデータベースにあることを確認するために、データベースで変更する必要がある個々のクエリがあります。これは一般的に、ユーザーがしてはいけないことをしていないことを確認するためのものです。

     dbconnect();
     $statement = $db->prepare("
     SELECT * FROM Category WHERE CatID =:Cat
     LIMIT 1
     ");
     $statement->bindParam('Cat',$Category);
     $statement->execute();
     $statement->fetchAll(PDO::FETCH_ASSOC);
     if ($statement->rowCount() > 0) {
     exit();
     } 

値を変更したときにクエリを実行しましたが、BUT何も変更していなくてもアイテムがカートに追加されたことは証明されませんが、それでも機能しません。I do not get an error

4

2 に答える 2

0

まず、タグ wikidbconnect()で説明されているとおりにします。

次に、コードの一貫性を高めます

 dbconnect();
 $statement = $db->prepare("SELECT * FROM Category WHERE CatID = ?");
 $statement->execute(array($Category));
 if (!$statement->fetch()) {
     exit();
 }

フォームには、もう少しインテリジェントなアプローチを使用できます (そのために、名前付きプレースホルダーが発明されたと思います)。

 $sql = "SELECT * FROM Category WHERE CatID = :Category AND pid = :pid
                                   AND length = :length AND qty = :qty";
 $statement = $db->prepare($sql);
 unset($_POST['submit']); // get rid of all extra fields in POST
 $statement->execute($_POST); // and then pass it in execute()
 if (!$statement->fetch()) {
     exit();
 }

コードの矛盾を見つけるために、デバッグ出力を追加します

于 2013-08-09T10:21:04.513 に答える
0

私はライン上で考える

 if ($statement->rowCount() > 0) 

< 0 という意味です。rowCount > 0 の場合に終了するということは、カテゴリがデータベースで見つかった場合に終了することを意味します。見つからない場合は終了するつもりだったと思います。

おそらく、少なくともユーザーが選択したことと、無効なカテゴリも通知する必要があります。

于 2013-08-09T00:22:13.520 に答える