0

ページに 2 つのフォーム (および 2 つの送信ボタン) があり、フォームは INSERT INTO ステートメントの action="" を使用してページをリンクします。INSERT INTO ステートメントの 1 つを次に示します。

<?php
$sql="INSERT INTO panelProduct (length_mm, width_mm, aperture)

VALUES ('$_POST[p_length_mm]','$_POST[p_width_mm]','$_POST[p_aperture]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";
?>

フォームと INSERT ステートメントを同じページに配置した理由の 1 つは、フォームを使用するとユーザーが注文に製品を追加でき、複数の製品が存在する可能性があるためです (したがって、ユーザーは完了するまで送信し続けることができると考えました)。 ...)。もう 1 つの理由は、前のページから送信された $_POST 値を使用して、入力した製品に対して別の処理を行う必要があり、それを複数のページに送信する方法がわからないことです。

とにかく、私が見つけた問題は、ページが更新されるたびに NULL 値を含む新しい行がデータベースに挿入されることです。これは、PHP が上記のステートメントに遭遇するたびに実行するため、私には理にかなっています。したがって、私の質問は、ユーザーがフォームに何かを入力して「送信」した場合にのみ INSERT ステートメントを実行する何らかの条件を作成する方法です。

4

3 に答える 3

1

次のような条件が必要です。

if ('POST' === $_SERVER['REQUEST_METHOD']) {
    // a form was posted
}

もちろん、投稿に実際に正しいものが含まれているかどうかを確認する必要があります。

isset($_POST['p_length_mm'], $_POST['p_width_mm'], $_POST['p_aperture'])

さらに良いのはfilter_input_array()、受信データをサニタイズするために使用することです。現在のコードはSQLインジェクション攻撃にさらされています。PDOormysqliとpreparedステートメントを使用するのが道です。

于 2012-09-03T15:55:23.917 に答える
1

データがフォームから取得されているかどうかを確認する必要があります。このアプローチをお勧めします-送信ボタンに名前を付けます(つまり<input type="submit" name="my_submit_button" value="Whatever" />、挿入コードへのこの条件:

if( isset( $_POST['my_submit_button']) ) {
  .. process your post data
}

また、ユーザーが提供するデータを信頼しないように常に注意してください。期待されるすべてのデータが存在し$_POST、形式が要件に一致するかどうかを確認します (つまり、番号や受け取った文字などを要求します)。すべてのテストに合格したら、データを DB にコミットする準備が整いました。

于 2012-09-03T16:00:56.397 に答える
1

PHP の empty() メソッドを使用して、各変数の null 値をチェックできます。

何かのようなもの:

if(!empty($_POST['p_length_mm']) && !empty($_POST['p_width_mm']) && !empty($_POST['p_aperture']))
{
//execute your query here
}
else
{
//if there's an alternative you would like to happen if values are null, or just leave out.
}

それがうまくいくことを願っています。

于 2012-09-03T16:02:25.493 に答える