PHP:从简单的html表单向MySQL插入数据的问题

时间:2014-12-19 02:40:47

标签: php html mysql database mysqli

我对PHP / 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(autoincremented,interger)| items_item(varchar 255)| items_item_location(varchar 255)| items_notes(text)| items_quantity(text)

1 个答案:

答案 0 :(得分: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