PHP MySQL没有为CRUD应用程序更新

时间:2015-09-03 00:53:31

标签: php mysql sql sql-update crud

我正在尝试将更新功能添加到我的CRUD应用程序中。本质上它使用指定的数据库,并使用index.php页面中的“id”,即数据库中的“productID”。在应用程序的另一部分中,商店管理功能包含在相同的框架更新页面中,并且工作正常。

数据库(产品)包含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();
	} 


?>

2 个答案:

答案 0 :(得分:1)

快速查看代码,您将通过$ _POST发送表单数据,并在PHP脚本上检查$ _GET,然后从$ _REQUEST中获取ID。尝试更改

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

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

希望有所帮助!

答案 1 :(得分:0)

谢谢Donniep!

我发现答案实际上与提交后的POST值有关。我的印象是我仍然可以使用来自&#39; id&#39;的GET调用的值,但我需要使用产品数据库中的实际ID值。解决方案原来是:

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

需要改为:

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