-2

管理者がユーザーのユーザー アカウントを作成できる管理ページを作成しています。フォームが完了したら、[送信] をクリックすると、ユーザーに電子メールが送信される必要があります (選択したアカウントの ID と名前を含む)。同じアクションで、フォームも最初に検証する必要があり、検証でエラーが発生した場合は、データをデータベースに送信しないでください。これは何も起こっていませんが、その理由はわかりません。

  • メールが送信されていない、
  • エラーが発生した場合でも、ページの読み込み時にデータがデータベースに挿入されます。
  • 送信ボタンがクリックされていない場合でも、すべてのフォーム フィールドに対してエラーが表示されます。

可能なソース/チュートリアルへのヘルプ、アドバイス、またはリンクをいただければ幸いです。

以下は私のコードです:(私はPHP、HTMLでのみ作業しており、MYSQLデータベースを使用していることに注意してください)

<html>
<head>
    <title>
        User Registration
    </title>
    <?PHP


    include_once 'includes\functions.php';
    connect();

    error_reporting(E_ERROR | E_PARSE);


//Assign variables
    $accounttype=mysql_real_escape_string($_POST['accounttype']);
    $sname = mysql_real_escape_string($_POST['sname']);
    $fname = mysql_real_escape_string($_POST['fname']);
    $email = mysql_real_escape_string($_POST['email']);
    $address = mysql_real_escape_string($_POST['address']);
    $contact_flag = mysql_real_escape_string($_POST['contact_flag']);


//Validating form(part1)        

    $error='';          


//Connect to database                   
        $SQL=
            "INSERT INTO student 
                        (
                            sname,fname,email, address, contact_flag
                        ) 
            VALUES 
                        (

                        '$sname', '$fname', '$email', '$address', '$contact_flag' 
                        )
            ";
        if (!mysql_query($SQL))
            {
                print'Error: '.mysql_error();
            }

        mysql_close($db_handle);
//Validate form(part 2)
    if (isset($_POST['sname'], $_POST['fname'],$_POST['email'],$_POST['address']));
        {
            $errors=array();


                $accounttype= mysql_real_escape_string($_POST['accounttype']);
                $sname = mysql_real_escape_string($_POST['sname']);
                $fname = mysql_real_escape_string($_POST['fname']);
                $email = mysql_real_escape_string($_POST['email']);
                $address = mysql_real_escape_string($_POST['address']);
                $contact_flag = mysql_real_escape_string($_POST['contact_flag']);

// form validation
                        if(strlen(mysql_real_escape_string($sname))<1)
                        {
                            $errors[]='Your surname is too short!';
                        }

                        if(strlen(mysql_real_escape_string($fname))<1)
                        {
                            $errors[]='Please insert you full first name';
                        }


                        if(filter_var($email, FILTER_VALIDATE_EMAIL)===FALSE)
                        {
                            $errors[]='Please insert your valid email address';
                        }
                        if(strlen(mysql_real_escape_string($address))<8)
                        {
                            $errors[]='Please insert your postal address';
                        }

                            echo'<pre>';
                            print_r($errors);
                            echo'</pre>';
        }


//confirmation email

    // Subject of confirmation email.
        $conf_subject = 'Registration confirmed';

    // Who should the confirmation email be from?
        $conf_sender = 'PHP Project <my@email.com>';

    $msg = $_POST['fname'] . ",\n\nThank you for registering. \n\n You registered for account:".$accounttype."\n\n Your account number:".mysql_insert_id;

        mail( $_POST['email'], $conf_subject, $msg, 'From: ' . $conf_sender );



   ?>
</head>
<body>


    </br>
    <form name ="form0" Method="POST" Action="<?PHP echo $_SERVER['PHP_SELF']; ?>">
    </br>
        </br>
        <b>Select the course you wish to register for:</b></br>
                <select   name="accounttype">
                    <?PHP query() ?>

                </select>   
                    <?PHP close() ?>


    </form>


    <form name ="form1" Method="POST" Action="<?PHP echo $_SERVER['PHP_SELF']; ?>">

        </br>
        </br>
        <Input type ="" Value = "Surname" Name = "sname"></br>
        <Input type ="" Value = "First name" Name = "fname"></br>
        <b>Email:</b> <Input type ="" Value = "" Name = "email"></br>
        <b>Address:</b> </br>
        <textarea rows="4" cols="20" Name="address">Please provide your postal address here </textarea></br>
        <b>Tick to receive confinmation email:</b> <Input type ="checkbox" Value = "1" Name = "contact_flag"></br>

        <Input type = "Submit" Value="Submit">

    </form>





</body>
</html>
4

3 に答える 3

0

まず、フォームを検証する前にクエリが実行されます。

次の後にSQLを移動します

echo'<pre>';
print_r($errors);
echo'</pre>';

そしてそれを囲みます

if(!$errors){}

これにより、エラーが発生した場合にクエリが実行されなくなります。(変数の最初の割り当てを削除することもできます)

メールの問題については、簡単なメッセージで接続をテストしてください

mail('your@email.com', 'subject', 'message');

エラーが発生した場合は、メールサーバーが正しく設定されていない可能性があります

于 2013-09-24T12:12:12.047 に答える
0

もしあなたがPHPだけに固執したいのなら、私が見ることができる1つのエラーは

that you have kept the **validation code below the `INSERT`** 

クエリは、挿入クエリが最初に実行され、最初にデータベースにデータが保存され、次に検証が行われることを意味します...したがって、検証コードをINSERTステートメントの上に置いてください.. そして2番目exit()に、すべての検証後にメソッドを使用しますフィールドでエラーが発生した場合...検証中にいずれかのフィールドでエラーが発生した場合、残りのphpコードの実行が停止されます....また、終了メソッドが見つかった場合、データがデータベースに保存されるのを防ぎます。エラーが見つかった

 if(strlen(mysql_real_escape_string($sname))<1)
                        {
                            $errors[]='Your surname is too short!';
                           echo '//whatever you want to echo';
                           exit();
                        }

                        if(strlen(mysql_real_escape_string($fname))<1)
                        {

                            $errors[]='Please insert you full first name';
                         echo '//whatever you want to echo';
                         exit();
                        }
于 2013-09-24T11:13:25.973 に答える