2012-05-13 14 views
-2

可能性の重複:
strange php error
Submit an HTML form with empty checkboxes
PHP form checkbox and undefined index未定義のインデックス - PHPのMySQLの

何らかの理由で、私は次のコードでは、未定義のインデックスエラーを取得しています。どんな助けもありがとう。ここで私は

Notice: Undefined index: username in C:\xampp\htdocs\register.php on line 5 
Notice: Undefined index: password in C:\xampp\htdocs\register.php on line 6 
Notice: Undefined index: firstname in C:\xampp\htdocs\register.php on line 7 
Notice: Undefined index: surname in C:\xampp\htdocs\register.php on line 8 

コードRecievingていますエラーです。(それは別のページのアクションでない限り)初めて

<?php 
mysql_connect("localhost", "root", "") or die(mysql_error()); 

mysql_select_db("clubresults") or die(mysql_error()); 
    $username = $_POST['username']; 
    $password = md5($_POST['password']); 
    $firstname = $_POST['firstname']; 
    $surname = $_POST['surname']; 

    $sql = "INSERT INTO members (Username, Password, Firstname, Surname) VALUES ($username, $password, $firstname, $surname);"; 

    mysql_query($sql); 

?> 

<html> 
     <div class="content"> 
     <center> 
     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
      <table border="0"> 
      <tr><td colspan=2><h1>Register</h1></td></tr> 
      <tr><td>Username:</td><td> 
      <input type="text" name="username" maxlength="60"> 
      </td></tr> 
      <tr><td>Password:</td><td> 
      <input type="password" name="password" maxlength="10"> 
      </td></tr> 
      <tr><td>Firstname:</td><td> 
      <input type="text" name="firstname" maxlength=210"> 
      </td></tr> 
      <tr><td>Surname:</td><td> 
      <input type="text" name="surname" maxlength=210"> 
      </td></tr> 
      <tr><th colspan=2><input type="submit" name="submit" 
      value="Register"> </th></tr> </table> 
     </form> 
     </center> 
     </div> 
</html> 
+7

古くからの新しいmysql_ *関数で新しいコードを書くのをやめてください。それらはもはや維持されず、コミュニティは[非推奨プロセス](http://goo.gl/KJveJ)を開始しました。代わりに、[準備完了ステートメント](http://goo.gl/vn8zQ)について学び、[PDO](http://php.net/pdo)または[MySQLi](http://php.net/)を使用する必要があります。 mysqli)。あなたが決定できない場合、[この記事](http://goo.gl/3gqF9)が選択に役立ちます。あなたが覚えていれば、[こちらはPDO関連の良いチュートリアルです](http://goo.gl/vFWnC)。 – vascowhite

+0

解決策をリンクされた質問にチェックすると、おそらく役に立ちます。 – vascowhite

+1

あなたのコードは、それらの値が存在することを前提としています。フォームが投稿されると、フォームになります。しかし、ページが最初に読み込まれると、それらは表示されません。 'isset()'関数を調べて、その値を使用しようとする前に配列の値が存在するかどうかを確認してください。 – David

答えて

2

ページの読み込みは、REQUEST_METHODが「GET」です。その結果、POST変数は存在しません(ただし、$ _POSTスーパーグローバルが存在します)。
別のページまたは同じページからPOSTすると、フォームに設定されているすべてのデータが$ _POSTスーパーグローバルに存在し、以前にアクセスした方法でアクセスできます。残念ながら、データが存在せず、そのデータにアクセスしようとすると、あなたのものと同様に、エラーがスローされます。それらのデータが存在しない場合は、それと

 
    if (isset($_POST["username"])) 
    { 
     // do whatever 
    } 
    if (isset($_POST["password"])) 
    { 
     // do whatever 
    } 
    if (isset($_POST["firstname"])) 
    { 
     // do whatever 
    } 
    if (isset($_POST["surname"])) 
    { 
     // do whatever 
    } 

のようなものを使用して、フォームと同じページに投稿したい場合は特に、あなたのコードがエラーをスローしません、問題を解決するために

希望に役立ちます。
関連していない重要なメモで、mysql_ *関数をもう使用しないでください。彼らは廃止されました。データアクセスにはmysqliまたはPDO関数を使用します。


ハッピーコーディング!

+0

のアクションを作成して、私が間違っていれば修正しますが、 'if($ _POST [" username "]) 「良くなる? – Sliq

+1

いいえ、$ _POST ["username"]が利用可能であると仮定しているためです。 'username'が利用できない場合、エラーはスローされます。 'isset($ _ POST [" username "])'はエラーがスローされるのを防ぎます –

関連する問題