我正在为我的移动应用程序使用PHP和JSON API。我试着写一个注册模块,但我的条件语句的一部分没有按预期工作。
如果声明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']);
如果声明3:
if($g != 0 or 1 || $i != 0 or 1)
{
$returning = array('error' => 'Invalid query');
echo json_encode($returning);
break;
}
当$ g或$ i的值不是1或0时,它应该给出错误,但它总是给出错误。
请帮助我,我尝试了很多东西,但我找不到解决方案
@Edit:
我的有效电子邮件功能:
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;
}
答案 0 :(得分:4)
删除if的最后一个括号后面的分号。
第一个陈述结束
|| !isset($_GET['kraj']));
我认为第二个声明看起来没问题,这是电子邮件验证功能或上次检查中的其他功能的问题。
最后一句话应该是
if(($g != 0 && $g != 1) || ($i != 0 && $i != 1))
答案 1 :(得分:3)
本声明
if($g != 0 or 1 || $i != 0 or 1)
绝对不是when value of $g or $i isn't 1 or 0
。有各种各样的解决方案,这就是你可以使用逻辑运算符(分成几行并装饰有大量括号以便于阅读):
if (
( ( $g != 0) && ( $g != 1) )
||
( ( $i != 0) && ( $i != 1) )
)
另请注意,or
和||
有different precedence,这可能导致非常令人费解的情况。为简单起见,最好坚持||
(和&&
)。有关||之间差异的详细信息,请阅读this SO question和或
答案 2 :(得分:3)
首先改变如果:
$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;
}
答案 3 :(得分:2)
使你的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;
}