0

無料サービスでメールを変更するための小さなスクリプトを作成しようとしています。ユーザーは名前やパスワードなどで登録されています。私が欲しいのは、PHPスクリプトを使用してデータベースにメールを変更するためのWebフォームを追加することです。これにより、確認プロセスでメールを古いメールに変更できます。それはどのように機能する必要がありますか?

ユーザーがいくつかのサイトにアクセスして(ログインして)[電子メールの変更]をクリックすると、古い電子メール、新しい電子メール、そして再び新しい電子メールのフィールドが表示されます2。古い電子メールが実際にデータベース内の古い電子メールであるかどうかのチェックがあります。newemailはnewemail2と同じです。私はここで電子メールなどの有効性についていくつかのチェックを行いました:

    if ($auth->isLogged())
{
    if(!empty($email))
    {
        if ($this->checkEmail($mail))
        {           
            $this->db->selectDb("login");            
            if (!mysql_result(mysql_query("SELECT COUNT(id) FROM account WHERE email='".$mail."'"), 0) > 0)
            {

私はスクリプトを作成しました-これは、次のようなphp自己関数を使用して1ページにデータベースとサイトでphp変更メールを使用します。

$login_db_new_connect = mysql_connect($logindb[db_host],$logindb[db_username],$logindb[db_password]);
$selectdb = mysql_select_db($logindb[db_name],$login_db_new_connect); 
    if ($_GET[h] && $_GET[h] != '' && $_GET[h] != '0')
    {
        $emailz = $newemail1;
        $query = mysql_query("SELECT username FROM `account` WHERE reset_email='$_GET[h]'");
        $res = mysql_fetch_array($query);
        $check = mysql_query("SELECT email FROM `account` WHERE reset_email='$_GET[h]'");
        $ress = mysql_fetch_array($check);
        $check1 = mysql_query("SELECT reset_email2 FROM `account` WHERE reset_email='$_GET[h]'");
        $resss = mysql_fetch_array($check1);
        $emailz = $resss[reset_email2];

        if (mysql_num_rows($query) == 1)
        {
            echo "<b>E-mail was changed.</b>";
            $to = $ress[email];
            $headers = "Headers here";  
            $message = "Email has been Changed (more text to come later)";
            mail($to, '', $message, $headers);
            mysql_query("UPDATE account SET email='$emailz' WHERE reset_email='$_GET[h]'") or die ('query change ...');
            mysql_query("UPDATE account SET reset_email='', reset_email2='' WHERE username='$res[username]'") or die ('query ...');
        }
        else
        {
            echo "<b>Error not changed.</b>";     
        }
    }
    else
    {  
        $oldemail = addslashes($_POST["oldemail"]);
        $newemail1 = addslashes($_POST["newemail1"]);
        $newemail2 = addslashes($_POST["newemail2"]);
        if ($oldemail == "" || $newemail1 == "" || $newemail2 == "")
        {
            $reason =  "
            <form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">
            <table width=\"310\">
            <tr><td>Old e-mail:</td><td><input type=\"email\" name=\"oldemail\"></td></tr>
            <tr><td>New e-mail:</td><td><input type=\"email\" name=\"newemail1\"></td></tr>
            <tr><td>New e-mail again:</td><td><input type=\"email\" name=\"newemail2\"></td></tr>
            <tr><td align=\"center\" colspan=\"2\"><br><input type=\"submit\" value=\"Change e-mail\">
            </table>
            </form>";
        }
        else
        {   
            $login_db_new_connect = mysql_connect($logindb[db_host],$logindb[db_username],$logindb[db_password]);
            $selectdb = mysql_select_db($logindb[db_name],$login_db_new_connect);
            $queryy = mysql_query("SELECT username FROM `account` WHERE id='$id'");
            $resu = mysql_fetch_array($queryy);  
            $sql = "SELECT * FROM account WHERE email='$oldemail' AND username='$resu[username]'";
            $result = mysql_query($sql);
            $result2 = mysql_num_rows($result);

            if ($result2 !== 1)
            {
                $reason = "Something is wrong";
            }
            else
            {
                if ($newemail1 == $newemail2)
                {
                    $emailz = $newemail1;       
                    $rand = random_string(40);
                    $sql1 = "UPDATE `account` SET reset_email='$rand' WHERE id='$id'";
                    mysql_query($sql1) or die ('query ...');
                    $sql2 = "UPDATE `account` SET reset_email2='$newemail1' WHERE id='$id'";
                    mysql_query($sql2) or die ('query ...');
                    $to = $_POST["oldemail"];
                    $headers = "";  
                    $message = "Activation link: $config[path_to_thisfile]?h=$rand\n\n\n";
                    mail($to, '', $message, $headers);
                    echo "<b>activation link has been sent</b>";
                }
                else
                {                                                                                  
                    echo "<b>wrong input data</b>";
                }
            }
        } 
    }
?>

しかし、電子メールの整合性をチェックして検証し、ユーザーがオンラインであるかどうかをチェックするために、上記のようなチェックがもっと必要です...そしておそらく私のスクリプトは完全にOKではありません:D

だから私は今あなたのアイデアを受け入れています:)ありがとう。

4

1 に答える 1

1

電子メールの検証について、私は使用しています:

// returns TRUE if 'email' is valid
function email_valid($email)
{
   return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email);
}

また、ユーザーテキストをdbに直接書き込む前に、 mysql_real_escape_stringの使用を検討してください。テキストに引用符「、」が含まれている場合があります。

また、dbの混乱がいたるところにあります。可能であれば、この種の安全の要求を減らすことを検討してください

次のようなインラインHTMLチャンクを配置することも検討してください。

$reason =  "
<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">
<table width=\"310\">

他のファイルに入れて、次のように呼び出します。

include("template.php");

重複した引用を避け、将来の混乱を減らすために

于 2012-05-21T09:15:26.780 に答える