我正在API为我的移动应用程序使用PHP和JSON。我试图编写一个注册模块,但我的一部分条件语句没有按预期工作。
如果语句1:
if(!isset($_GET['username']) || !isset($_GET['password']) || !isset($_GET['imei']) || !isset($_GET['imie']) || !isset($_GET['nazwisko']) || !isset($_GET['email']) || !isset($_GET['zgoda']) || !isset($_GET['telefon']) || !isset($_GET['zgoda2']) || !isset($_GET['kraj']));
{
$returning = array('error' => 'Invalid query');
echo json_encode($returning);
break;
}
当缺少参数时,它应该给出错误,但它总是给出错误。
我的查询:
username=konrad12&password=xxx&imei=000000000000000&nazwisko=Potter&imie=Ronald&email=xxx@xxx.pl&zgoda=1&telefon=000&zgoda2=1&kraj=Poland
如果语句2:
if(strlen($c) != 15 || !validEmail($f) || strlen($g) != 1 || strlen($i) != 1 || wez_id_kraju($j) == 0)
{
$returning = array('error' => 'Invalid query');
echo json_encode($returning);
break;
}
当var值不正确时,它应该给出错误,但它总是给出错误。
我的变量:
$z = mysql_real_escape_string($_GET['username']);
$b = mysql_real_escape_string($_GET['password']);
$c = mysql_real_escape_string($_GET['imei']);
$d = mysql_real_escape_string($_GET['nazwisko']);
$e = mysql_real_escape_string($_GET['imie']);
$f = mysql_real_escape_string($_GET['email']);
$g = mysql_real_escape_string($_GET['zgoda']);
$h = mysql_real_escape_string($_GET['telefon']);
$i = mysql_real_escape_string($_GET['zgoda2']);
$j = mysql_real_escape_string($_GET['kraj']);
If语句3:
if($g != 0 or 1 || $i != 0 or 1)
{
$returning = array('error' => 'Invalid query');
echo json_encode($returning);
break;
}
当$g或$i的值不是1或0时,它应该给出一个错误,但它总是给出一个误差。
请帮帮我,我尝试了很多东西,但我找不到解决方案
@编辑:
我的有效电子邮件功能:
function validEmail($email)
{
$isValid = true;
$atIndex = strrpos($email, "@");
if (is_bool($atIndex) && !$atIndex)
{
$isValid = false;
}
else
{
$domain = substr($email, $atIndex+1);
$local = substr($email, 0, $atIndex);
$localLen = strlen($local);
$domainLen = strlen($domain);
if ($localLen < 1 || $localLen > 64)
{
// local part length exceeded
$isValid = false;
}
else if ($domainLen < 1 || $domainLen > 255)
{
// domain part length exceeded
$isValid = false;
}
else if ($local[0] == '.' || $local[$localLen-1] == '.')
{
// local part starts or ends with '.'
$isValid = false;
}
else if (preg_match('/''.''./', $local))
{
// local part has two consecutive dots
$isValid = false;
}
else if (!preg_match('/^[A-Za-z0-9''-''.]+$/', $domain))
{
// character not valid in domain part
$isValid = false;
}
else if (preg_match('/''.''./', $domain))
{
// domain part has two consecutive dots
$isValid = false;
}
else if
(!preg_match('/^(''''.|[A-Za-z0-9!#%&`_=''/$''*+?^{}|~.-])+$/',
str_replace("''''","",$local)))
{
// character not valid in local part unless
// local part is quoted
if (!preg_match('/^"(''''"|[^"])+"$/',
str_replace("''''","",$local)))
{
$isValid = false;
}
}
if ($isValid && !(checkdnsrr($domain,"MX") ||
↪checkdnsrr($domain,"A")))
{
// domain not found in DNS
$isValid = false;
}
// I add that text ...
mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
mysql_select_db(DB_BASE);
$q = "SELECT * FROM `system_domeny`";
$a = mysql_query($q);
while($wynik = mysql_fetch_array($a))
{
if($domena == $wynik[1]) $isValid = false;
}
// ...
}
return $isValid;
}
删除if.最后一个括号后的分号
第一条语句结束
|| !isset($_GET['kraj']));
我认为第二条语句看起来不错,是电子邮件验证功能的问题还是上次检查中的其他功能的问题。
最后一个语句应该类似
if(($g != 0 && $g != 1) || ($i != 0 && $i != 1))
首先将if更改为:
$gets = array('username', 'password', 'imei', 'imie', 'nazwisko', 'email', 'zgoda','telefon','zgoda2','kraj');
$er = 0;
foreach($gets as $get){
if(!isset($_GET[$get])){
$er++;
$error[] = $get;
}
}
if($er > 0){
$returning = array('error' => 'Invalid query, please fill these parameters: ['.implode(", ", $error).']');
echo json_encode($returning);
//break is not like exit, there is no function of break inside if!
exit;
}
如果三个,如其他人所回答的,则将其更改为:
if( ($g != 0 && $g != 1) || ($i != 0 && $i != 1))
{
$returning = array('error' => 'Invalid query');
echo json_encode($returning);
exit;
}
此语句
if($g != 0 or 1 || $i != 0 or 1)
绝对不是CCD_ 2。有各种各样的解决方案,这就是你只需使用逻辑运算符(分成几行,并用括号装饰以提高可读性)就可以做到的:
if (
( ( $g != 0) && ( $g != 1) )
||
( ( $i != 0) && ( $i != 1) )
)
还要注意,or
和||
具有不同的优先级,这可能导致相当令人困惑的情况。为了简单起见,最好坚持使用||
(和&&
)。阅读此SO问题,了解有关||和或之间差异的更多信息
使json数组如下:
$returning=array();
$str = array('error' => 'Invalid query');
array_push($returning,$str);
echo "{'"response'":".json_encode($returning)."}";
并从第一个语句中删除while条件之后的终止符(;),尝试第三个语句:
if($g != 0 ||$g != 1 || $i != 0 ||$i != 1)
{
$returning = array('error' => 'Invalid query');
echo json_encode($returning);
break;
}