2012-10-09 28 views
0
 $headers = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    $headers .= 'From: [email protected]'; 
    $to = $email; 
    $subject = "Confirmation"; 
    $message = "Hi, $username. You're registred in Site. Link for confirmation:  http://site.com/confirm/**".mysql_insert_id()."**"; 
    mail($to, $subject, $message, $headers); 
    $query = mysql_query("insert into usr_users(username, password, email, avator, pin)   values('$username', '$password', '$email', '$img', '$pin')"); 
    $query2 = mysql_query("insert into usr_confirm(user_name, user_id, active, data) values('$username', '".mysql_insert_id()."', '$active', '$senha')"); 
    echo"Success!</br>"; 

第二mysql_insert_id()(第9行)是正确的!但是第一个mysql_insert_id()(第6行)在电子邮件框中返回0。错误mysql_insert_id()[MAIL TAG]

+2

你不能在第6行调用mysql_insert_id如果你以前没有插入记录 - 我假设你是在插入到' usr_users'? – andrewsi

+0

重新排序你的代码,你会没事的;先运行查询,然后发送电子邮件,该ID将可用; – Ibu

回答

1

manualmysql_insert_id()将返回0如果最后一条语句不产生AUTO_INCREMENT值:

的ID为AUTO_INCREMENT列生成先前查询上 成功,0,如果前面的查询不会生成值为的AUTO_INCREMENT ,如果没有建立MySQL连接,则返回FALSE。

你第一次使用mysql_insert_id()呼叫之前你插入任何记录,所以结果必须是0(除非有这个别的地方在你的代码-t母鸡您预期之前打电话得到扭曲的结果)。尝试移动邮件相关的调用下面插入语句时,让您:

// insert the records 
$query = mysql_query("insert into usr_users(username, password, email, avator, pin)   values('$username', '$password', '$email', '$img', '$pin')"); 
$query2 = mysql_query("insert into usr_confirm(user_name, user_id, active, data) values('$username', '".mysql_insert_id()."', '$active', '$senha')"); 

// send the email 
$headers = 'MIME-Version: 1.0' . "\r\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
$headers .= 'From: [email protected]'; 
$to = $email; 
$subject = "Confirmation"; 
$message = "Hi, $username. You're registred in Site. Link for confirmation:  http://site.com/confirm/**".mysql_insert_id()."**"; 
mail($to, $subject, $message, $headers); 
echo"Success!</br>"; 

如果仍然收到错误此更改后,你需要确认你对usr_confirm表的主键字段是正确的配置为auto_increment。此外,如果设置正确,请尝试将连接变量传递给函数,如mysql_insert_id($conn);,其中$conn是您的mysql_connect()调用的结果。

本网注(没有回答具体的)
你的代码是非常 SQL注入;你不是逃避的任何的值。而不是进入什么SQL注入,我宁愿指导你使用Prepared Statements。

另外,PHP会弃用mysql_方法,转而采用mysqli_PDO方法。这两个支持准备好的声明,我会建议你看看这些。

在此期间,请考虑mysql_real_escape_string()包装的变量,如:

... values ('" . mysql_real_escape_string($username) . "', ... 
+0

我认为问题在于他在插入语句之前调用mysql_insert_id来生成电子邮件的文本。 – andrewsi

+0

@andrewsi啊,我完全不好 - 我从'$ query2 ='行读取'mysql_insert_id()'调用,我甚至没有在$ message ='行中看到它。现在更新答案。 – newfurniturey

0

你尚未进行询问,直到后发送电子邮件,mysql_insert_id给出了由AUTO_INCREMENT列生成的ID以前的查询,所以你必须把查询一个berfore你使用mysql_insert_id