为什么我不能将此值从表单传递给必须处理它的.php文件?

时间:2017-05-03 18:47:51

标签: php forms

我是PHP的新手,我将以下问题从表单传递到必须处理它的.php文件。

所以这是渲染页面的形式:

<form method="post" action="common/remove-booking_pc.php" class="ajax-form">
    <input id="id_booking" name="id_booking" value="5" type="hidden">

    <a href="/PandaOk/templates/default/common/remove-booking_pc.php" type="submit">
        <i class="fa fa-power-off"></i>
            Conferma
    </a>
</form>

显示在浏览器代码中的内容。正如您所看到的那样,它传递了一个数据字段:

<input id="id_booking" name="id_booking" value="5" type="hidden">

传递的值 5

因此,当我提交此表单时,会通过此文件呈现 remove-booking_pc.php

<?php
    $id_booking = $_POST['id_booking'];

    $result_remove_booking = $db->query("UPDATE pm_booking SET status= " . $id_booking);

?>

问题是 $ id_booking null $ _ POST 是一个空数组。

为什么呢?怎么了?我错过了什么?我怎样才能正确传递这个值?

2 个答案:

答案 0 :(得分:2)

您的提交是一个锚点,而不是表单提交,因此接收页面永远不会收到任何POST数据。

只需使用button类型的input [或submit]替换您的锚点,表单将按预期提交。

<form method="post" action="common/remove-booking_pc.php" class="ajax-form">
    <input id="id_booking" name="id_booking" value="5" type="hidden">

    <button type="submit" class="fa fa-power-off" value="Submit">Conferma</button>

</form>

您应该考虑的其他事项:

  • 您的表单容易受到跨网站请求伪造[CSRF]

  • 您的数据库容易受SQL injection攻击。使用Prepared Statements

  • 正如Fred所指出的,您的SQL(UPDATE pm_booking SET status=)当前将更新表中的每一行,没有任何限定条件。在SQL中使用WHERE

  • 如果处理文件上传,您的HTML表单最佳做法应为enctype值。

    <form enctype='multipart/form-data' ... >
    

答案 1 :(得分:1)

您需要Button来提交表单,在这种情况下,您使用的是href超链接。示例如下:

<input type="Submit" name="Submit" value="Submit">