-3 php mysql-insert-id insert-into
我是PHP的新手,但通常能够解决大多数问题,但这个问题让我感到困惑.
我正在尝试使用单个提交按钮创建简报注册(单个字段).我有这个工作正常,发送电子邮件并将表单数据插入我的表.但是,我想添加功能,以便向注册的人发送确认电子邮件.我做了大量的研究,我知道这背后的方法,但我的代码只是没有将数据输入到用于存储确认信息的第二个表中.
我有2个表:名为'newsletter'列的表1是:
idmail,emailaddress,datetime,state
Run Code Online (Sandbox Code Playgroud)
idmail 被设置为 AUTO_INCREMENT
表2名为'confirm'的列是:
idconfirm,emailaddress,confirmkey
Run Code Online (Sandbox Code Playgroud)
这是我的代码(我省略了之后的电子邮件部分,因为所有工作都正常):
//connect to database
include('admin/connection.php');
$email = mysqli_real_escape_string($dbc, $_POST['email']);
//check if value exists in table
$result = mysqli_query($dbc, "SELECT emailaddress FROM newsletter WHERE emailaddress = '$email'");
if (mysqli_num_rows($result)==0) {
//Insert value into database
$query1 = mysqli_query($dbc, "INSERT INTO newsletter(emailaddress, datetime, state) VALUES('$email','$now','0')");
mysqli_query($dbc, $query1);
// Get ID of last record
$id = mysqli_insert_id($dbc);
//Create a random key
$hash = $email.date('mY');
$hash = md5($hash);
//Insert value into database
$query2 = mysqli_query($dbc, "INSERT INTO confrim(idconfirm, emailaddress, confirmkey) VALUES('$id','$email','$hash')");
mysqli_query($dbc, $query2);
Run Code Online (Sandbox Code Playgroud)
当我提交电子邮件地址时,第一个表格填充正确.
这里的目标是将第一个INSERT INTO查询中创建的自动ID转换为变量,然后将其添加到名为"idconfim"的第2个表列中.
我试过了:
echo $id;
echo $email;
echo $hash;
Run Code Online (Sandbox Code Playgroud)
并且所有变量都包含正确的信息.
有没有人有任何想法?我已尝试过很多东西在这里列出,但我已经研究了这个,我只是不知道我哪里出错了.
提前致谢.
我在这里发表评论作为答案:
这里的问题是这个$query2 = mysqli_query($dbc,... '$hash')"); mysqli_query($dbc, $query2);,你应该得到一个错误.除了表名的可能拼写错误之外confrim.
您需要删除mysqli_query($dbc, $query2);此处并将其替换为:
if($query2){ echo "Success"; }
else{ echo "Error: " . mysqli_error($dbc);
Run Code Online (Sandbox Code Playgroud)
(另一个编辑):你在这里做了同样的错误:
$query1 = mysqli_query($dbc, "INSERT INTO newsletter ... '$now','0')");
mysqli_query($dbc, $query1);
Run Code Online (Sandbox Code Playgroud)
并需要改为:
if($query1){ echo "Success"; }
else{ echo "Error: " . mysqli_error($dbc);
Run Code Online (Sandbox Code Playgroud)
正如RiggsFolly的评论中所述; 不要使用MD5哈希密码,它不再安全.30多年来,大量的水在桥下流淌.
使用password_hash() http://php.net/manual/en/function.password-hash.php和准备好的声明.
编辑:我现在看起来在再次查看您的代码之后,您不是在尝试保存密码,而是更多地作为确认密钥.如果是这种情况,那么你可以忽略密码的东西.但是,如果您决定在将来使用MD5存储密码,请不要.