Php 未将变量从表单过帐到$self

Php 未将变量从表单过帐到$self,php,forms,post,pdo,Php,Forms,Post,Pdo,编辑: 添加了新的代码块 //SCRIPT TO INSERT THE CHANGED ENTRY echo "the <b>CONFIRM CHANGES</b> button was pressed<br /><br />"; $STH = $DBH->("INSERT INTO register (register, location, type, capacity, length, qty, serial, cert,

编辑: 添加了新的代码块

//SCRIPT TO INSERT THE CHANGED ENTRY
    echo "the <b>CONFIRM CHANGES</b> button was pressed<br /><br />";
    $STH = $DBH->("INSERT INTO register (register, location, type, capacity, length, qty, serial, cert, lastinsp, inspby, status, datein, dateout, notes) value (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");

    //bind the parameters to the variables
    $data = array("$register", "$location", "$type", "$capacity", "$qty", "$serial", "$cert", "$lastinsp", "$inspby", "$status", "$datein", "$dateout", "$notes");
    $STH->execute($data);
    echo "Data has been written to the database!<br /><br />";
    echo "<hr />";
我想你只是用错了执行。首先,你应该:

$sth = $dbh->prepare("INSERT INTO folks (register, location, type, capacity, length, qty, serial, cert, lastinsp, inspby, status, datein, dateout, notes) value (:register, :location, :type, :capacity, :length, :qty, :serial, :cert, :lastinsp, :inspby, :status, :datein, :dateout, :notes)");
然后,在使用诸如:register之类的命名参数时,需要在execute like中提供关联数组:

bind the parameters to the variables
$data = array(
    ":register" => $register,
    ":location" => $location,
    //...
    ":notes" => $notes);
$sth->execute($data);
若你们只想传递一个参数值数组,你们可以把它放进去吗?传递给prepare的SQL字符串中的标记见下文

编辑if块中的第一个查询也需要修复。永远不要将POST数据直接放入SQL查询中,因为这样做会使您容易受到攻击。首先需要转义POST数据中的任何控制字符,例如引号。准备方法可用于这样做:

$sth = $dbh->prepare("select * from register WHERE id=?");
$sth->execute(array($id));

在这里调用execute时,提供的值数组用于填充准备好的语句$sth中的问号,然后执行该语句。请查看文档页面上的示例。

您能理解为什么$id=$\u POST['id'];是否从表单传递到编辑脚本?这就是目前让我感到困惑的部分。编辑表单会显示,但$id不存在,并且表单没有预填充数据库中的行。我不知道,如果$u POST['id']不存在,它就不存在,您需要查看原因。可以肯定的是,在ifisset$\u POST['edit']{line之后尝试执行var_dump$\u POST。var_dump$\u POST的结果是array2{[id]=>string0[edit]=>string4 edit}谢谢您的帮助。啊,好的,那么$\u POST['id']只是设置不正确。我看到问题了!请看代码底部的第五行:echo;这里您要使隐藏输入的id等于$row['id'],但您要做的是使其值等于$row['id']。HTML id属性有其单独的含义。请更改该属性,然后重试。为了澄清,该行应为:echo;
$sth = $dbh->prepare("select * from register WHERE id=?");
$sth->execute(array($id));