1

我知道你们中的一些人可能不同意这一点,但这样做很好。下面你会发现我的两张桌子。

桌子Item

pid     Name
1        cat
2        dogs
3        cows

桌子Category

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

基本上我有一个 Select 选项,该选项可能如下所示

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

现在,如果我要将其更改valueletterornumber或离开它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

我觉得就行

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

您的意思是 < 0。如果 rowCount > 0 则退出意味着如果在数据库中找到该类别则退出。我想你的意思是如果没有找到就退出。

您可能至少应该告知用户他们选择的类别和无效类别。

于 2013-08-09T00:22:13.520 回答
0

首先,dbconnect()按照标签 wiki中的说明进行操作。

二、让你的代码更加一致

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