【问题标题】:Form not submitting to database PHP PDO表单未提交到数据库 PHP PDO
【发布时间】:2018-01-12 16:01:09
【问题描述】:

我有一个用于提交新列表项的简单表单。

HTML 表单

   <form class="form-horizontal" action="" method="post">
        <fieldset>
            <!-- List Desription-->
            <div class="form-group">
                <label class="col-md-4 control-label" for="listDescription"></label>
                <div class="col-md-4">
                    <div class="input-group">
                        <span class="input-group-addon">Title / Description</span>
                        <input id="titleDescription" name="titleDescription" class="form-control" placeholder="Title / Descriptiopn" type="text" required="">
                    </div>
                </div>
            </div>
            <!-- List Status -->
            <div class="form-group">
                <label class="col-md-4 control-label" for="listStatus"></label>
                <div class="col-md-4">
                    <select id="listStatus" name="listStatus" class="form-control">
                        <option value="1">In Progress</option>
                        <option value="2">On Hold</option>
                        <option value="3">Complete</option>
                    </select>
                </div>
            </div>
            <!-- Submit Button -->
            <div class="form-group">
                <label class="col-md-4 control-label" for="btnAddList"></label>
                <div class="col-md-4">
                    <input type="submit" id="submit" name="submit" class="btn btn-info" value="Create List">
                </div>
            </div>
        </fieldset>
    </form>

表单在同一页面提交到以下PHP:

表单提交 PHP

if(isset($_POST['submit'])) {
    $listDescription = (isset($_POST['listDescription']) ) ? $_POST['listDescription'] : '';
    $listStatus = (isset($_POST['listStatus']) ) ? $_POST['listStatus'] : '';
    $createdDate = date('Y-m-d');

    $query = $pdo->prepare("INSERT into lists ('createdDate', 'listDescription', 'listStatus') VALUES (:createdDate, :listDescription, :listStatus)");
    $query->bindParam(':listDescription', $listDescription, PDO::PARAM_STR);
    $query->bindParam(':listStatus', $listStatus,PDO::PARAM_STR);
    $query->bindParam(':createdDate', $createdDate, PDO::PARAM_STR);
    $query->execute();
}

表单实际上并未将数据输入 MySQL 数据库。我让它显示 $_POST 的变量:

从 $_POST 转储数组

var_dump($_POST)

这实际上是在显示我的表单数据:

来自 $_POST 输出的数组

array(3) { ["titleDescription"]=&gt; string(5) "Title" ["listStatus"]=&gt; string(1) "1" ["submit"]=&gt; string(11) "Create List" }

我一生都无法理解为什么这不提交到数据库。我还想将它包装在 try 中并捕获异常(如果有),但是当我这样做时,我会收到其他错误,例如 expected statement right before thecatch. This is how I had it written with thetry`:

包含“try”的 PHP 代码

try {
        if(isset($_POST['submit'])) {
            $listDescription = (isset($_POST['listDescription']) ) ? $_POST['listDescription'] : '';
            $listStatus = (isset($_POST['listStatus']) ) ? $_POST['listStatus'] : '';
            $createdDate = date('Y-m-d');

            $query = $pdo->prepare("INSERT into lists ('createdDate', 'listDescription', 'listStatus') VALUES (:createdDate, :listDescription, :listStatus)");
            $query->bindParam(':listDescription', $listDescription, PDO::PARAM_STR);
            $query->bindParam(':listStatus', $listStatus,PDO::PARAM_STR);
            $query->bindParam(':createdDate', $createdDate, PDO::PARAM_STR);
            $query->execute();
        } catch (PDOException $e) {
        echo "Error";
    }
}

正如我所提到的,但是当我包含 try 时,我基本上会遇到语法错误。我确定我错过了一些愚蠢的东西。

更新

我让它工作了。在我的头撞在桌子上并且不明白为什么它不起作用之后,我几乎从我可以创建并从那里扩展的最基本的形式开始:

try{
    if(isset($_POST['newItem'])) {

        $createdOn = date("Y-m-d H:i:s");
        $listTitle = $_POST['listTitle'];
        $createdBy = $_SESSION['user_id'];
        $listStatus = $_POST['listStatus'];

        $insert = $pdo->prepare("INSERT INTO userlists (createdOn, listTitle, createdBy, listStatus) VALUES(:createdOn, :listTitle, :createdBy, :listStatus)");
        $insert->bindParam(':createdOn', $createdOn);
        $insert->bindParam(':listTitle',$listTitle);
        $insert->bindParam(':createdBy',$_SESSION['user_id']);
        $insert->bindParam(':listStatus',$listStatus);
        $insert->execute();
        echo "insert it";
    }
} catch(PDOException $e) {
    echo "error:".$e->getMessage();
}

因此,它执行以下操作:

  • 提交新的列表项
  • 将新列表项提交到数据库
  • 向数据库提交当前的 user_id,即 SESSION 标识符

在我的页面下方,我让我的 PHP 显示属于具有匹配 user_id 的用户的所有列表项。

利润!

【问题讨论】:

  • 您的 catch 块位于 if 语句的右括号之后。仔细看看哪些括号属于一起。
  • 也关注这个stackoverflow.com/questions/11321491/…。不确定它是否重复,但非常接近
  • 看来你的param值不一样,1是titleDescription,另一个是listDescription:name="titleDescription" and $_POST['listDescription']
  • 好的,我确实在表单本身中留下了 titleDescription。这已经解决了。但是,我的表格仍然不会提交。如果有帮助,我已将页面的整个源代码粘贴在这里:pastebin.com/9q0Q9v8V
  • 您的输入仍然显示 titleDescription:

标签: php mysql forms pdo


【解决方案1】:

我让它工作了。在我的头撞在桌子上并且不明白为什么它不起作用之后,我几乎从我可以创建并从那里扩展的最基本的形式开始:

try{
    if(isset($_POST['newItem'])) {

        $createdOn = date("Y-m-d H:i:s");
        $listTitle = $_POST['listTitle'];
        $createdBy = $_SESSION['user_id'];
        $listStatus = $_POST['listStatus'];

        $insert = $pdo->prepare("INSERT INTO userlists (createdOn, listTitle, createdBy, listStatus) VALUES(:createdOn, :listTitle, :createdBy, :listStatus)");
        $insert->bindParam(':createdOn', $createdOn);
        $insert->bindParam(':listTitle',$listTitle);
        $insert->bindParam(':createdBy',$_SESSION['user_id']);
        $insert->bindParam(':listStatus',$listStatus);
        $insert->execute();
        echo "insert it";
    }
} catch(PDOException $e) {
    echo "error:".$e->getMessage();
}

因此,它执行以下操作:

提交一个新的列表项 将新列表项提交到数据库 将当前的 user_id 即 SESSION 标识符提交到数据库 在我的页面下方,我的 PHP 显示了属于具有匹配 user_id 的用户的所有列表项。

利润!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 2016-03-24
    • 1970-01-01
    • 2015-07-04
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多