-1

大家好,我想知道他们是否是一种交叉检查select选项被发布到不同页面的方法,database只是为了确保有人没有使用检查元素或萤火虫或任何开发人员工具进行任何更改。

数据库表product

我的数据库看起来像这样,但其中包含 400 多个数据。

pid   name   size            
1     grey   12 inch          
2     blue   16 inch     

数据库表category

pid    category
1        vans
2        nike

数据库表itemised

pid      price
1        30.00
2        50.00

项目.php

在我的 item.php 页面中,我有一个table. sizeand and SELECT OPTION然后我有一个使用 jquery 进行验证category的输入字段。amount

在我的购物车页面.php

我发布了pidsize然后category我使用所有这些来查找价格(我没有发布价格,我使用 pid、大小和类别来查找它。)

现在的问题是,如果有人要更改valuefor thesizecategory两者。它们仍然会被发布,但显然wouldn't可以找到价格,因为数据库无法找到发布的那些价值。

我如何显示我的值类别示例*类似于我如何显示大小,除了我更改了选择语句*

    <select id="Category" name="Category">
<?php
        dbconnect(); 
        $stmt = $conn->prepare("SELECT Name FROM Category WHERE pid=:id");
        $stmt->bindParam('id',$id);
        $stmt->execute();
        $i = 0;
        foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row ) {
        if ($i == 0) {

        echo '<option SELECTED value="'.$row['Name'].'">'.$row['Name'].'</option>
        ';
        }
        else {
        echo '<option value="'.$row['Name'].'">'.$row['Name'].'</option>';
        }
        $i++;
        }
    ?>
      </select>

我的问题 是他们是否可以找出数据库中存在发布的内容并且与pid? 如果不是,则不应添加该项目。

编辑添加我的购物车页面看起来像 Jim Martens 我已经添加了您在答案中显示的代码 //我在此页面顶部有会话开始。

<?php
    *jim matens your code starts here*
    if (isset($_GET['pid'])){
    $id = $_GET['ProdID'];

    $categoryID = (isset($_POST['Category']) ? intval($_POST['Category']) : 0);
    dbconnect();
    $stmt1 = $conn->prepare("SELECT CatID FROM Category WHERE pid=:id");
    $stmt1->bindParam('id',$id);
    $stmt1->execute();

    $isValid = false;
    $rows2 = $stmt1->fetchAll(PDO::FETCH_ASSOC);
    foreach ($rows2 as $row1) {
        if ($row1['CatID'] == $categoryID) {
            $isValid = true;
            break;
        }
    }

    }

      *My code starts here*
    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 = 0;
        // If the cart session variable is not set or cart array is empty
        if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1) { 
            // RUN IF THE CART IS EMPTY OR NOT SET
            $_SESSION["cart_array"] = array(0 => array("item_id" => $pid, "length" => $length, "Category" => $Category, "quantity" => $qty));
        } else {
            // RUN IF THE CART HAS AT LEAST ONE ITEM IN IT
            foreach ($_SESSION["cart_array"]as $array_key=>$each_item) { 
                  if ($each_item['item_id'] == $pid  && $each_item['length'] == $length && $each_item['Category'] == $Category) {
                          $_SESSION["cart_array"][$array_key]['quantity']+=$qty;
                          $wasFound = true;

                      } // close if condition
                  } // close while loop
                // close foreach loop
               if ($wasFound == false) {
                   array_push($_SESSION["cart_array"], array("item_id" => $pid, "length" => $length, "Category" => $Category, "quantity" => $qty));

               }
        }
        header('Location: '.fetchinline($bpages).$currentFile);
        exit();
    }
    ?>

我希望我已经清楚地解释了这一点,如果没有,请发表评论,我会尝试重新表述这个问题。

谢谢

4

1 回答 1

0

JavaScript 验证是解决拼写问题等的一个很好的噱头。但它既不是万无一失的,也不能真正验证数据在语义上是否正确。因此,您需要将数据发送到 PHP 脚本。

该脚本现在首先验证它的完整性(正确的值类型等)。在此初始步骤之后,您将针对您的案例中的数据库进行验证。如果我理解正确,您要确保发送的类别是现有类别。有一种非常简单的方法可以实现这一目标。

首先是你的表格。

<select id="Category" name="Category">
<?php
    dbconnect();
    // select the ID of the category as well (should be there anyway)
    $stmt = $conn->prepare("SELECT ID, Name FROM Category WHERE pid=:id");
    $stmt->bindParam('id',$id);
    $stmt->execute();
    $i = 0;
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    foreach ($rows as $row) {
        if ($i == 0) { ?>
            <option selected="selected" value="<?php echo $row['ID']; ?>"><?php echo $row['Name']; ?></option>
        <?php } else { ?>
            <option value="<?php echo $row['ID']; ?>"><?php echo $row['Name']; ?></option>
        <?php
        }
        $i++;
    }
?>
</select>

对于输入的实际处理,您从数据库中读取所有 categoryID,并检查所选 ID(现在应该变成整数)是否在其中。如果是,一切都很好,如果不是,用户给出了无效的输入。

一个简单的例子:

$categoryID = (isset($_POST['Category']) ? intval($_POST['Category']) : 0);
dbconnect();
$stmt = $conn->prepare("SELECT ID FROM Category WHERE pid=:id");
$stmt->bindParam('id',$id);
$stmt->execute();

$isValid = false;
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    if ($row['ID'] == $categoryID) {
        $isValid = true;
        break;
    }
}

ID 在这里代表类别 ID(无论您的情况如何)。当然,您的真实代码将在此之前和之后继续,但它应该为您提供大致方向。

于 2013-07-27T19:36:23.693 回答