使用下拉列表和会话变量的 MYSQL 插入

Posted

技术标签:

【中文标题】使用下拉列表和会话变量的 MYSQL 插入【英文标题】:MYSQL Insert using Dropdowns and Session Variables 【发布时间】:2015-06-27 09:05:41 【问题描述】:

我已经尝试解决这个问题几个小时,但似乎无法取得进展。我正在创建一个预订表单,它涉及 2 个下拉菜单和一些会话变量的使用。

HTML

<form accept-charset="UTF-8" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"])?>" method="POST">
    <input type="date" data-role="date" name = "Date"data-inline="true" id ="Date" placeholder="Click here to select a date">

   <br>
    <select id="Time" name="Time">
        <option value="Null">Select a Time</option>
        <option value="9am">09:00</option>
        <option value="9.20am">09:20</option>
        <option value="9.40am">09:40</option>
        <option value="10am">10:00</option>
        <option value="10.20am">10:20</option>
        <option value="10:40am">10:40</option>
        <option value="11am">11:00</option>
        <option value="11:20am">11:20</option>
        <option value="11:40am">11:40</option>
        <option value="12am">12:00</option>
    </select>
  <br>
    <select id="Person" name="Person">
        <option value="Person1">Who Would you Like to See?</option>
        <option value="Person2">A Doctor</option>
        <option value="Person3">A Nurse</option>  
    </select>
    <br>
    <input type="submit" data-role="button" id="submit" value="Book" data-icon="action" data-iconpos="right">

我没有给出错误消息,如果查询成功,我也没有收到我编码的成功消息。任何帮助将不胜感激

PHP

//This adds the connection file which has the details to connect to the database and what database to connect to
include_once('connection.php');
//Checks if the submit button is not set
if(!isset($_POST['submit']))

exit;

    //Declared Variables
    $Date = $_GET['Date'];
            $Time = $_GET['Time'];
            $Person = $_GET['Person'];
    $userID= $_SESSION['user'];
    $GPID= $_SESSION['GPID'];


    //Database Connection, this connects to the database using the connection.php
    $conn=ConnectionFactory::connect();

    //Insert Query
    $query="INSERT INTO `Appointments`(`AppID`, `Date`, `Time`, `Booked_With`, `UserID`, `GPID`) VALUES (NULL, :Date,:Time,:Person,:userID,:GPID)";

    $stmt=$conn->prepare($query);

    //Binding values
    //$stmt->bindValue(':post', $Post);
    $stmt->bindValue(':Date', $Date);
    $stmt->bindValue(':Time', $Time);
    $stmt->bindValue(':Person', $Person);
    $stmt->bindValue(':userID', $userID);
    $stmt->bindValue(':GPID', $GPID);

    $affected_rows = $stmt->execute();

    //Message if insert is Successful
    if($affected_rows==1)
        print "<script type=\"text/javascript\">"; 
        print "alert('Post Successful')"; 
        print "</script>";
        exit;
        

    //Terminates the connection
            $conn=NULL;
?>
     </form>  

【问题讨论】:

您的代码中是否有session_start()?您需要它才能访问页面上的会话变量。另外,您是否为您的应用程序打开了 PHP 错误报告? 这在if(!isset($_POST['submit'])) 中扮演着重要角色,因此不会执行任何操作,就像您的方法一样。 您的表单方法是 POST,但您的 PHP 代码正试图通过 $_GET 访问变量。 “我没有给出错误信息”那是因为你没有检查它们。 在受影响的行测试中至少有一个else,以表明出现问题。例如if ($affected_rows == 1) echo 'ok' else echo 'something dun gone blowed up'; 【参考方案1】:

您的代码存在一些问题,我将从头开始。

这个条件语句:

if(!isset($_POST['submit']))

exit;

您没有带有submit 名称属性的元素,因此您的脚本将在页面加载后立即退出。

您的提交按钮可能依赖于“id”:

<input type="submit" data-role="button" id="submit" ...

并且应该被命名。

即:

<input type="submit" name="submit" data-role="button" id="submit" ...
使用 error reporting 后,会立即发出“未定义索引提交...”的信号。

然后您在表单中使用 POST 方法,但使用 GET 数组,它们应该是 POST。

$Date = $_GET['Date'];

$Date = $_POST['Date'];
然后,将其余的 GET 数组更改为 $_POST

error reporting 添加到文件顶部,这将有助于查找错误。

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

// rest of your code

旁注:错误报告应该只在暂存阶段完成,而不是在生产阶段。

另外,请确保您确实与 PDO 连接,而不是与您的 PDO 查询不混合的另一个 mysql API。

另一件事;确保您在使用会话数组后已开始会话。

session_start(); 必须驻留在所有使用会话的页面中。

在打开连接后立即添加$conn-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

您可能还想使用 bindParam 而不是 bindValue,如果这样仍然无法发挥作用。

【讨论】:

用您的一些指点设法对其进行了排序,谢谢您的帮助

以上是关于使用下拉列表和会话变量的 MYSQL 插入的主要内容,如果未能解决你的问题,请参考以下文章

如何从下拉列表中选择多个项目并将多个值插入 MYSQL

如何从下拉列表中获取值并插入 MySQL Workbench?

带有“数量”下拉列表的 PHP 表单可将输入的数据行数插入表单

国家下拉列表将 ID 而不是名称(字符串)插入数据库(mysql)

来自 PHP/MySQL 的 Ajax 加载生成带有变量传递的 Bootstrap 下拉列表

从 jQuery 下拉列表中访问变量