0

データベースにストレージ データを保存するための crud アプリを設計しています。PHP、mySQL (XAMPP の助けを借りて) を使用します。ただし、フォームで「送信」をクリックすると、関数が正常に実行されているように見えますが (php ページに成功メッセージが表示されます)、この問題が発生し続けますが、実際のデータベースを見ると、行がいっぱいになります送信をクリックしたときにフォームの内容に関係なく、3 つのフィールド (最初の 1 つと最後の 2 つ) が「0」になっています。そして、他の 2 つの列には何も含まれていません。

フォームのコードは次のとおりです。

<div id="newprojform">
  <fieldset><legend>Create New Project</legend>
    <form action='projectadded.php' name="addnewproject"  onsubmit="return(validate());">
      <div id="newprojfields"><br />
        Project Name: 
        <div class="field">
          <input type="text" name="projname" size="50">
        </div>
        <br /><br />
        Customer: 
        <div class="field">
          <input type="text" name="custname" size="50">
        </div>
        <br /> <br />
        Move ID: 
        <div class="field">
          <input type ="text" name="moveID" size="50"> 
        </div>
        <br /><br />
        <label for="unit">Unit of Measurement: </label>
        <div class="field" id="uomdd">
          <select id="unit" name="unit">
            <option value="Select">Select</option>
            <option value="CWT">CWT</option>
            <option value="Vault">Vault</option>
            <option value="SqFt">SqFt</option>
            <option value="Pallet">Pallet</option>
            <option value="Piececount">Piece Count</option>
          </select>
        </div>
        <br /><br />
        Cost Per Unit: 
        <div class="field">
          <input type="text" name="cost" size="50">
        </div>
        <br /> <br />
        <input type="submit" value="Add Project" id="submit"><br />
      </div>
  </form></fieldset>

</div> 

そして、ここにphpがあります

<?php 
$con=mysqli_connect("localhost","root","", "storagelog");  
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="INSERT INTO newproject (moveid, projectname, customername, UoM, PPU)
VALUES
('$_POST[moveID]','$_POST[projname]','$_POST[custname]','$_POST[unit]','$_POST[cost]')";

if(!mysqli_query($con,$sql))
{
    die ('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

誰が私が間違っているのか教えてもらえますか? フォームの構文と名前を何百万回も調べましたが、「送信」をクリックするたびに、行にゼロが含まれているか、まったく含まれていない行が表示されます。これはすべて私にとって非常に新しいことなので、ばかげた、または不格好な間違いがたくさんあると予想していますが、これほど行き詰まったのは初めてです..

どんな助けでも大歓迎です。

4

3 に答える 3

1

問題は、フォームのメソッドとして POST を指定していないのに、$_POST 変数からフォーム変数を読み取ろうとしていることです。このスレッドを参照してください:デフォルトのフォーム HTTP メソッドとは何ですか? フォームのデフォルトについては、これを修正するには、フォームを次のように変更するだけです。

<form action='projectadded.php' name="addnewproject"  onsubmit="return(validate());" method="POST">

入力をデータベースに入れる前にサニタイズするなど、ここで変更すべき点が他にもいくつかありますが、それらは問題の根本ではありません。

于 2013-07-20T03:52:47.800 に答える
1

だからまず最初に。データベースを処理する場合 (もちろん本番環境で)、フィルター処理されていない $_POST および $_GET 変数を使用することはお勧めしません。

次に、フォーム要素を使用する場合、post メソッドを使用するか、get メソッドを使用するかを指定する必要があります。

<form action="location_of_file.php" method="POST">

また、テーブルの列名が SQL 挿入構文の名前と完全に一致することを確認してください。

挿入されるかどうかを確認するために、次のことを試してみてください。

$sql="INSERT INTO newproject (`moveid`, `projectname`, `customername`, `UoM`, `PPU`)
  VALUES ('" . $_POST["moveID"] . "','" . $_POST["projname"] . "','" . $_POST["custname"] . "','" . $_POST["unit"] . "','" . $_POST["cost"] . "')";

場合によっては、SQL が扱いにくいことがあります。

笑、ダン... seanmkは私を打ち負かしました。私たちが提案したことがうまくいった場合は、彼が最初に投稿したので、彼の答えを選択してください.

于 2013-07-20T03:54:41.500 に答える
1

今後の参考のために(他の回答の優れたアドバイスは別として)、 $sql を印刷して、実際の挿入ステートメントがどのように見えるかを確認することを検討してください。値が空の文字列であることがすぐにわかり、$_POST を追跡して、空の文字列が到着する理由を確認する必要があることがわかります。

于 2013-07-20T04:01:51.340 に答える