0

1 つの送信ボタンを使用して、データベース内のデータを更新し、電子メールを送信しています。ただし、データはデータベースに保存されていません。コードは次のようになります。

<?php
    if(isset($_POST['order_status']))
    {
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass);
    if(! $conn )
    {
    die('Could not connect: ' . mysql_error());
    }

    $orderno =$_POST['order_no'][$i];
    $status =$_POST['order_status'][$i];
    print_r($_POST['order_no']);
    $sql = 'UPDATE Orders SET status="' . $_POST['order_status'] . '" WHERE   Orderno="' .    $_POST['order_no'] . '"';

    mysql_select_db('PurchaseOrders');
    $retval = mysql_query( $sql, $conn );
    if(! $retval )
    {
    die('Could not update data: ' . mysql_error());
    }
    echo "Updated data successfully\n";
    mysql_close($conn);
    }
?>
<?php
    if(isset($_POST['order_selected']))
    {
    $keys = array_keys($_POST['order_selected']);

    foreach($keys as $key)
    {
        $to = $_POST['order_requested_by'][$key];
        $subject = "Order Form Approval";
        $message = "Your purchase order number: " . " " . $_POST['order_no'][$key] ."    ". "is" ." ". $_POST['order_status'][$key] ;
        $headers = "From: noreply@somewhere.com";
        $sent = mail($to, $subject, $message, $headers) ;
        if($sent)
        {header( 'Location: http://localhost/test/../' ) ; }
        else
        {print "We encountered an error sending your mail"; }
    }
}
?>

私のフォームでは、入力フィールドは次のようになります。

 echo '<td><input type="text" readonly=true name="order_supplier['.$i.']" value="' .    $row['Supplier'] . '"/></td>';
    echo '<td><input type="text" readonly=true name="order_total_price['.$i.']" value="' . $row['totalprice'] . '"/></td>';
    echo '<td><input type="text" readonly=true name="order_requested_by['.$i.']" value="' . $row['requestedby'] . '"/></td>';
    echo '<td>';
    echo '<select name="order_status['.$i.']" id="id" onchange="showUser(this.value)" >';
    echo '<option value = "Pending"   name="order_status['.$i.']" class = "pending"' . ($row['status'] == 'Pending' ? ' selected=selected' : '') . '>Pending</option>';
echo '<option value = "Approved"  name="order_status['.$i.']" class = "approved"' .     ($row['status'] == 'Approved' ? ' selected=selected' : '') . '>Approved</option>';
    echo '<option value = "Disapproved" name="order_status['.$i.']" class     ="disapproved"' . ($row['status'] == 'Disapproved' ? ' selected=selected' : '') . '>Disapproved</option>';
    echo '</select>';

なぜこれが壊れているのか、私には本当にわかりません。[送信] をクリックすると、データがデータベースに正常に入力されたことを示すメッセージが表示されます。ただし、データは入力されません。どうもありがとう

4

3 に答える 3

1

まあ、私はそれがエラーをスローしていないことに驚きました..

echo '<select name="order_status['.$i.']" id="id" onchange="showUser(this.value)" >

言う

それ$_POST['order_status']は配列です..

したがって、$sql をエコーアウトすることをお勧めします。そうすれば、考えていたレコードが更新されない理由がわかると思います。

読むべきだと思います

$sql = 'UPDATE Orders SET status="' .$status  '" WHERE   Orderno="' .$orderno ' . '"'; 
于 2012-09-20T14:41:33.083 に答える
0

$_POST['order_no'] が配列の場合、クエリは不正な形式になります。これは、配列であるすべての postdata に適用されます。つまり、html に次のようなものがある場合です。

<input type="text" name="order_no[]" />
<input type="text" name="order_no[]" />
<input type="text" name="order_no[]" />

次に、 $_POST['order_no'] には複数の値と SQL 文字列があります。

$sql = 'UPDATE Orders SET status="' . $_POST['order_status'] . '" WHERE   Orderno="' . $_POST['order_no'] . '"';

正しいSQLではありません。

于 2012-09-20T15:05:04.487 に答える
0

SQL ステートメントの「/」の使用法が正しくありません。

値は " ではなく ' で囲む必要があります。

クエリで変数を削除すると...

UPDATE Orders SET status="order_status" WHERE   Orderno="order_no"

実際には次のようになります。

UPDATE Orders SET status='order_status' WHERE   Orderno='order_no'

クエリを次のように変更します。

$sql = "UPDATE Orders SET status='" . $_POST['order_status'] . "' WHERE   Orderno='" .    $_POST['order_no'] . "'";
于 2012-09-20T14:58:17.857 に答える