【问题标题】:PHP Form not posting to a MySQL databasePHP 表单未发布到 MySQL 数据库
【发布时间】:2017-03-15 09:00:00
【问题描述】:

我正在为我的雇主创建一个新的预订系统,其中填写了一个表格并将数据输入一个预建的 MySQL 数据库。

老实说,我不确定自己做错了什么。最初数据不会发布到数据库中,但表单似乎已提交。现在,表单只是提交到一个白页。我将在下面提交完整的页面代码,因为那里没有任何有影响的数据,希望有人能够提供帮助。

<head>
<title>&nbsp;&nbsp;Moat Laptop Bookinge&nbsp;&nbsp;</title>
<?php
if (isset($_POST['submitted'])) {

    include('booking_db.php');

    $name = $_POST['name'];
    $out = $_POST['out'];
    $in = $_POST['in'];
    $sqlinsert = "INSERT INTO Future (name, out, 'in') VALUES ('$name', '$out', '$in')";

    if (!mysqli_query ($dbcon, $sqlinsert)) {
        die('error inserting new record');
            }
            $newrecord = "Laptop has been successfully Booked!";
}
?>

<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

 <script>
  $(document).ready(function() {
    $("#datepicker").datepicker();
  });
  </script>

   <script>
  $(document).ready(function() {
    $("#datepicker2").datepicker();
  });
  </script>
</head>

<body style="background-height: 100%;background-width: 100%;background: #141E30;background: -webkit-linear-gradient(to left, #141E30 , #243B55);background: linear-gradient(to left, #141E30 , #243B55);">
<div id="logo" style="font-family: Tw Cen MT; font-weight: Bold; position: fixed; color: white; left: 650px;top: 35px; font-size: 80px;text-shadow: 3px 3px #c7c7c7;">
Book a Laptop
</div>
<div id="content_box" style="background-color: white;position: fixed; left: 450px;top: 135px; width:60%; height: 70%; border-radius: 3px;">
<center>
<form method="post" action="book.php" style="font-family: Bodoni MT;">
<input type="hidden" name="submitted" value="true" />
         <br />
         <br />
         <b><legend>First Name and First Letter of Surname</legend></b>
         <input type="text" name="name" value="Ex. James T" />
         <br/>
         <br />

         <b><legend>When will you need to collect the device?</legend></b>
         <input id="datepicker2" name="out" />
         <br/>
         <br />

         <b><legend>When will you return the device?</legend></b>
         <input id="datepicker" name="in" />

         <br />
         <input type="submit" value="Confirm Booking" />



</center>
<?php
echo $newrecord
?>

</div>

</body>

如果您需要更多信息,请在合理范围内随时询问。

编辑 此问题已解决,我无法标记答案,因为这是我的答案,我必须等待 2 天。谢谢大家的回答。

【问题讨论】:

  • PHP 中的“白页”通常意味着出现错误。检查 PHP 日志,打开错误报告等。另外请注意,您的代码对 SQL 注入完全开放,并且当出现 SQL 错误(很可能在此代码中)时,您不会' t 实际上检查那个错误是什么。您应该真的从一些关于使用mysqliPDO 的体面教程开始。
  • 如果您在Web 环境中编写php 时遇到意外情况,您要做的第一件事是总是 是查看您的http 服务器错误日志文件。在那里您可以简单地阅读实际问题是什么,而不必猜测或寻求帮助。 如果不监视该日志文件,您将无法在 Web 环境中实施。那就像在狭窄的山洞里蒙着眼睛飞一样。
  • 让我感到困惑的是,我以前使用过这个确切的代码并且它工作得很好,我真的很幸运我在自己的个人开发服务器上开发它,因为没有客户可以访问它。 @arkascha
  • 一个人总是在其他人可以访问实现之前在测试环境中进行开发。其他一切都会再次像闭上眼睛,试图过一座没有扶手的窄桥,声称“嗯,我以前过桥,不是吗?所以我应该是安全的......”。事情不是这样做的。代码在一个系统上工作但在另一个系统上失败的事实可能有多种原因,但经常发生。显然总是有一个特定的原因。你必须找到那个。为此,您需要测试一些东西。最好使用自动化测试套件。

标签: php mysql database forms


【解决方案1】:

include('booking_db.php'); 行可能有问题。您应该在页面顶部提及error_reporting(E_ALL);,然后尝试调试:

error_reporting(E_ALL);

if (isset($_POST['submitted'])) {

    var_dump(file_exists('booking_db.php')); //check if you get true or false

    require 'booking_db.php'; // Change include to required
    echo "Test"; 
    exit;
    $name = $_POST['name'];
    echo $name; // Check
    $out = $_POST['out'];
    $in = $_POST['in'];
    $sqlinsert = "INSERT INTO Future (name, out, 'in') VALUES ('$name', '$out', '$in')";

    var_dump($dbcon); // check

    if (!mysqli_query ($dbcon, $sqlinsert)) {
        die('error inserting new record');
    }
    $newrecord = "Laptop has been successfully Booked!";
}

请检查您在提交表单后得到了什么。

【讨论】:

  • 我被发送到一个页面,该页面声明了以下数组 ( [提交] => true [name] => James T [out] => 03/31/2017 [in] => 04/ 07/2017 )
  • 看起来您在 include 语句之后没有打印任何内容。这意味着它无法找到文件booking_db.php。您可能需要提及正确的路径。
  • 与表单在同一目录下,逻辑上不需要路径
  • 请更改直到exit,如图所示。将include 替换为required。并检查你得到的是真还是假。
  • 我只是把数据库连接文件放到代码顶部而不是一个单独的文件中,现在它说插入新记录时出错,James TNull Array ( [submitted] => true [name] = > James T [out] => 03/16/2017 [in] => 03/31/2017 ) James TNULL 插入新记录时出错
【解决方案2】:

将您的插入查询替换为:

    INSERT INTO Future 
(`name`,`out`,`in`) VALUES ('".$name."', '".$out."', '".$in."')

if (isset($_POST['submitted']))if (isset($_POST['Confirm Booking']))

因为您必须将提交按钮的值放在 POST 中

【讨论】:

    【解决方案3】:

    原来,我的问题是

    if (!mysqli_query ($dbcon, $sqlinsert)) {
            die('error inserting new record');
                }
                $newrecord = "Laptop has been successfully Booked!";
    }
    

    我把它改成了

    if (mysqli_query ($link, $sqlinsert)) {
            echo "";
    
    } else{
    
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    
    }
    

    并更改了一些变量以与之匹配,它开始工作并发布到我的数据库。感谢任何回答的人。

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2014-09-15
      相关资源
      最近更新 更多