0

我有一个数字表,用户应该能够在其中编辑值并在提交时更新数据库。

到目前为止,我的错误代码在提交时使用值 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 循环将它们转换为整数,但仍然没有乐趣。

有什么建议吗?

4

5 回答 5

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++;
}
于 2013-08-21T10:18:14.507 回答
0

您的 POST 变量是数组(例如 allspaces[])

所以,这个赋值总是给你 1 作为结果,因为你试图将一个数组转换为整数。

$totalspcs = (int)$_POST['allspaces']; 

你应该循环你的数组并以不同的方式使用数据。如果您不需要数组,请去掉输入名称中的方括号。

于 2013-08-21T10:19:04.017 回答
0

尝试这个:

foreach($_POST['classtoupdate'] as $index => $classes){

$totalspcs = (int)$_POST['allspaces'][$index]; 
$totalbkgs = (int)$_POST['allbookings'][$index]; 
$newbies = (int)$_POST['noobs'][$index];

注意$index每一行中的。

于 2013-08-21T10:21:09.937 回答
0

问题在于您命名输入字段的方式。<input type="text" maxlength="2" class="input-mini" name="noobs[]">[]意味着数据将作为数组发送回服务器,并且您正在将数组类型转换为整数,这就是为什么您在任何地方都会得到 1 作为值。失去[],例如。<input type="text" maxlength="2" class="input-mini" name="noobs">应该解决问题。

于 2013-08-21T10:21:47.233 回答
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。因此,您必须从中提取值。

于 2013-08-21T10:22:41.607 回答