【问题标题】:PDO insert statement not executingPDO 插入语句未执行
【发布时间】:2012-12-16 23:04:53
【问题描述】:

我有一个名为 waiting.php 的页面,该页面是开始辅导员和学生之间真实生活会话的门户。我有一个名为 "name='submit'

的提交按钮

我有一段代码调用提交按钮(isset),一旦发生这种情况,我希望 PDO 语句执行插入查询。但是我检查了 phpmyadmin 并没有插入任何内容。

我的代码是这样的:

f(isset($_POST['submit'])){
    $query = $dbh->prepare("INSERT INTO counselors (counselorname) VALUES (:counselorname)");
    $query->bindParam(':counselorname', $_POST['namedrop']);
    $query->execute();
    }

现在这是制作提交按钮和辅导员姓名下拉菜单的实际代码:

echo "<td> 
                <form method= 'post'>
                    </form><select name='namedrop'>
                        <option value=''>Counselor Name</option> 
                        <option value='dmin-John'>Admin - John</option>
                        <option value='Admin-Christine'>Admin - Christine</option>
                        <option value='Admin-Dawne'>Admin - Dawne</option>
                        <option value='Counselor-Cherie'>Counselor - Cherie</option>
                        <option value='Counselor-Tootie'>Counselor - Tootie</option>
                        <option value='Counselor-Debbie'>Counselor - Debbi</option>
                        <option value='FrontDesk-Delores'>Front Desk - Delores</option>
                        <option value='FrontDesk-Kiana'>Front Desk - Kiana</option>
                    </select> 
                </form>";

echo "<td> <form action='counselor.php?id=" . $row['id'] . "' method='post' target='_new'>
            <input type='submit' name='submit' value='Start Session'>
            </form> </td>";

我是 PHP 新手,所以我的逻辑有点像那里,但我的语法和知道如何实现我的逻辑低于平均水平。

任何帮助将不胜感激。

编辑:

这就是页面的外观:

编辑 2:

echo "<td> 
            <form action='counselor.php?id=" . $row['id'] . "' method='post' target='_new'>
                    <select name='namedrop'>
                        <option value=''>Counselor Name</option> 
                        <option value='dmin-John'>Admin - John</option>
                        <option value='Admin-Christine'>Admin - Christine</option>
                        <option value='Admin-Dawne'>Admin - Dawne</option>
                        <option value='Counselor-Cherie'>Counselor - Cherie</option>
                        <option value='Counselor-Tootie'>Counselor - Tootie</option>
                        <option value='Counselor-Debbie'>Counselor - Debbi</option>
                        <option value='FrontDesk-Delores'>Front Desk - Delores</option>
                        <option value='FrontDesk-Kiana'>Front Desk - Kiana</option>
                    </select> 

            <td> <input type='submit' name='submit' value='Start Session'>
            </form> </td>";
}

  echo "</tr>";
  echo "</table>";

if(isset($_POST['submit'])){
    $query = $dbh->prepare("INSERT INTO counselors (id, counselorname) VALUES (:id, :counselorname)");
    $query = $dbh->bindParam(':id', $row['id']);
    $query->bindParam(':counselorname', $_POST['namedrop']);
    $query->execute();
    }

【问题讨论】:

  • 你不能通过GET方法传递id然后POST它。您需要包含 id 作为隐藏输入值。
  • id 只是我要用来加入表格的东西,我用 ID 设置的是 url,这样当辅导员准备接学生时,我可以通过 $_GET['id'] 选择学生信息;我不明白这与插入有什么关系,因为我没有插入实际的 id。
  • ID 变量不应与此代码有任何关系。所以你如何传递这个变量并不重要。
  • 您应该查看error handling 以帮助确定失败的原因。
  • 错误处理已开启,我的日志中根本没有任何错误。

标签: php mysql pdo html-table isset


【解决方案1】:

您的标记有缺陷。您的 $query 语句需要 namedrop,但此选择列表与您的提交按钮不在同一个表单中。

您的代码显示了 3 种不同的形式,但没有一种是完整的。

<form method="post" action="..." target="_new">
    -- All components and elements must be declared inside this node
</form>

【讨论】:

  • 发现了问题。试试看!
【解决方案2】:

您可以添加一个绑定数组以直接执行语句:

if(isset($_POST['submit'])){
    $query = $dbh->prepare("INSERT INTO counselors (counselorname) VALUES (:counselorname)");
    $query->execute(array(':counselorname', $_POST['namedrop']));
}

【讨论】:

  • 我发现了问题。试试看
【解决方案3】:

问题是:action="counselor.php?id="。 $row['id'] 。 "

意味着插入脚本应该转到counselor.php 页面。它没有出现错误的原因是我告诉它所做的工作不是以我想要的方式接受。

第二个问题是表单必须在 method=post 如果不是 ID 将插入而不是名称。所以要解决这个问题:

echo "
        <td>    <form action='counselor.php?id=" . $row['id'] . "' method='post' target='_new'>
                    <select name='namedrop'>
                        <option value=''>Counselor Name</option> 
                        <option value='dmin-John'>Admin - John</option>
                        <option value='Admin-Christine'>Admin - Christine</option>
                        <option value='Admin-Dawne'>Admin - Dawne</option>
                        <option value='Counselor-Cherie'>Counselor - Cherie</option>
                        <option value='Counselor-Tootie'>Counselor - Tootie</option>
                        <option value='Counselor-Debbie'>Counselor - Debbi</option>
                        <option value='FrontDesk-Delores'>Front Desk - Delores</option>
                        <option value='FrontDesk-Kiana'>Front Desk - Kiana</option>
                    </select>
            </td>

            <td> <input type='submit' name='submit' value='Start Session'></td>
            </form> </td>";

然后在我的counsoror.php 上我进行了测试以检查我是否得到了任何东西:

$id = $_GET['id'];
echo "$id";

$name = $_POST['namedrop'];
echo "$name";

那么我运行查询所做的就是:

if(isset($_POST['submit'])){
    $query = $dbh->prepare("INSERT INTO counselors (id, counselorname) VALUES (:id, :counselorname)");
    $query->bindParam(':id', $_GET['id']);
    $query->bindParam(':counselorname', $_POST['namedrop']);
    $query->execute();
    }

然后这是完成的结果:

【讨论】:

  • 这还不完整,因为我必须“清理” id 并输入验证以检查它是否明显是一个数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 2014-12-14
  • 2014-08-12
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
相关资源
最近更新 更多