我有一个订阅组件,它是一个简单的表单,如下所示:
<form id="newsletter_subscribe">
<label class="label-margin">Email<span class="required-field">*</label>
<input type="email" name="mailinglistEmail">
<input type="submit" value="Subscribe" class="subscribe-button float-r">
<div class="clear_float"></div>
</form>使用jquery和ajax的组合,我将数据序列化并像这样发送到流程文件(如果我粘贴的代码太多了,我很抱歉,但我宁愿粘贴所有东西,而不是太少):
$(function() {
$("#newsletter_subscribe").submit(function(event) {
//SUPPRESS SUBMIT DEFAULT BEHAVIOUR
event.preventDefault();
//STRINGIFY THE SERIALIZED OBJECT OF THE FORM AND PACK INTO VARIABLE JSONstring
var JSONstring = JSON.stringify($("#newsletter_subscribe").serializeObject());
//AJAX REQUEST TO THE SERVER
var subscribeRequest = $.ajax({
url: "mailinglist-process-test.php", //URL PARAMETER CONTAINS A STRING OF THE URL SENDING THE REQUEST TO
type: "POST", //THE TYPE OF REQUEST BEING SENT, IE GET, POST ETC
data: JSONstring, //THE ACTUAL DATA SENT TO THE SERVER WITH THE AJAX REQUEST
dataType: "json", //THE TYPE OF DATA EXPECTED BACK FROM THE SERVER
cache: false, //SET THIS TO FALSE TO FORCE REQUESTED PAGES TO NOT BE CACHED IN THE BROWSER
});
console.log(subscribeRequest);
//THINGS TO HAPPEN AFTER SUCCESSFUL REQUEST
subscribeRequest.then(function(result){
$("#newsletter_subscribe").hide();
queryResult = result;
return success(queryResult);
}).then(function(message){
$("#subscribe_success").html(message);
});
// ########### SUCCESS FUNCTION START
function success(queryResult) {
subscribed = queryResult.userSubscribe;
if (subscribed == 'yes'){
message = "You have successfully signed up for our newsletter.";
}
if (subscribed == 'duplicate'){
message = "This email address is already subscribed.";
}
return message;
}
// ########### SUCCESS FUNCTION END
});});
现在在处理文件中,在插入到db之前,我想检查电子邮件是否已经在db中了!我试着这样做:
$data = json_decode(file_get_contents('php://input'), true);
$vMailinglistDate = date('Y-m-d');
$vMailinglistEmail = strtolower(trim($data['mailinglistEmail']));
$sql_mailinglist = "SELECT * FROM tblmailinglist WHERE MailinglistEmail = $vMailinglistEmail " ;
require('cms/inc-conn-tekiah.php');
$rs_mailinglist = mysqli_query($vConnTekiah, $sql_mailinglist);
$rs_mailinglistRows = mysqli_fetch_assoc($rs_mailinglist);
if ($rs_mailinglistRows === 0) {
require('inc-conn-tekiah.php');
require('inc-function-escapestring.php');
//FORMULATE THE INSERT STATEMENT
$sql_subscribe = sprintf("INSERT INTO tblmailinglist (MailinglistDate, MailinglistEmail) VALUES (%s, %s)",
escapestring($vConnTekiah, $vMailinglistDate, 'text'),
escapestring($vConnTekiah, $vMailinglistEmail, 'text')
);
$sql_subscribeResult = mysqli_query($vConnTekiah, $sql_subscribe);..。等插入过程继续进行。
在测试并试图找出为什么没有产生我想要的结果之后,我发现这是因为来自查询的mysqli_result是空的!尽管我测试的电子邮件肯定已经在数据库中了。
更多的测试显示,如果我使用select语句并以单引号作为字符串输入了我测试的电子邮件,它就能正常工作:
"SELECT * FROM tblmailinglist WHERE MailinglistEmail = 'test@gmail.com' ";但是,使用变量,SELECT语句输出一个字符串,该字符串看起来很明显不起作用:
"SELECT * FROM tblmailinglist WHERE MailinglistEmail = test@gmail.com ";我能看到的唯一不同之处是第一个版本中的单引号似乎使其工作。但真正令人困惑的是,我在以前的SELECT语句中使用了变量,根本没有问题。
所以我的问题是,我应该采取什么方法来构造一个SELECT语句来使用我拥有的信息来测试一个重复的电子邮件(在表单中发送的电子邮件来测试它是否已经在DB中)。
发布于 2015-10-29 08:28:23
第一种方法。这是mysql中的语法。所以你自己加单引号
$sql_mailinglist = "SELECT * FROM tblmailinglist WHERE MailinglistEmail = '$vMailinglistEmail' " ;
^ ^https://stackoverflow.com/questions/33409194
复制相似问题