【问题标题】:PHP Code Not Entering Data Into DatabasePHP代码未将数据输入数据库
【发布时间】:2014-04-25 23:24:28
【问题描述】:

我无法将表单发送到我的数据库。我已经尝试了一个小时来解决这个问题;我用“echo mysqli_error();”弄乱了我的代码但没有收到错误,只是我的数据库中缺少新数据(似乎提交表单也没有重新加载页面以发送信息)。该数据库使用 config.php、connectDB.php 和 header.php 为我的其余页面工作,因此问题不在于数据库设置。我相信错误在“isset($_POST['submit'])”内,因为它不会重新加载带有 header() 的页面,但我提供了我的其余代码以防万一。 (我知道这段代码没有受到 SQL 注入的保护,表单验证是我解决这个问题后的下一步):

<?php
require_once ("Includes/config.php"); 
require_once  ("Includes/connectDB.php");
include("Includes/header.php");
if (isset($_POST['submit'])){
                $name = $_POST['name'];
                $email = $_POST['email'];
                $content = $_POST['content'];
                $query = "INSERT INTO requests (name, email, content) VALUES (?, ?, ?)";

                $statement = $databaseConnection->prepare($query);
                $statement->bind_param('sss', $name, $email, $content);
                header('Location: /index.php');

                $statement->execute()
                $statement->store_result();
                setcookie("nameErr"," ", time()+3600);
                setcookie("emailErr"," ", time()+3600);
                setcookie("contentErr"," ", time()+3600);
                setcookie("contentSucc","Announcement Request Successful", time()+3600);
                header('Location: /request.php');

}
?>
<div id="main">
        <ol>
            <li>
                <label for="name">Name:</label> 
                <input type="text" name="name" value="" id="name" />
                <span class="error">* <?php if (isset($_COOKIE["nameErr"])){echo $_COOKIE["nameErr"];}?></span>
            </li>
            <li>
                <label for="email">Email:</label>
                <input type="text" name="email" value="" id="email" style = "position: relative; left: 3px;"/>
                <span class="error" style = "position: relative; left: 3px;">* <?php if (isset($_COOKIE["emailErr"])){echo $_COOKIE["emailErr"];}?></span>
            </li>
            <li>
                    <label for="content">Requested Announcement:</label><br>
                    <textarea rows="18" cols="140" name="content" id="content"></textarea>
                    <br>
                    <span class="error"> <?php if (isset($_COOKIE["contentErr"])){echo $_COOKIE["contentErr"];}?></span>
                    <span class="error"> <?php if (isset($_COOKIE["contentSucc"])){echo $_COOKIE["contentSucc"];}?></span>
            </li>
        </ol>
        <input type="submit" name="submit" value="Submit " style = "position: relative; left: 40px;" /> 
        <!-- onclick="window.location='request.php';" -->   
        <p>
            <a class="cancel" href="index.php" style = "position: relative; left: 40px;">Cancel</a>
        </p>
</div>

【问题讨论】:

  • 您似乎在任何地方都没有&lt;form&gt; 声明...
  • 当您尝试在 3 小时的睡眠中进行编码时会发生这种情况。对不起,我会做那个编辑。谢谢!
  • 我会怀疑execute() 之前的那个header() 调用。你的服务器错误日志有什么说明吗?
  • 那是我在使用 header() 测试我的代码后忘记删除它。我想贾斯汀明白了!

标签: php html mysqli


【解决方案1】:
  1. 您在执行 SQL 之前重定向到另一个网页。
  2. 行尾没有分号。
  3. &lt;form&gt; 周围没有 &lt;input&gt; 标签。
  4. 您不需要做太多其他事情来阻止 SQL 注入。只要您正确使用 MySQLi,就可以了。

改变这个

            $statement->bind_param('sss', $name, $email, $content);
            header('Location: /index.php');

            $statement->execute()

到这里

            $statement->bind_param('sss', $name, $email, $content);
            $statement->execute();
            $statement->close();

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

【讨论】:

  • 我会给你正确的答案,但贾斯汀实际上得到了它:我忘了定义表格。该 header() 是我使用 if 语句测试代码以查看发生了什么的痕迹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
相关资源
最近更新 更多