2

そのため、実験中のページでフォームを実行しています。Atm 入力は 1 つだけで、それは電子メールです。基本的には登録が必要で、同じメールを再度追加しようとするとエラーメッセージが返され、それ以外の場合は追加されます。

だから、これは私が投稿しているコードです:

<?php
    $username="user";
    $password="pass";
    $database="test";
    $email = mysql_real_escape_string( $_POST['email'] );

    mysql_connect(localhost,$username,$password);
    @mysql_select_db($database) or die( "Unable to select database");

    $query = "SELECT * FROM enroll WHERE email='$email' ";
    $result = mysql_query($query) or die(mysql_error());

    if (mysql_num_rows($result) ) {
        print 'user is already in table';
    }
    else {
        $query = "INSERT INTO enroll VALUES ('','$email')";
        $result = mysql_query($query) or die(mysql_error());       
        print 'user added';
    }
?>

それはうまくいきます!既に存在するメールを追加すると、「ユーザーは既にテーブルにいます」と表示され、そうでない場合は「ユーザーが追加されました」と表示されます。

問題は、入力を検証する別のphpスクリプトを実行する前に、送信時にそれをDBに追加したことです。送信を押す前でも、常に「ユーザーは既にテーブルにいます」と表示されるようになりました。

このようなことをしたいのですが、投稿するとまったく機能せず、何が問題なのかわかりません。

<?php
    //If the form is submitted
    if(isset($_POST['submit'])) {

        // Required field names
        $required = array('email');

        // Loop over field names, make sure each one exists and is not empty
        $error = false;
        foreach($required as $field) {
            if (empty($_POST[$field])) {
            $error = true;
            }
        }

            if ($error) {
                echo 'You forgot to fill in your email';
            } else {
                $username="user";
                $password="pass";
                $database="test";
                $email = mysqli_real_escape_string( $_POST['email'] );

                mysqli_connect(localhost,$username,$password);
                mysqli_select_db($database) or die( "Unable to select database");

                $query = "SELECT * FROM enroll WHERE email='$email' ";
                $result = mysqli_query($query) or die(mysqli_error());

                if (mysqli_num_rows($result) ) {
                    print 'user is already in table';
                }
                else {
                    $query = "INSERT INTO enroll VALUES ('','$email')";
                    $result = mysqli_query($query) or die(mysqli_error());
                    print 'user added';
                }
            }
    }

?>

私の世界では、これは電子メールが提供されているかどうかを確認し、データベースに存在するかどうかを確認し、存在しない場合は追加します。存在する場合は、エラーが返されます。

私は何を間違っていますか?

EDIT2:@ExpertSystemこれは、あなたの推奨に従って私が今行っているコードです:

<?php

        if(isset($_POST['submit'])) {

            // Required field names
            $required = array('email');

            // Loop over field names, make sure each one exists and is not empty
            $error = false;
            foreach($required as $field) {
                if (empty($_POST[$field])) {
                $error = true;
                }
            }

                if ($error) {
                    echo 'You forgot to fill in your email';
                } else {
                    $username="root";
                    $password="root";
                    $host="localhost";
                    $database="test";
                    $email = mysqli_real_escape_string( $_POST['email'] );

                    $link = mysqli_connect(localhost, $username, $password);
                    mysqli_select_db($link, $database) or die("Unable to select database");

                    $query = "SELECT * FROM enroll WHERE email='$email'";
                    $result = mysqli_query($link, $query) or die(mysqli_error($link));

                    if (mysqli_num_rows($result) ) {
                        print 'user is already in table';
                    }
                    else {
                        $query = "INSERT INTO enroll (email) VALUES ('$email')";
                        $result = mysqli_query($link, $query) or die(mysqli_error($link));

                        print 'user added';
                    }
                }
        }
?>
4

3 に答える 3

0

プロシージャ形式の関数を使用しているため、 、、およびの最初の引数としてmysqli リンク識別子mysqli_を渡す必要があります(詳細については、ドキュメントも参照してください)。前述のmysqli リンク識別子は、 によって返されるオブジェクトです。 変更されたコードは次のようになります。mysqli_select_db()mysqli_real_escape_string()mysqli_query()mysqli_error()mysqli_connect()

...
$link = mysqli_connect(localhost, $username, $password);
mysqli_select_db($link, $database) or die("Unable to select database");
$email = mysqli_real_escape_string($link, $_POST["email"]);
...
$result = mysqli_query($link, $query) or die(mysqli_error($link));
...
if...
    ...
} else {
    ...
    $result = mysqli_query($link, $query) or die(mysqli_error($link));
    ...
...
于 2013-05-14T17:06:55.220 に答える
0

ご助力いただきありがとうございます!あなたの助けを借りて、少なくとも悪いコードを改善できたことを願っています。

問題の原因を突き止めたところ、これでした。

<input type="submit">

私はそれをに変更しました

<input type="submit" name="submit">

そしてもちろん、今ではすべてが機能しています。ありがとうございます!:)

于 2013-05-16T09:38:50.007 に答える