PHP复选框输入未正确更新数据库

时间:2014-07-19 19:54:12

标签: php mysql

编写代码非常新,所以如果有些奇怪的话,请提前道歉。我已设法显示复选框并更新我的数据库,但当它应为1时分配值为零,因此显然有一个错误,它如何处理输入。任何帮助是极大的赞赏。 MySQL数据库有一个用户名列和playdate 1,2,3,4,5。用户名为VARCHAR,其他为ENUM,值为0和1。

<?php
$host="localhost";
$username="******";
$password="*******";
$db_name="signuplist";
$tbl_name="signupbydate";
$myusername=$_SESSION['logname'];
?>

<html>
    <head>
        <title>Checkbox</title>
    <head>
         <title>HTML Checkbox</title>
    </head>
    <body>
    <div style='margin-left:6.0in; margin-top:0.75in'>
    <p style='font-weight:bold'>
        When would you like to play golf?</p>
    <p>Choose the dates you wish to play</p>
    <p>Make sure you click 'Update' when you are done</p>
           <form name="requesttime" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
           <input type="checkbox" name="playdate[]" value="playdate1"> September 3, 2014 <br>
           <input type="checkbox" name="playdate[]" value="playdate2"> September 6, 2014 <br>
           <input type="checkbox" name="playdate[]" value="playdate3"> September 10, 2014 <br>
           <input type="checkbox" name="playdate[]" value="playdate4"> September 13, 2014 <br>
           <input type="checkbox" name="playdate[]" value="playdate5"> September 17, 2014 <br>
           <br>
           <input type="submit" value="Update" name="submit">
<?php

$cxn=mysqli_connect($host,$username,$password,$db_name)
     or die ("Couldn't Connect to Server");
$chkbox = array('playdate1', 'playdate2', 'playdate3', 'playdate4', 'playdate5');

     if(isset($_POST['submit']))
     {   $playdate = $_POST['playdate'];
         $values = array();
           foreach($chkbox as $selection )
           {     if(in_array($selection, $playdate))
                   { $values[ $selection ] = 1;  }
                 else
                   { $values[ $selection ] = 0;  }
     } 

    // MySQL statement. Don't forget to strip to avoid sql injection 

     $sql1="UPDATE $tbl_name 
            SET playdate1=$values[playdate1], playdate2=$values[playdate2], playdate3=$values  [playdate3], playdate4=$values[playdate4], playdate5=$values[playdate5]
            WHERE username='$myusername'";

           // MySQL statement to execute the UPDATE statement above.           
      mysqli_query($cxn, $sql1) or die('<br/>Error reading database: '.mysqli_error($cxn));
      mysqli_close($cxn);
     }  // End of, if statement from the button check
?>
</form>
</body>
</html>

提前感谢您的耐心和亲切的帮助!

1 个答案:

答案 0 :(得分:1)

所以我们已经绕了几个房子,但这是解释。您的代码实际上非常好,并且在您打印时生成一个看起来正确的SQL查询。问题是使用ENUM类型的结果。如果您有一个由数字组成的枚举,并且使用整数更新列中的值,MySQL会将您发送的整数解释为您要设置的枚举值的索引,而不是实际值。因此1是枚举值0的索引,0是隐式枚举值''的索引(空字符串,在提供无效/索引时插入) )。

这个故事的寓意是,当你的值是整数时,不要试图使用ENUM列,因为它会引起混淆。坚持使用它作为字符串(或根本不使用)。在这种情况下,您的值为true / false,最好用BIT(1)列表示。

有关详情,请参阅此页:http://dev.mysql.com/doc/refman/5.0/en/enum.html