插入不工作第二个表



我是PHP的新手,但通常能够解决大多数问题,但是这个问题得到了我。

我正在尝试使用一个提交按钮创建新闻通讯(单个字段)。我的工作正常,发送电子邮件并将表单数据插入我的表格。但是,我想添加功能以将确认电子邮件发送给注册的人。我已经进行了广泛的研究,我知道这背后的方法,但是我的代码并没有将数据输入用于存储确认信息的第二个表中。

我有2个表:表1命名为"新闻通讯"列为:

idmail,emailaddress,datetime,state

idmail设置为AUTO_INCREMENT

表2命名为"确认"列为:

idconfirm,emailaddress,confirmkey

这是我的代码(我已经省略了此后的电子邮件部分,因为这一切都可以了):

//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);

当我提交电子邮件地址时,第一张表格正确。

此处的目标是将第一个插入中的自动ID获取到变量中,然后在名为" IDConfim"的第二个表列中添加。

我尝试了:

echo $id;
echo $email;
echo $hash;

所有变量都保存正确的信息。

有人有任何想法吗?我已经尝试在这里列出很多东西,但是我已经研究了这一点,但我只是不知道我要在哪里出错。

预先感谢。

我在这里发表评论作为答案:

这里的问题是此$query2 = mysqli_query($dbc,... '$hash')"); mysqli_query($dbc, $query2);,您应该遇到错误。这是表名称confrim的可能错字。

您需要在此处删除mysqli_query($dbc, $query2);并替换为:

if($query2){ echo "Success"; }
else{ echo "Error: " . mysqli_error($dbc);

(另一个编辑):您在此处执行相同的错误:

$query1 = mysqli_query($dbc, "INSERT INTO newsletter ... '$now','0')");
mysqli_query($dbc, $query1);

,需要更改为:

if($query1){ echo "Success"; }
else{ echo "Error: " . mysqli_error($dbc);

Riggsfolly的评论中所述;不要使用MD5进行哈希密码,它不再安全。30多年来,大量的水在桥下奔跑。

使用password_hash() http://php.net/manual/en/function.password-hash.php和准备好的语句。

编辑:现在看着我再次查看代码后,您不是要保存密码,而是作为确认键。如果是这种情况,那么您可以忽略密码内容。但是,如果您确实决定使用MD5将来存储密码,则不。

问题之一是您不会显示MySQL错误,如果有一个错误。因此,您需要检查服务器日志是否有PHP中的错误,您可以强制将错误打印到错误日志上或执行其他操作:

例如:

mysqli_query($dbc, $query2) or error_log(mysqli_error($dbc));
mysqli_query($dbc, $query2) or custome_error_handler(mysqli_error($dbc));

以及PHP也应将HTTP错误返回给客户端。您应该捕获该错误。

看到SQL错误后,很容易弄清楚您做错了什么。

编辑 Fred II捕获了真正的错误,但我认为错误是第一次犯错误:

mysqli_query($dbc, $query1);

$query1不是字符串。而且,如果您注意到您已经在上面的行上执行了查询。读取PHP错误日志将完全显示错误的位置。

对不起浪费时间。

感谢jeffery_the_wind将我指向日志。我将来会使用它们。

问题是两个拼写错误,在PHP中的列名中一个,一个在MySQL数据库中。concrim不是一个词!我有点Lexdixlick!

感谢您的及时回复。

相关内容