-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

1
 <?PHP
if(isset($_POST['submit']))
{
    include_once 'includes\functions.php';
    connect();

// your rest of the code

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

}

   ?>

并将此代码保留在<html>标签之外,但在它之前

于 2013-09-24T12:14:42.673 回答
0

如果您只想坚持使用 PHP,那么我可以看到的一个错误是

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

查询,这意味着插入查询将首先执行,这将首先将数据存储在数据库中,然后进行验证......所以将验证代码保持在 INSERT 语句之上......第二件事是在验证每个 之后使用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 回答
0

首先,您的查询会在您验证表单之前执行。

在你之后移动你的 SQL

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

并用

if(!$errors){}

如果有任何错误,这将阻止您的查询被执行。(您也可以删除变量的第一个分配)

关于您的电子邮件问题,用简单的消息测试您的连接

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

如果您收到任何错误,可能是您的邮件服务器设置不正确

于 2013-09-24T12:12:12.047 回答