php MySql ОБНОВЛЕНИЕ не работает? - PullRequest
1 голос
/ 17 июля 2011

У меня есть эта форма, которая содержит динамическую таблицу:

<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));
}

1 Ответ

1 голос
/ 17 июля 2011

Сначала вы должны проверить весь код на наличие проблем безопасности, но это можно сделать на втором шаге. Старайтесь всегда использовать целые числа и приводить результат как ожидаемое целое число. Для $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'] массив значений с порядковым номером в качестве индекса. Иначе $_POST['mydropdown'] может содержать только последнее выбранное значение. После этого я не понимаю, что именно нужно делать, но вам может потребоваться сделать несколько обновлений, по одному для каждого order_no.

EDIT : Это ваша последняя версия кода:

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, может быть, просто прочитайте ваш код в спокойной обстановке и тщательно обдумайте, что вы хотите и что у вас есть (для отладки используйте 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()); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...