$ _POST []的默认值;

时间:2015-12-01 20:38:34

标签: php html sql

我遇到了$ _POST []的默认值问题; 所以我有一个带有文本框的html表单,并将信息发送到php脚本。 php脚本有一个sql查询,正在发送到我的数据库。但如果我的html格式的文本框为空,则查询没有值。所以我想将我的帖子设置为默认值0,因此它至少返回一个值。

所以这是一个html表单的例子(这不是我的执行脚本。只是一个例子。

<form action="testscript.php" method="POST">
    <input type="id" name="ID"/>
    <input type="text" name="test"/>
    <input type="submit" value="Send"/>
</form>

好的,所以这个脚本将发送id和测试文本框将始终具有数字值。它将信息发送到testscript.php

这是testscript.php示例

    $conn = mysqli_connect('host', 'dbuser', 'dbpass', 'dbname');
    $id = $_POST['id'];
    $test = $_POST['test'];
    $sql = "INSERT INTO test_table (id, test) VALUES ($id, $test)";

    if (mysqli_query($conn, $query)) {
        echo "Success";
    } else {
        echo "Failed" . mysqli_error($conn);
    }

好吧现在如果我将我的html表单提交到php脚本而不向文本框中插入任何文本,查询将如下所示

INSERT INTO test_table (id, test) VALUES ( , )

但查询应该是这样的

INSERT INTO test_table (id, test) VALUES (0, 0)

因此。我知道我可以在html标签中使用value属性,但随后该值将在文本框中显示,我不想要。

我知道我可以做一个if语句来制作像这样的默认值

if (isset($_POST['test'])) {
    $test = $_POST['test'];
} else {
    $test = 0;
}

但现在的问题是,如果每个文本框和我的html表单的语句都有超过100个文本框,我就必须这样做。所以我不想为每个文本框制作一个if语句,因为那时我的脚本会变大,这需要几个小时。

那么有没有办法为所有文本框设置默认值而不使用php中的if statment或html格式的value属性?

2 个答案:

答案 0 :(得分:6)

我知道这似乎很痛苦,但你必须检查所有输入是否有效。您可以使用这样的三元运算符来简化代码量。

$id = isset($_POST['id']) ? $_POST['id'] : 0;
$test = isset($_POST['test']) ? $_POST['test'] : 0;

....

不,即使数百个也不会花费数小时。

为了减少代码的痛苦,你可以使用PHP variable variables

的循环功能

最痛苦的部分是创建一个包含所有字段名称的数组

$fields = array('id', 'test', 'extra', 'more', ..., 'one_hundred');

然后遍历该数组创建变量名,同时转义字符串 - 如果它们在那里 - 否则设置值0(零)。您可能希望/需要将其设置为“”(空字符串)

foreach($fields as $field_name)
{
   ${$field_name} = isset($_POST[$field_name]) ? mysqli_real_escape_string($conn, $_POST[$field_name]) : 0;
}

您现在可以使用变量$ id,$ test,$ extra,$ more,....,$ one_hundred供您使用。

答案 1 :(得分:0)

如果您的复选框具有唯一的名称,那么您需要在服务器端检查它们,看看它们是否通过使用三元组逐一实现其中的值

isset($_POST["test"]) ? $_POST["test"] : 0

但是,如果您的复选框是数组形式:

<input type="checkbox" name="courses[]" value="1">
<input type="checkbox" name="courses[]" value="2 >

然后你可以做到以下几点:

foreach($_POST['courses'] as $course) {
    echo $course; // etc etc etc 
}

您还可以设置数据库默认值。

另外请注意,您的代码很容易注入SQL。虽然您提出的问题可能仅仅是一个示例,但您可能只需要记住,有更好,更安全的查询数据库的方法,请参阅PDO连接。