我正在尝试用2个条件创建一个if语句。检查一个变量是否不存在的一个&不匹配单词“good2go”,另一个检查以确保“body”变量存在。我试图在这里查看错误消息。这就是我所拥有的以及我所尝试过的,而且似乎没有任何效果。
if (stripos($_POST['check'], 'good2go') == FALSE && $_POST['body']) {
$error = true; }
if (!$_POST['check'] == 'good2go' && $_POST['body']) {
$error = true; }
if (!stripos($_POST['check'], 'good2go') && $_POST['body']) {
$error = true; }
if ((!stripos($_POST['check'], 'good2go')) && $_POST['body']) {
$error = true; }
如何让它发挥作用?
这是contact_us.php的完整代码,其中包含验证码和电子邮件代码。
$error = false;
if (isset($_GET['action']) && ($_GET['action'] == 'send')) {
// Winnie the pooh check
//$t = tep_db_prepare_input($_POST['verify']);
if (!isset($_POST['check']) && !$_POST['check']=='good2go' && isset($_POST['body'])) {
$error = true;
} else { // Winnie the pooh Check
$name = tep_db_prepare_input($_POST['name']);
$email_address = tep_db_prepare_input($_POST['email']);
//IP recorder start
$ipaddress = $_SERVER["REMOTE_ADDR"];
$ip = "\n\nIP: " . $ipaddress;
$content = "\n\nName: ".$name."\n\nComments: ".$_POST['enquiry'];
$product = tep_db_prepare_input($_POST['product']);
if ($product) {
$product_text = "\n\nProduct Interest: ".$product; }
$content_ip = $content . $product_text. $ip;
$enquiry = tep_db_prepare_input($content_ip);
//IP recorder end
}
// BOF: Remove blank emails
// if (tep_validate_email($email_address)) {
// tep_mail(STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, EMAIL_SUBJECT, $enquiry, $name, $email_address);
// tep_redirect(tep_href_link(FILENAME_CONTACT_US, 'action=success'));
// } else {
// $error = true;
// $messageStack->add('contact', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);
if (! tep_validate_email($email_address)) {
$error = true;
$messageStack->add('contact', ENTRY_EMAIL_ADDRESS_CHECK_ERROR);
}
if ($enquiry == '') {
$error = true;
$messageStack->add('contact', ENTRY_EMAIL_CONTENT_CHECK_ERROR);
}
if ($error == false) {
tep_mail(STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, EMAIL_SUBJECT, $enquiry, $name, $email_address);
tep_redirect(tep_href_link(FILENAME_CONTACT_US, 'action=success'));
// EOF: Remove blank emails
}
}
答案 0 :(得分:2)
解决更新后的问题:
if (!isset($_POST['check']) || !$_POST['check']=='good2go' || !isset($_POST['body'])) {
$error = true;
}
管道与&符号的原因是,如果任何字段出现问题,您希望抛出错误。此外,您要检查是否未设置主体与IS设置。很高兴为你效劳!
答案 1 :(得分:1)
和另一个检查以确保“body”变量不存在。
if(stripos($_POST['check'], "good2go") !== false && !isset($_POST['body'])){
//code here
}
答案 2 :(得分:1)
根据关于stripos函数的PHP文档:
此函数可能返回布尔值FALSE,但也可能返回非布尔值,其值为FALSE。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
因此您需要将第一行更改为:
// Doing stripos checks you MUST use === (not ==)
if (stripos($_POST['check'], 'good2go') !== FALSE && $_POST['body']) {
$error = true; }
要检查是否有$_POST['body']
,您可以将上述内容更改为:
if (stripos($_POST['check'], 'good2go') !== FALSE && (!isset($_POST['body'])) {
- 更新 -
根据您的评论,您需要$_POST['check']
等于'good2go',然后您不应该使用stripos
因为它会检查是否存在good2go
,无论它是否正好相等或字符串的一部分; “哇,这个汉堡包很棒。”
所以我会将条件更改为:
if (((isset($_POST['body'])) && (strlen($_POST['body']) > 0)) && ((!isset($_POST['check'])) || ($_POST['check'] !== 'good2go'))) {
// Post body has a value and Post check DOES NOT equal good2go, someone is hax0rin!
}
您可能希望阅读Cross-site request forgery,因为它似乎与您正在处理的内容一致。
答案 3 :(得分:0)
不需要所有这些不需要的功能。你想要达到的目标是:
if (isset($_POST['check']) && $_POST['check']=='good2go' && !isset($_POST['body']) {
// your code
}
但是, 根据问题的标题: 使用三元语句。语法是这样的
$var = <condition> ? <true> : <false>;
答案 4 :(得分:0)
检查是否存在一个变量&amp;匹配“good2go”这个词
isset($_POST['check']) AND $_POST['check'] == 'good2go'
和另一个检查以确保“body”变量不存在。
!isset($_POST['body'])
所以,把它们放在一起
if (isset($_POST['check']) AND $_POST['check'] == 'good2go' AND !isset($_POST['body'])) {
$error = true;
}
答案 5 :(得分:0)
试试这个:
if(!empty($_POST['check']) && $_POST['check']=='good2go' && empty($_POST['body'])) { $error=true; }
如果您的empty
可以带有空值,请考虑使用isset
代替$_POST['body']
。