我有一个用户表,当我点击图标时,它会将我重定向到' /edit.php'在哪里我有形式:
<form action="form.php" class="form-horizontal col-xs-3" method="post">
<p>Imię <input type="text" name="name" value='<?php echo $user["name"];?>' class="form-control input-sm"/></p>
<p> Nazwisko <input type="text" name="surname" value='<?php echo $user["surname"];?>' class="form-control input-sm"/></p>
<p> Wiek <input type="number" name="age" value='<?php echo $user["age"];?>' class="form-control input-sm"/></p>
<input type="hidden" name="update" value="true"/>
<input type="hidden" name="userId" value='<?php echo $user["id"]; }?>'/>
...
隐藏的输入称为&#34;更新&#34;用于&#39; form.php&#39;用于检测请求是来自新页面还是编辑页面的文件:
if (isset($_POST["update"])){
...
没关系,它有效。但我有功能更新,它构建updateQuery字符串:
function update($tableName, $name, $surname, $age, $departmentId, $userId){
$updateQuery = "UPDATE "
.$tableName
." SET "
."name=".$name.", "."surname=".$surname.", "."age=".$age.","."department_id=".$departmentId.")"
." WHERE id=".$userId;
echo $updateQuery;
return $updateQuery;
}
我得到了错误:
警告:缺少update()的参数6,在第107行的C:\ Users \ Abc \ Documents \ NetBeansProjects \ PhpProject1 \ form.php中调用,并在C:\ Users \ Abc \ Documents \ NetBeansProjects \ PhpProject1 \中定义第48行的form.php
似乎我无法获得&#34; userId&#34;以这种方式变量:(int)htmlspecialchars($_POST["userId"])
但非常有趣的是,当我在回声&#39;中使用它时它有效,例如:
echo (int)htmlspecialchars($_POST["userId"])." is ID";
这就是我调用update()方法的方法:
if (isset($_POST["update"])){
echo (int)htmlspecialchars($_POST["userId"])." is ID";
$pdo->query(update("users", $pdo->quote(htmlspecialchars($_POST["name"])),
$pdo->quote(htmlspecialchars($_POST["surname"])),
(int)htmlspecialchars($_POST["age"]), (int)htmlspecialchars($departmentRealId)),
(int)htmlspecialchars($_POST["userId"]));
}
这是update()方法代码,它应该构建更新查询:
function update($tableName, $name, $surname, $age, $departmentId, $userId){
$updateQuery = "UPDATE "
.$tableName
." SET "
."name=".$name.", "."surname=".$surname.", "."age=".$age.","."department_id=".$departmentId.")"
." WHERE id=".$userId;
echo $updateQuery;
return $updateQuery;
}
这是由update()方法创建的示例updateQuery:UPDATE users SET name='matt', surname='damon', age=56,department_id=2) WHERE id=
不幸的是,我不知道为什么,$ userId参数不存在。正如您在上面的代码中看到的那样:在行中:echo (int)htmlspecialchars($_POST["userId"])." is ID";
并在update()调用中:(int)htmlspecialchars($_POST["age"]), (int)htmlspecialchars($departmentRealId)),
(int)htmlspecialchars($_POST["userId"]));
我是以同样的方式做到的 - 至少我没有看到任何差异,这可能导致该参数不存在。
如果有人帮助我,我会很高兴 - 提前谢谢你。
答案 0 :(得分:1)
这是括号突出显示会派上用场的地方,请查看您调用更新的行:
请注意更新功能不包含(int)htmlspecialchars($_POST['userId'])
。
相反,你应该使用:
$pdo->query(update("users",
$pdo->quote(htmlspecialchars($_POST["name"])),
$pdo->quote(htmlspecialchars($_POST["surname"])),
(int)htmlspecialchars($_POST["age"]),
(int)htmlspecialchars($departmentRealId),
(int)htmlspecialchars($_POST["userId"])
));
答案 1 :(得分:1)
朋友!
代码存在一些问题。
第一:
<input type="hidden" name="userId" value='<?php echo $user["id"]; }?>'/>
您应该删除&#34; } &#34;从那个!
所以它将是:
<input type="hidden" name="userId" value="<?php echo $user["id"]; ?>"/>
其次,你的功能没有引号。 改为:
function update($tableName, $name, $surname, $age, $departmentId, $userId){
$updateQuery = "UPDATE "
.$tableName
." SET "
."name='".$name."', "."surname='".$surname."', "."age=".$age.","."department_id=".$departmentId.")"
." WHERE id=".$userId;
echo $updateQuery;
return $updateQuery;
}
我的意思是:
"name='".$name."'
每个列文本都应该有引号,而不是:
Update (...) Set Name=Felipe
你应该这样做:
Update (...) Set Name='Felipe'