我有一个数字表,用户应该能够编辑这些值并在提交时更新数据库。
到目前为止,我的错误代码正在更新提交值为1的每个字段,无论输入的是什么。
提交时的代码:
//If the confirm button has been hit:
if (isset($_POST['submit'])) {
//Create the foreach loop
foreach($_POST['classtoupdate'] as $classes){
//Grab the POST data and turn it into integers
$class_id = (int)$classes;
$totalspcs = (int)$_POST['allspaces'];
$totalbkgs = (int)$_POST['allbookings'];
$newbies = (int)$_POST['noobs'];
//Change the booking numbers:
$newdeets = "UPDATE classes SET total_spaces = '$totalspcs', total_bookings = '$totalbkgs', free_spaces = ('$totalspcs' - '$totalbkgs'), newbies = '$newbies' WHERE class_id = '$class_id')";
echo $newdeets;
mysqli_query($dbc, $newdeets);
}
mysqli_close($dbc);
echo 'All good, yay! <a href="admin.php">Go look</a>';
}
形式:
//create the form
echo '<form method="post" action="' . $_SERVER['PHP_SELF'] . '" >';
echo '<tr><td>' . $class . '</td>';
echo'<td>' . $new_date . '</td>';
echo '<td>' . $new_time . '</td>';
echo '<td><input type="text" maxlength="2" class="input-mini" name="noobs[]" id="noobs[]" value="' . $newbies . '">';
echo '<td><input type="text" maxlength="2" class="input-mini" name="allspaces[]" id="allspaces[]" value="' . $totalspaces . '">';
echo '<td><input type="text" maxlength="2" class="input-mini" name="allbookings[]" id="allbookings[]" value="' . $bookings . '"
>';
echo '<td>' . $freespaces . '</td>';
echo' <input type="hidden" name="classtoupdate[]" id="classtoupdate[]" value="' . $class . '" />';
}
echo'</table>';
// Make booking button
echo '<input type="submit" name="submit" class="btn btn-large btn-primary pull-right" value="Update">';
echo '</form>';
在表单中输入随机值(而不是1)后回显的查询结果:
UPDATE classes SET total_spaces = '1', total_bookings = '1', free_spaces = ('1' - '1'), newbies = '1' WHERE class_id = '26')
UPDATE classes SET total_spaces = '1', total_bookings = '1', free_spaces = ('1' - '1'), newbies = '1' WHERE class_id = '16')
每个表行的..等等。在广泛搜索SO和手册后,我找不到复制的问题。
我在POST结果上尝试了intval(),serialize和array_map(可能不正确);我尝试过不同的foreach循环将它们转换为整数,仍然没有快乐。
有什么建议吗?
答案 0 :(得分:0)
$i=0;
//Create the foreach loop
foreach($_POST['classtoupdate'][$i] as $classes){
//Grab the POST data and turn it into integers
$class_id = (int)$classes;
$totalspcs = (int)$_POST['allspaces'][$i];
$totalbkgs = (int)$_POST['allbookings'][$i];
$newbies = (int)$_POST['noobs'][$i];
//Change the booking numbers:
$newdeets = "UPDATE classes SET total_spaces = '$totalspcs', total_bookings = '$totalbkgs', free_spaces = ('$totalspcs' - '$totalbkgs'), newbies = '$newbies' WHERE class_id = '$class_id')";
echo $newdeets;
mysqli_query($dbc, $newdeets);
$i++;
}
答案 1 :(得分:0)
你的POST变量是数组(例如allspaces [])
所以,这个赋值总是给你一个结果,因为你试图将数组转换为整数。
$totalspcs = (int)$_POST['allspaces'];
你应该循环你的数组并以不同的方式使用数据。 如果您不需要数组,请删除输入名称中的方括号。
答案 2 :(得分:0)
试试这个:
foreach($_POST['classtoupdate'] as $index => $classes){
和
$totalspcs = (int)$_POST['allspaces'][$index];
$totalbkgs = (int)$_POST['allbookings'][$index];
$newbies = (int)$_POST['noobs'][$index];
请注意每行中的$index
。
答案 3 :(得分:0)
问题在于您为输入字段命名的方式。 <input type="text" maxlength="2" class="input-mini" name="noobs[]">
[]
意味着数据将作为数组发布回服务器,并且您将数组类型转换为整数,这就是为什么每个地方都获得1作为值。失去[]
,例如。 <input type="text" maxlength="2" class="input-mini" name="noobs">
应该解决问题。
答案 4 :(得分:0)
我举了一个例子,你应该可以用它来解决你的问题。
<?php
$foo = array('1','2','3');
$bar = array('4','5','6');
// Simulates the $_POST variable
$baz = array('foo'=>$foo, 'bar'=>$bar);
// You should ensure that all entries have an equal length before iterating through!
if(count($baz['foo']) === count($baz['bar'])){
foreach($baz['foo'] as $key=>$value){
$x = (int)$value;
$y = (int)$bar[$key];
var_dump($x, $y);
}
}
?>
您遇到的问题是,即使您正在循环$_POST['classtoupdate']
,您仍在使用$_POST['allbookings']
和其他仍为数组的字段。
如果数组不为空,则将数组转换为整数值将始终返回1。所以你必须从中提取值。