无法在$ _POST PHP中发送隐藏输入

时间:2014-09-07 18:58:12

标签: php html sql forms post

我有一个用户表,当我点击图标时,它会将我重定向到' /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"])); 我是以同样的方式做到的 - 至少我没有看到任何差异,这可能导致该参数不存在。 如果有人帮助我,我会很高兴 - 提前谢谢你。

2 个答案:

答案 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'