-1

else if ロジックのどこが間違っているのかわかりません... このサインアップ スクリプトを 3 つのステップで検証したいと思います。

1 つ目: 空のフィールドがあるかどうかを確認します。空の場合は、errorreg.php と register.php が含まれます。

2 番目: 電子メールが既に存在する場合は、register.php を含めます。

3番目: すべてがうまくいけば、データベースにデータを挿入します。

<?php
    $address =$_POST["add"];
    $password =$_POST["pw"];
    $firstname =$_POST["fname"];
    $lastname =$_POST["lname"];
    $email =$_POST["email"];
    $contact =$_POST["cno"];


    $con=mysql_connect("localhost","root","");
    mysql_select_db("bookstore");
    $q2=mysql_query("select * from customer where email='$email'");
    $b=mysql_fetch_row($q2);
    $em=$b[0];

   if($password != $_POST['pwr'] || !$_POST['email'] || !$_POST["cno"] || !$_POST["fname"] || !$_POST["lname"] || !$_POST["add"])
    {
        include 'errorreg.php';
        include 'register.php';
    }

    else if($em==$email)
    {
        echo 'email already present try another';
        include 'register.php';
    }
    else
    {
        $con=mysql_connect("localhost","root","");
        mysql_select_db("bookstore");
        $q1=mysql_query("insert into customer values('$email','$password','$firstname','$lastname','$address',$contact)");

        echo 'query completed';
        $q2=mysql_query("select * from customer where email='$email'");
        $a=mysql_fetch_row($q2);
        print "<table border =2px solid red> <tr><th>id </th></tr>";
        print "<td>$a[0]</td>";

        print "</table>";
        include 'sucessreg.php';
        echo " <a href='newhome.php'>goto homepage</a>";
    }

?>
4

2 に答える 2

1

まず、 $_POST オブジェクトでプロパティが設定されているかどうかを確認します。

if(isset($_POST["name"])

次に、値セットが空かどうかを確認します

if(isset($_POST["name"] && !empty($_POST["name"]))

すべてのプロパティをチェックするためにスケールアップする必要があるだけです。このような関数に移動すると便利です

function ispostset($post_var)
{
if (isset($_POST[$post_var]))
{
    if ($_POST[$post_var] != '')
    {
        return true;
    }
    else
        return false;
}
else
    return false;
}
于 2012-08-18T20:22:28.380 に答える
1

ここで修正すべきことがたくさんありますが、「ループ」が 2 番目と 3 番目の「ステップ」に進まないという具体的な懸念に対しては、これは間違っていると考えているためです。if/else if/else コード ブロックでは、一度に 1 つのブロックのみが実行され、他のブロックは実行されません。たとえば、ユーザーが数字を送信した場合、次のようにして、それが偶数か奇数かを伝えることができます。

if($_GET['number'] % 2 == 0){
  echo "That's even!";
} else {
  echo "That's odd!";
}

1 つのチェック、次に別のチェック、さらに 3 番目のチェックを実行しようとしています。この場合、条件 (if ステートメント) を次のように入れ子にするのではなく、次のようにします。

if(/* first, basic sanity check*/) {
  if(/* second, more complex check */) {
    if(/* final check */) {
      // Database update
    } else {
      // Failed final check
    }
  } else {
    // Failed second check
  }
} else {
  // Failed basic check
}

コードに関するその他のコメント:

  1. 書式設定に注意してください。一貫した視覚的に明確なパターンでコードをレイアウトすると、間違いを見つけやすくなります。
  2. を使用するisset($_POST['variable'])前に使用してください$_POST['variable']。そうしないと、エラーが発生します。1 つのアイデアは、次のような行を使用することです。 $address = isset($_POST['address']) ? $_POST["add"] : '';- その表記法がわからない場合は、配列$addressの値または設定されていない場合に設定できます。$_POST''
  3. 変数を再度呼び出すのではなく、や のよう$emailに、作成した変数を使用してください。変数名はより明確で短くなります。$contact$_POST
  4. MySQL ライブラリではなく、より優れたMySQLi ライブラリを使用してください。
  5. スクリプトの最初にデータベースへの接続 ( $con = ...) を 1 つ作成し、ここで行っているように後で 2 つ目を作成しないでください。
  6. クエリが実行されている接続を明示的に指定します-あなたは言う$q2=mysql_query("SELECT ...")が、構築した接続も渡す必要があります $q2=mysql_query("SELECT ...",$con).
于 2012-08-18T20:35:59.123 に答える