编写代码非常新,所以如果有些奇怪的话,请提前道歉。我已设法显示复选框并更新我的数据库,但当它应为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>
提前感谢您的耐心和亲切的帮助!
答案 0 :(得分:1)
所以我们已经绕了几个房子,但这是解释。您的代码实际上非常好,并且在您打印时生成一个看起来正确的SQL查询。问题是使用ENUM类型的结果。如果您有一个由数字组成的枚举,并且使用整数更新列中的值,MySQL会将您发送的整数解释为您要设置的枚举值的索引,而不是实际值。因此1
是枚举值0
的索引,0
是隐式枚举值''
的索引(空字符串,在提供无效/索引时插入) )。
这个故事的寓意是,当你的值是整数时,不要试图使用ENUM列,因为它会引起混淆。坚持使用它作为字符串(或根本不使用)。在这种情况下,您的值为true / false,最好用BIT(1)
列表示。