2011-07-17 51 views
1

我有这种形式包含动态表:php MySql UPDATE不工作?

<form action="<?php echo $editFormAction;?>" method="post" name="form1"> 
<input type="hidden" value="<?php echo (int) $_GET['a'];?>" name="pat_id"> 
<table> 
<tr> 
<th>#</th> 
<th>ORDER DESC</th> 
<th>STATUS</th> 
<th>SENDING DATE</th> 
<th>DELIVERING NO</th> 
<th>DELIVERING DATE</th> 
<th>COMMENT</th> 
</tr> 
<?php do { ?> 
<tr> 
    <td><?php echo $row_medi['order_no']; ?></td> 
    <td><?php echo $row_medi['ORDER_DESC']; ?></td> 
    <td><select name="mydropdown[<?php echo $row_medi['order_no']; ?>]"><option value="Undelivered">Undelivered</option><option value="Delivered">Delivered</option></select></td> 
    <td><?php $sqldate=date('d-m-Y',strtotime($row_medi['SENDING_DATE'])); 
      echo $sqldate; ?></td> 
    <td><?php echo $row_medi['DELIVERING_NO']; ?></td> 
    <td><?php $sqldate=date('d-m-Y',strtotime($row_medi['DELIVERING_DATE'])); 
      echo $sqldate; ?></td> 
    <td><?php echo $row_medi['COMMENT']; ?></td> 
</tr> 
<?php } while ($row_medi = mysql_fetch_assoc($medi)); ?> 
</table> 
<input type="submit" value="Save" /> 
<input type="hidden" name="MM_insert" value="form1"> 
</form> 

当你看到有一个与各行的下拉菜单,我想从任何该下拉菜单的更新与选择的值孔列。没有错误消息出现,但点击保存按钮后,选定的行不会更新?这是更新代码:

$editFormAction = $_SERVER['PHP_SELF']; 
if (isset($_SERVER['QUERY_STRING'])) { 
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); 
} 
if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 
$pat_id = (int) $_POST['pat_id']; 
$updateSQL = sprintf("UPDATE orders SET STATUS=%s, pat_id=%s WHERE order_no=%s", 
        GetSQLValueString($_POST['mydropdown'], "text"), 
        GetSQLValueString($_POST['pat_id'], "int"), 
        GetSQLValueString($_POST['order_no'], "int")); 

mysql_select_db($database_PPS, $PPS); 
$Result1 = mysql_query($updateSQL, $PPS) or die(mysql_error()); 

$updateGoTo = "Pharmacy.php?a=$pat_id"; 
if (isset($_SERVER['QUERY_STRING'])) { 
$updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 
$updateGoTo .= $_SERVER['QUERY_STRING']; 
} 
header(sprintf("Location: %s", $updateGoTo)); 
} 
+0

你是什么意思“任何这种下降的更新与选择的值孔列下拉菜单'?每行的选择名称相同,因此$ _REQUEST ['mydropdown']是下拉列表的最后一行值? – regilero

+0

当我尝试echo($ choice)时,所选选项的值也不会显示!我如何解决这个问题? – 7kemZmani

回答

1

首先,你应该检查安全问题,整个代码,但是这可能会在第二个步骤来完成。尝试始终使用整数并将结果作为预期的int进行投递。对于$pat_id,并在视图脚本而不是<?php echo $_GET['a'];?><?php echo (int) $_GET['a'];?>。但这是另一个问题。

$pat_id尚未初始化你的服务器端代码,但也许你错过了在复制/粘贴,否则你就需要做:

$pat_id = (int) $_POST['pat_id']; 

如果我的理解以及你有几行,每个人都有一个下拉菜单。您需要为每一行标识不同的名称。因此,而不是:

<select name="mydropdown"> 

你应该有

<select name="mydropdown[<?php echo $row_medi['order_no']; ?>]"> 

使每一行中,你会得到这样的:

<tr><td>42</td>(...)<select name="mydropdown[42]">(...)</tr> 
<tr><td>43</td>(...)<select name="mydropdown[43]">(...)</tr> 

而在服务器端,您会得到$_POST['mydropdown']数组的值,其中order_no作为索引。否则$_POST['mydropdown']只包含最后一个选择值。 之后,我不明白到底想要做什么,但是您可能需要做几次更新,每次更新order_no

编辑: 这是代码的当前的最新版本:

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 
    mysql_select_db($database_PPS, $PPS); 
    $pat_id = (int) $_POST['pat_id']; 
    foreach ($_POST['mydropdown'] as $order_no => $choice) { 
     $updateSQL = sprintf("UPDATE orders SET STATUS=%s, pat_id=%s WHERE order_no=%s", 
      GetSQLValueString($_POST['mydropdown'],"text"), 
      GetSQLValueString($_POST['pat_id'], "int"), 
      GetSQLValueString($_POST['order_no'],"int")); 
     $Result1 = mysql_query($updateSQL, $PPS) or die(mysql_error()); 
    } 
} 

这是我写的,现在这样做,也许不值得一STCK溢出问题,也许只是看了你的代码一个安静的envirronment,仔细想想你想要什么,你有什么(使用print_r($_POST);die('aaarg');调试):

if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { 
    mysql_select_db($database_PPS, $PPS); 
    $pat_id = (int) $_POST['pat_id']; 
    foreach ($_POST['mydropdown'] as $order_no => $choice) { 
     $updateSQL = sprintf("UPDATE orders SET STATUS=%s, pat_id=%s WHERE order_no=%s", 
      GetSQLValueString($choice,"text"), 
      GetSQLValueString($pat_id, "int"), 
      GetSQLValueString($order_no,"int")); 
     $Result1 = mysql_query($updateSQL, $PPS) or die(mysql_error()); 
    } 
} 
+0

我按照你提到的编辑代码。并且正在尝试执行的操作是使用任何此下拉列表中的选定选项来更新该行(它已经来自数据库)。 – 7kemZmani

+0

@Adudulah Al-Jeffery:“用任何选项编辑行”是什么意思?你想抓住一行被选中?你想做一个随机更新?真的我不明白你想要什么 – regilero

+0

不,它很简单只是我从数据库中检索到的表中的每一行都包含这个drodown列表,当用户从表中的任何列表中选择选项并点击'保存'已更改的行时(他从中选择选项)已更新。希望现在清楚:) – 7kemZmani