簡體   English   中英

PHP電子郵件已發送確認鏈接但確認鏈接無效

[英]PHP email sent with confirmation link but confirmation link not working

我在一個文件中生成並發送了一封電子郵件,該電子郵件中的鏈接鏈接到我的確認頁面,然后根據他們的選擇將用戶名稱移動到數據庫表中。 問題是我完全沒有從確認頁面得到任何東西,即使我只使用一個簡單的打印語句而沒有別的。 我一直試圖找出它,但沒有用,錯誤報告也返回空白。 這里有兩個文件:

email.php(完全有效)

<?php 

$link= mysql_connect(...............); //Establish connection to the MySQL server

if (!$link) {
die('Could not connect: ' . mysql_error());
}

mysql_select_db(.....);

$confirm = md5(uniqid(rand()));
$position = $_POST['position'];
$team_name = $_POST['team_name'];
$zip_code = $_POST['zip_code'];
$userId = $_POST['userId'];

$s=mysql_query("SELECT Coach, TeamId FROM TEAM WHERE TEAM.Name = '$team_name' AND TEAM.Zip     ='$zip_code'") OR die ("Error 1"); //Get result from query

while($row=mysql_fetch_assoc($s))
{ 
$coachId = $row['Coach'];
$teamId = $row['TeamId'];   
}

$l=mysql_query("SELECT Name, Email FROM USER WHERE USER.UserId = '$userId'") OR die ("Error 3");     //Get result from query

while($row = mysql_fetch_assoc($l))
{
$user_name = $row['Name'];
$user_email = $row['Email'];
}

$q=mysql_query("SELECT Name, Email FROM USER WHERE USER.UserId = '$coachId'") OR die ("Error 4"); //Get result from query

while($coach=mysql_fetch_assoc($q))
{
 $to = $coach['Email']; 
 $name = $user_name;
 $subject = "Scoutlet $position Request for The $team_name"; 

 if($position == "Head Coach")
 {
    $message = "$name has requested to become the Head Coach for the $team_name."; 
    $message .= "\n\nClick on the following link to give $name permission to be the Head Coach of the $team_name (Located in the ZIP code $zip_code).\n\n";
    $message .="<a href=\"http://web.***.***/~***/confirmation.php?key=$confirm\">Click Here to make $name the Head Coach</a>";
 }
 else
 {
     $message = "$name has requested to become a Score Keeper for the $team_name.";
     $message .= "\n\nClick on the following link to give $name permission to be a Score Keeper for the $team_name (Located in the ZIP code $zip_code).\n\n";
     $message.="http://web.***.***/~***/confirmation.php?key=$confirm"; // way to prevent no spam, dont use txt

 }

 $headers = "From: ***"; 
 $headers .= 'MIME-Version: 1.0' . "\r\n";
 $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
 $sent = mail($to, $subject, $message, $headers) ; 

 if($sent)
 {
    print "sent"; 
 }
 else 
 {
    print "fail"; 
 }
 }
 $sql=mysql_query("INSERT INTO CONFIRMATION(ConfirmationNumber, UserId, Email, TeamId, TeamName, Position)VALUES('$confirm', '$userId','$user_email','$teamId', '$team_name', '$position')") OR die ("Error 2"); //Get result from query

 mysql_close();
 ?> 

confirmation.php

<?
  ini_set('display_errors',1); 
 error_reporting(E_ALL);
$confirm = $_GET['key'];

$link= mysql_connect(***********); //Establish connection to the MySQL server

if (!$link)
{
    die('Could not connect: ' . mysql_error());
}
echo "connect4e";

mysql_select_db(**********);

$sql1=mysql_query("SELECT * FROM CONFIRMATION WHERE ConfirmationNumber ='$confirm'") OR die ("Fail 1");

    while($row=mysql_fetch_assoc($sql1))
    {
        $userId= $row['UserId'];
        $user_email = $row['Email'];
        $teamId = $row['TeamId'];
        $team_name = $row['TeamName'];
        $position= $row['Position'];
    }

    $sql2= mysql_query("INSERT INTO USER (Role) VALUES ('$position') WHERE UserId ='$userId'") OR die ("Fail 2");

    if($position =="Head Coach")
    {
        $sql3= mysql_query("INSERT INTO TEAM (Coach) VALUES ('$userId') WHERE TeamId ='$teamId'") OR die ("Fail 3a");
    }
    else
    { // do a check earlier on to see if the user is already a score keeper for that team
        $sql3= mysql_query("INSERT INTO SCOREKEEPS_FOR (ScoreKeeper, Team) VALUES ('$userId', '$teamId')") OR die ("Fail 3b");
    }

    $to= $user_email;           
    $subject="Welcome to Our Site";
    $headers = "From: ******"; 
    $message="Congratulations, you have been confirmed as a $position for The $team_name.";

    $sent = mail($to,$subject,$message,$header);
    if(sent)
    {
        $sql4=mysql_query("DELETE FROM CONFIRMATION WHERE ConfirmationNumber = '$confirm'") OR die ("Fail 5");
    }
    else
    {
        print "fail";
    }

?>

我已經殺了大量的時間只是試圖錯誤檢查這是一種浪費,所以希望更多的眼睛將有助於更快地解決它。 任何幫助或建議都會很棒。 提前致謝

if(sent) >>should be>> if($sent)

可能是你的服務器只用起始標簽執行php

<?php

代替

<?

http://us2.php.net/manual/en/language.basic-syntax.phptags.php

PHP還允許使用短標簽(不鼓勵這些標簽,因為它們僅在使用short_open_tag php.ini配置文件指令啟用時才可用,或者如果PHP配置了--enable-short-tags選項。

在您的confirmation.php中,您使用的是短開標簽<? ... ?> <? ... ?> 確保你的php短開標簽已啟用或只是使用<?php ... ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM