PHP IF 语句问题与 isset 和 !empty
Posted
技术标签:
【中文标题】PHP IF 语句问题与 isset 和 !empty【英文标题】:PHP IF Statement Problems With isset & !empty 【发布时间】:2015-10-14 04:59:35 【问题描述】:我今天陷入了困惑,我希望有人能够提供帮助:)
我有一个包含基本项目的数据库,该表中有项目名称、项目编号、项目图像等属性。我可以毫无问题地输入新项目/显示现有项目等。
当我想编辑项目时,我的问题似乎出现了。我的想法是,我必须创建一个 IF 语句来确定是否上传了新文件,如果有,则在数据库中设置新文件名,如果没有,则将旧文件名保留在数据库中.
这几天我一直在玩这个,我觉得我开始的时候有点超前了。我已经开始分解基础知识,我对我的 IF 语句感到困惑,感觉就像倒退了?这有意义吗?
例子:
if (isset($_COOKIE["OldProjectImage1"]))$OldProjectImage1 = $_COOKIE["OldProjectImage1"];
if(isset($OldProjectImage1))
echo 'Your Browser Cookies are not enabled';
else if(isset($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES isset';
else if(!empty($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES empty';
现在在搜索 StackExchange 时,我发现我们必须像上面那样在 COOKIE 部分而不是变量上执行语句,但它同样也失败了。
if (isset($_COOKIE["OldProjectImage1"]))$OldProjectImage1 = $_COOKIE["OldProjectImage1"];
if(!empty($_COOKIE['OldProjectImage1']))
echo 'Your Browser Cookies are not enabled';
else if(isset($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES isset';
else if(!empty($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES empty';
我也尝试过 isset
if (isset($_COOKIE["OldProjectImage1"]))$OldProjectImage1 = $_COOKIE["OldProjectImage1"];
if(isset($_COOKIE['OldProjectImage1']))
echo 'Your Browser Cookies are not enabled';
else if(isset($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES isset';
else if(!empty($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES empty';
我已经用我的脚本尝试了这两种方法,它们的行为都相似。也许我只是对整个过程感到困惑?
当我在启用和不启用 cookie 的情况下运行测试时,它似乎总是跳过 IF 语句的第一部分(同时使用 isset 和 !empty)并跳转到下一部分。然后,类似地,感觉 IF 语句是倒退的(如果这有任何意义的话) - 如果我设置要上传的文件填充 ProjectImage1,我会得到“Image1 FILES empty”。如果我没有设置要上传和提交表单的文件,我会得到“Image1 FILES isset”。
我认为它基本上是,用简单的英语,
If cookie is empty then echo "Your Browser Cookies are not enabled"
Else if ProjectImage1 Name is set, echo "Image1 FILES isset"
Else if ProjectImage1 Name is Empty, echo "Image1 FILES empty"
但我觉得它是倒退的吗?我理解错了吗?
非常感谢您的任何回复!
【问题讨论】:
你必须先设置一个cookie才能读取它。但是cookie与数据库无关,与上传文件无关。所以实际上,我不明白你在做什么。 尝试将!
与if(!empty(
分开。 empty()
如果变量存在但为空,则返回 true。目前,如果变量包含某些内容,则写入 !empty
将返回 true
(并因此传递 if 条件)。
var_dump($_COOKIE["OldProjectImage1"]); 的输出是什么
对不起 GolezTrol,我应该对整个项目提供更多的见解,但是我觉得这与 Phil Cross 提到的那些 IF 语句直接相关是愚蠢的。我希望我可以将评论标记为答案 - 这正是我需要菲尔!感谢您的解释!我对很多 php 还是很陌生,我一直在从示例中破解一些东西,但没有意识到添加或删除 !
【参考方案1】:
问题在于:
if(isset($_COOKIE['OldProjectImage1']))
echo 'Your Browser Cookies are not enabled';
您检查 cookie 是否存在,如果存在,则表示未启用 cookie。有点奇怪。添加 !在 isset 之前。那么 if 语句和文本是正确的。
我想,但我只能假设,你最终想要这个:
if (isset($_COOKIE["OldProjectImage1"]))
// I believe the variable below can also be put between the else and down below
$OldProjectImage1 = $_COOKIE["OldProjectImage1"];
if(!isset($_COOKIE['OldProjectImage1']))
echo 'Your Browser Cookies are not enabled';
else if(!isset($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES is not set';
else if(empty($_FILES['ProjectImage1']['name']))
echo 'Image1 FILES is empty';
else
// upload file here
【讨论】:
【参考方案2】:我想你想检查浏览器 cookie 是否启用?
Detect if cookies are enabled in PHP
Shiplu Mokaddim 的回答:
session_start();
if (isset($_GET['check']) && $_GET['check'] == true)
if (isset($_COOKIE['foo']) && $_COOKIE['foo'] == 'bar')
// cookie is working
// get back to our old page
header("location: $_SESSION['page']");
else
// show the message "cookie is not working"
else
// save the referrer in session. if cookie works we can get back to it later.
$_SESSION['page'] = $_SERVER['HTTP_REFERER'];
// set a cookie to test
setcookie('foo', 'bar', time() + 3600);
// redirecting to the same page to check
header("location: $_SERVER['PHP_SELF']?check=true");
在 javascript 中检测 cookie
Check if cookies are enabled
所以,结合你的代码和我自己的解释:
<?php
session_start();
//check if a cookie test is started
if (isset($_GET['check']) && $_GET['check'] == true)
//cookie test is started
if (isset($_COOKIE['foo']) && $_COOKIE['foo'] == 'bar')
//cookie test success, go back to the previous page
header("location: $_SESSION['page']");
else
//cookie test fail, echo the message and continue
echo 'Your Browser Cookies are not enabled';
else
//start cookie test if a cookie test wasn't done
//check if a cookie test was done.
if (!isset($_COOKIE['foo']) && $_COOKIE['foo'] == 'bar')
//start a cookie test if a cookie test wasn't done
$_SESSION['page'] = $_SERVER['HTTP_REFERER'];
setcookie('foo', 'bar', time() + 3600);
header("location: $_SERVER['PHP_SELF']?check=true");
if(!isset($_COOKIE['OldProjectImage1']))
echo "OldProjectImage1 doesn't exists in cookies.";
else if(!isset($_FILES['ProjectImage1']['name']))
echo "Image1 FILES is not set";
else if(empty($_FILES['ProjectImage1']['name']))
echo "Image1 FILES is empty";
?>
【讨论】:
以上是关于PHP IF 语句问题与 isset 和 !empty的主要内容,如果未能解决你的问题,请参考以下文章
PHP 替代 if (!isset(...)) ... => GetVar($Variable, $ValueIfNotExists)