【问题标题】:Checkboxes don't pass on value to DB复选框不会将值传递给数据库
【发布时间】:2016-03-17 17:58:44
【问题描述】:

我使用 php 在我的网站上创建了一个联系表单,其中一些值,更具体地说是具有复选框类型输入的值,不会发送到我的数据库。我认为我使用复选框或其他东西的方式一定有问题。提交表单后,我会收到几条类似的通知:

注意:未定义的索引:熨烫 /Applications/XAMPP/xamppfiles/htdocs/wordpress/demo.php 在第 79 行

注意:未定义的变量:POST in /Applications/XAMPP/xamppfiles/htdocs/wordpress/demo.php 在第 94 行

其余代码似乎工作正常,数据已加载到我的数据库中。

这是我认为是错误的 demo-form.php 文件中的一些代码:

<h4>i) Cleaningservice:</h4>
     <p>Experience (in years): <input type="number" name="cleanExpInYears"/> </p>
     <p>Skills: <br>
       <input type="checkbox" name="basic" value="yes"> Basic cleaning<br>
       <input type="checkbox" name="kitchen" value="yes"> Kitchen tools<br>
       <input type="checkbox" name="laundry" value="yes"> Laundry<br>
       <input type="checkbox" name="ironing" value="yes"> Ironing<br>
       <input type="checkbox" name="window" value="yes"> Windows<br>
     <p> Please tell us about other skills: <input type="text" name="other_clean"/> </p>
     </p>

这里是对应的demo.php文件,它连接到数据库并将数据存储在那里:

/* Cleaningservice data is gathered... */

$clean_value1 = $_POST['cleanExpInYears'];
$clean_value2 = $_POST['basic'];
$clean_value3 = $_POST['kitchen'];
$clean_value4 = $_POST['laundry'];
$clean_value5 = $_POST['ironing'];
$clean_value6 = $_POST['window'];
$clean_value7 = $_POST['other_clean'];

/* ...and inserted into the table cleaningservice */

$sql = "INSERT INTO cleaningservice (applicant_id, cleanExpInYears, basic, kitchen, laundry, ironing, window, other)
        VALUES (LAST_INSERT_ID(),'$clean_value1', '$clean_value2', '$clean_value3', '$clean_value4', '$clean_value5', '$clean_value6', '$clean_value7')";

if (!mysql_query($sql)) {
 die('Error: ' . mysql_error());
}

我在这里错过了什么? 提前致谢

【问题讨论】:

    标签: php sql database wordpress checkbox


    【解决方案1】:

    如果复选框被实际选中,浏览器只会将复选框传递给 PHP 脚本。

    因此,在 PHP 中,您必须在使用其内容之前检查 $_POST 变量是否确实存在,如果不存在则提供 UNCHECKED 即默认选项。

    /* Cleaningservice data is gathered... */
    
    $clean_value1 = $_POST['cleanExpInYears']);
    $clean_value2 = isset($_POST['basic']) ? $_POST['basic'] : 'No';
    $clean_value3 = isset($_POST['kitchen']) ? $_POST['kitchen'] : 'No';
    $clean_value4 = isset($_POST['laundry']) ? $_POST['laundry'] : 'No';
    $clean_value5 = isset($_POST['ironing']) ? $_POST['ironing'] : 'No';
    $clean_value6 = isset($_POST['window']) ? $_POST['window'] : 'No';
    $clean_value7 = $_POST['other_clean'];
    

    为避免出现“数组索引不存在”之类的错误消息,您应该检查所有 POST/GET 值是否存在。

    /* Cleaningservice data is gathered... */
    
    $clean_value1 = isset($_POST['cleanExpInYears']) ? $_POST['cleanExpInYears'] : '';
    
    $clean_value2 = isset($_POST['basic']) ? $_POST['basic'] : 'No';
    $clean_value3 = isset($_POST['kitchen']) ? $_POST['kitchen'] : 'No';
    $clean_value4 = isset($_POST['laundry']) ? $_POST['laundry'] : 'No';
    $clean_value5 = isset($_POST['ironing']) ? $_POST['ironing'] : 'No';
    $clean_value6 = isset($_POST['window']) ? $_POST['window'] : 'No';
    
    $clean_value7 = isset($_POST['other_clean']) ? $_POST['other_clean'] : '';
    

    【讨论】:

    • 非常感谢!如果我有其他类型的输入字段,是否可以通过使用必需的命令来确保这些值存在?
    • 哪个required 命令?如果您的意思是require 'some_script.php,那么答案是否定的。但也许你知道我不知道的 PHP 命令!
    【解决方案2】:

    您必须在名称和值之间切换

         <p>Skills: <br>
           <input type="checkbox" value="basic" name="yes"> Basic cleaning<br>
           <input type="checkbox" value="kitchen" name="yes"> Kitchen tools<br>
           <input type="checkbox" value="laundry" name="yes"> Laundry<br>
           <input type="checkbox" value="ironing" name="yes"> Ironing<br>
           <input type="checkbox" value="window" name="yes"> Windows<br>
         <p> Please tell us about other skills: <input type="text" name="other_clean"/> </p>
         </p>
    

    在 PHP 方面,您将在 var_dump($_POST['yes']) 中找到您选择的值

    【讨论】:

    • 您不必切换名称和值的内容和含义,但这是我以前从未考虑过的有趣想法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2015-06-07
    • 2020-12-20
    • 2014-02-13
    • 1970-01-01
    • 2017-10-19
    相关资源
    最近更新 更多