我的网站上有联系表单,我希望阻止使用相同电子邮件的用户多次联系。
在mySQL数据库中存储我创建存储过程的数据
DELIMITER //
CREATE PROCEDURE find_email(emailaddr VARCHAR(60))
BEGIN
DECLARE form_email VARCHAR(60);
SET form_email=emailaddr;
SELECT count(*)
FROM wordpress.cf7dbplugin_submits
WHERE form_name='Register'
AND field_name LIKE '%email%'
AND field_value=form_email;
END //
这样我就可以从数据库中的电子邮件地址中获取一个数字。
在我的PHP文件中,我做了这个
Global $res;
$res = $mydb->query("CALL find_email");
if($res>0)
{
echo "<script>alert('This email address is already in use!')</script>";
}
else
{
$tableName = $this->getSubmitsTableName();
$parametrizedQuery = "INSERT INTO `$tableName` (`submit_time`, `form_name`, `field_name`, `field_value`, `field_order`) VALUES (%s, %s, %s, %s, %s)";
$parametrizedFileQuery = "INSERT INTO `$tableName` (`submit_time`, `form_name`, `field_name`, `field_value`, `field_order`, `file`) VALUES (%s, %s, %s, %s, %s, %s)";
$order = 0;
$noSaveFields = $this->getNoSaveFields();
$foundUploadFiles = array();
global $mydb;
}
如果我更改了我的代码并手动将$ res设置为0,那么表单就像它应该的那样工作。否则,当我点击提交按钮时没有任何反应。
希望我提供足够的细节,提前感谢任何有解决方案的人。
答案 0 :(得分:0)
你把所有这些东西弄得太复杂了。首先,如果你真的不需要,不要在MySQL中使用存储过程。相反,使用pure:
SELECT count(*) FROM table WHERE email LIKE '%value%'
二。您应该提供表单的HTML,以便我知道您的$ _POST变量是什么。例如,如果您的表单如下:
<form ...>
<input type="text" id="mail" name="mail" />
</form>
然后,您将使用$_POST['mail']
访问PHP脚本中的电子邮件。
第三。这取决于一个PHP脚本/框架控制器是否同时处理显示原始表单(get)和提交它(post),或者它们是不同的PHP脚本/控制器。如果您使用一个文件,它应该如下所示:
if (isset($_POST['email'])) {
// process - check SQL and eventually display javascript alert
} else { // get
// display the form
}
希望有所帮助。我建议你阅读一些教程,因为如果你不明白你在问什么,问问题可能并不总是有帮助。