2014-12-19 109 views
1

我对PHP/MYSQL世界(以及一般编程)相对陌生,因此对于我的任何无知事件都很抱歉。PHP:从简单的HTML表格插入数据到MySQL的问题

我一直在关注PHPAcademy的YouTube教程,详细介绍了如何创建一个简单的HTML表单并通过PHP & MySQLi提交数据。该视频还教导如何执行SELECT *语句并在HTML表格中显示整个表格。

我的问题是,我无法发布或添加表单中的信息到MySQL数据库。以下是我的index.php文件&数据库结构。任何帮助,您可以提供非常感谢。另外,我有一个启动MySQL连接的connect.php脚本和一个security.php脚本,确保只有UTF-8文本可以插入到数据库中。我可以根据要求提供这两者。

谢谢!

<?php 
error_reporting(0); 
require 'db/connect.php'; 
require 'security.php'; 

$records = array(); 

if(!empty($_POST)) { 
    if(isset($_POST['items_item'], $_POST['items_item_location'], $_POST['items_notes'], $_POST['items_quantity'])) { 

     $items_item   = trim($_POST['items_item']); 
     $items_item_location = trim($_POST['items_item_location']); 
     $items_notes   = trim($_POST['items_notes']); 
     $items_quantity  = trim($_POST['items_quantity']); 

     if(!empty($items_item) && !empty($items_item_location) && !empty($items_notes) && !empty($items_quantity)) { 
      $insert = $db->prepare("INSERT INTO items (items_item, items_item_location, items_notes, items_quantity) VALUES (?, ?, ?, ?)"); 
      $insert->bind_param('ssss', $items_item, $items_item_location, $items_notes, $items_quantity); 

      if($insert->execute()) { 
       header('Location: index.php'); 
       die(); 
      } 
     } 
    } 
} 

if($results = $db->query("SELECT * FROM items")) { 
    if($results->num_rows) { 
     while($row = $results->fetch_object()){ 
      $records[] = $row; 
     } 
     $results->free(); 
    } 
} 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
    <title>Grocery list!</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <link href="css/bootstrap.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 
    <script type="text/javascript" src="js/jquery.min.js"></script> 
    <script type="text/javascript" src="js/bootstrap.min.js"></script> 
    <script type="text/javascript" src="js/scripts.js"></script> 
</head> 

<body> 
<div class="container"> 
    <div class="row clearfix"> 
     <div class="col-md-12 column"> 
      <div class="page-header"> 
       <h1> 
        Grocery Application <small>Created by Bryce</small> 
       </h1> 
      </div> 
     </div> 
    </div> 
    <div class="row clearfix"> 
     <div class="col-lg-4 column"> 
      <form class="form-horizontal" action="" method='post'> 
       <fieldset> 
       <legend>Add grocery item</legend> 
       <div class="form-group"> 
        <label for="inputItem" class="col-lg-2 control-label">Grocery Item</label> 
        <div class="col-lg-10"> 
        <input type="text" class="form-control" id="inputItem"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="inputLocation" class="col-lg-2 control-label">Location</label> 
        <div class="col-lg-10"> 
        <input type="text" class="form-control" id="inputLocation"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="inputNotes" class="col-lg-2 control-label">Notes</label> 
        <div class="col-lg-10"> 
        <textarea class="form-control" rows="3" id="inputNotes"></textarea> 
        <span class="help-block">Here you can enter notes about your item such as the quantity, number of units, or any other general information.</span> 
        </div> 
       </div> 
       <div class="form-group"> 
        <label for="inputLocation" class="col-lg-2 control-label">Quantity</label> 
        <div class="col-lg-10"> 
        <input type="text" class="form-control" id="inputQuantity"> 
        </div> 
       </div> 
       <div class="form-group"> 
        <div class="col-lg-10 col-lg-offset-2"> 
        <button type="submit" class="btn btn-primary">Submit</button> 
        </div> 
       </div> 
       </fieldset> 
      </form> 
     </div> 
     <div class="col-md-8 column"> 
      <?php 
      if(!count($records)){ 
       echo 'No records';     
      } else { 
      ?> 
      <table class="table table-bordered table-striped"> 
       <tr> 
        <th>Item</th> 
        <th>Location</th> 
        <th>Notes</th> 
        <th>Quantity</th> 
       </tr> 
       <?php 
       foreach($records as $r){ 
       ?> 
       <tr> 
        <td><?php echo escape($r->items_item); ?></td> 
        <td><?php echo escape($r->items_item_location); ?></td> 
        <td><?php echo escape($r->items_notes); ?></td> 
        <td><?php echo escape($r->items_quantity); ?></td> 
       </tr> 
       <?php 
       } 
       ?> 
      </table> 
      <?php 
      } 
      ?> 
     <br><br> 
     </div> 
    </div> 
</div> 
</body> 
</html> 

数据库结构:

ID(自动递增,整数)| items_item(varchar 255)| items_item_location(varchar 255)| items_notes(文本)| items_quantity(文字)

回答

5

编辑:此答案是根据您的original post而不是将您编辑的问题标记为原始编辑。


没有任何表单元素包含name属性,并且在使用POST时是必需的。

改变你的表单元素,这些分别

<input name="items_item" type="text" class="form-control" id="inputItem"> 

<input name="items_item_location" type="text" class="form-control" id="inputLocation"> 

<textarea name="items_notes" class="form-control" rows="3" id="inputNotes"></textarea> 

<input name="items_quantity" type="text" class="form-control" id="inputQuantity"> 

这些^,是一起工作以:

$_POST['items_item'] 
$_POST['items_item_location'] 
$_POST['items_notes'] 
$_POST['items_quantity'] 

我希望你是不是靠一个 “id”无论如何,不​​是这个。

再加上使用error_reporting(0);没有帮助,它可以消除可能的错误。

其中一些应该是“未定义索引...”。

error reporting添加到您的文件的顶部,这将有助于发现错误。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

旁注:错误报告只应在分期完成,并且从不生产。


脚注:

而不是做的:

if($insert->execute()) { 
     header('Location: index.php'); 
     die(); 
    } 

使用/替换为:(检查可能出现的错误)

if($insert->execute()) { 

    header('Location: index.php'); 
    die(); 

      } 
else{ 
    die('There was an error running the query [' . $db->error . ']'); 
    } 

// rest of your code you have now