簡體   English   中英

PHP MySQL 未針對 CRUD 應用程序更新

[英]PHP MySQL not updating for CRUD app

我正在嘗試將更新功能添加到我的 CRUD 應用程序中。 本質上,它使用指定的數據庫,並使用 index.php 頁面中的“id”,即數據庫中的“productID”。 在應用程序的另一部分,商店管理功能包含在相同的骨架更新頁面中,並且完美運行。

數據庫 (Product) 包含 productID(PK)、productName、productPrice、storeID(FK)、productDate、productComments、productQuantity 和 productPortion。

我確定它在 PHP 腳本中,可能在使用一些錯誤檢查后的 UPDATE 命令周圍,但我似乎無法弄清楚可能是主要問題。

HTML

 <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <link href="css/bootstrap.min.css" rel="stylesheet"> <script src="js/bootstrap.min.js"></script> </head> <body> <div class="container"> <div class="span10 offset1"> <div class="row"> <h3>Update an Item</h3> </div> <form class="form-horizontal" action="update.php" method="post"> <input type="hidden" name="productID" value="<?php echo $id ?>"> <div class="control-group <?php echo !empty($nameError)?'error':'';?>"> <label class="control-label">Item</label> <div class="controls"> <input name="productName" type="text" placeholder="Product Name" value="<?php echo !empty($productName)?$productName:'';?>"> <?php if (!empty($nameError)): ?> <span class="help-inline"><?php echo $nameError;?></span> <?php endif;?> </div> </div> <div class="control-group <?php echo !empty($priceError)?'error':'';?>"> <label class="control-label">Price</label> <div class="controls"> <input name="productPrice" type="number" step="any" placeholder="Price" value="<?php echo !empty($productPrice)?$productPrice:'';?>"> <?php if (!empty($priceError)): ?> <span class="help-inline"><?php echo $priceError;?></span> <?php endif;?> </div> </div> <div class="control-group <?php echo !empty($storeError)?'error':'';?>"> <label class="control-label">Store</label> <div class="controls"> <select name="storeID" class="form-control"> <option value="">Select Store</option> <?php $pdo=D atabase::connect(); $sql='SELECT * FROM Store ORDER BY storeName DESC' ; foreach ($pdo->query($sql) as $row) { $selected = $row['storeID']==$storeID?'selected':''; echo ' <option value="'. $row['storeID'] .'" '. $selected .'>'. $row['storeName'] .'</option>'; } Database::disconnect(); ?> </select> <?php if (!empty($storeError)): ?> <span class="help-inline"><?php echo $storeError;?></span> <?php endif; ?> </div> </div> <div class="control-group <?php echo !empty($dateError)?'error':'';?>"> <label class="control-label">Date</label> <div class="controls"> <input name="productDate" type="date" step="any" placeholder="Date" value="<?php echo !empty($productDate)?$productDate:'';?>"> <?php if (!empty($dateError)): ?> <span class="help-inline"><?php echo $dateError;?></span> <?php endif;?> </div> </div> <div class="control-group <?php echo !empty($commentsError)?'error':'';?>"> <label class="control-label">Comments</label> <div class="controls"> <input name="productComments" type="text" placeholder="Comments" value="<?php echo !empty($productComments)?$productComments:'';?>"> <?php if (!empty($commentsError)): ?> <span class="help-inline"><?php echo $commentsError;?></span> <?php endif;?> </div> </div> <div class="control-group <?php echo !empty($quantityError)?'error':'';?>"> <label class="control-label">Quantity</label> <div class="controls"> <input name="productQuantity" type="number" placeholder="Quantity" value="<?php echo !empty($productQuantity)?$productQuantity:'';?>"> <?php if (!empty($quantityError)): ?> <span class="help-inline"><?php echo $quantityError;?></span> <?php endif;?> </div> </div> <div class="control-group <?php echo !empty($portionError)?'error':'';?>"> <label class="control-label">Portion</label> <div class="controls"> <input name="productPortion" type="number" placeholder="Portion" value="<?php echo !empty($productPortion)?$productPortion:'';?>"> <?php if (!empty($portionError)): ?> <span class="help-inline"><?php echo $portionError;?></span> <?php endif;?> </div> </div> <div class="form-actions"> <button type="submit" class="btn btn-success">Update</button> <a class="btn" href="index.php">Back</a> </div> </form> </div> </div> <!-- /container --> </body> </html>

PHP

 <?php require 'database.php'; $id = null; if ( !empty($_GET['id'])) { $id = $_REQUEST['id']; } if ( null==$id ) { header("Location: index.php"); } if ( !empty($_POST)) { // keep track validation errors $nameError = null; $priceError = null; $storeError = null; $dateError = null; $quantityError = null; $portionError = null; // keep track post values $id = $_POST['id']; $storeID= $_POST['storeID']; $productName = $_POST['productName']; $productPrice = $_POST['productPrice']; $productQuantity = $_POST['productQuantity']; $productPortion = $_POST['productPortion']; $productComments = $_POST['productComments']; $productDate = $_POST['productDate']; //error displayed for creation errors $valid = true; if (empty($productName)) { $nameError = 'Please enter the name of the product'; $valid = false; } if (empty($productPrice)) { $priceError = 'Please enter a price'; $valid = false; } if (empty($storeID)) { $storeError = 'Please enter a store'; $valid = false; } if (empty($productDate)) { $dateError = 'Please enter the purchase date'; $valid = false; } if (empty($productComments)) { $commentsError = 'Please enter any comments'; $valid = false; } if (empty($productQuantity)) { $quantityError = 'Please select the quantity'; $valid = false; } if (empty($productPortion)) { $portionError = 'Please enter the portion'; $valid = false; } // insert data if ($valid) { $pdo = Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "UPDATE Product SET productName=?, productPrice=?, storeID=?, productDate=?, productComments=?, productQuantity=?, productPortion=? WHERE productID=?"; $q = $pdo->prepare($sql); $q->execute(array($productName,$productPrice,$storeID,$productDate, $productComments,$productQuantity,$productPortion,$id)); Database::disconnect(); header("Location: index.php"); } } else { $pdo = Database::connect(); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM Product WHERE productID = ?"; $q = $pdo->prepare($sql); $q->execute(array($id)); $data = $q->fetch(PDO::FETCH_ASSOC); $productName = $data['productName']; $productPrice = $data['productPrice']; $storeID = $data['storeID']; $productQuantity = $data['productQuantity']; $productPortion = $data['productPortion']; $productComments = $data['productComments']; $productDate = $data['productDate']; Database::disconnect(); } ?>

快速查看您的代碼,您將通過 $_POST 發送表單數據,並在 php 腳本上檢查 $_GET,然后從 $_REQUEST 中獲取 ID。 嘗試改變

if ( !empty($_GET['id'])) {
        $id = $_REQUEST['id'];
    }

if ( !empty($_POST['id'])) {
        $id = $_POST['id'];
    }

希望有幫助!

謝謝唐尼普!

我發現答案實際上與提交后的POST值有關。 我的印象是我仍然可以使用來自 'id' 的 GET 調用的值,但我需要使用來自產品數據庫的實際 ID 值。 原來的解決方案是:

 // keep track post values $id = $_POST['id'];

需要改為:

 // keep track post values $id = $_POST['productID'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM