0

如果它为空,我想设置一个 $_GET 变量。但这似乎不起作用。

这是我到目前为止所拥有的。

if(!$_GET["profile"]) 
{
      $_GET["profile"] = null;  
}

编辑

我尝试这样做的全部原因是因为我在 .htaccess 中设置了两个虚 URL,但我试图弄清楚如何跳过第二个虚 URL,所以我不需要去 something.com/home / <-- 注意第二个斜线,如果我不放第二个斜线,那么它会将我引导到我的 404 错误文档。基本上,我如何允许它,所以我不需要放第二个斜杠,导致 GET 变量为空?

这是我的.htaccess,

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d   
RewriteRule ^([^/]*)/([^/]*)$ /index.php?p=$1&profile=$2 [L]
ErrorDocument 404 /redir404.php

就像我说的那样,为了让它工作,而不是将我发送到我的 ErrorDocument,我需要将我的 URL 设置为http://ncms.us/home/才能工作。

4

4 回答 4

3

首先,这一行将生成一个“未定义索引”通知:

if ( ! $_GET["profile"])

最好使用isset()避免这些通知:

其次,您的脚本应该可以正常工作,但值为 的变量NULL实际上不是“设置”的,这可能会让您绊倒:

if ( ! isset($_GET["profile"]))
{
    $_GET["profile"] = null;  
}
var_dump(isset($_GET["profile"])); // will print FALSE

http://php.net/manual/en/function.isset.php
isset — 确定变量是否已设置且不为 NULL

但是,您仍然可以在脚本$_GET["profile"]中有NULL值时使用它而不会生成通知。

最好只创建一个新变量而不是$_GET直接读取:

$profile = isset($_GET["profile"]) ? $_GET["profile"] : NULL;

将值注入超全局变量有时会在其他脚本中产生奇怪的副作用,因为它们具有全局访问权限。最好避免它。

于 2012-11-23T17:39:19.257 回答
0

使用 !isset($_GET["profile"]) 查看是否未设置。

于 2012-11-23T17:25:33.367 回答
0

http://php.net/manual/en/function.empty.php

empty( )— 判断一个变量是否为空

于 2012-11-23T17:33:45.257 回答
0

将您的 .htaccess 更改为:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d   
RewriteRule ^([^/]*)(/|)([^/]*)$ /index.php?p=$1&profile=$3 [L]
ErrorDocument 404 /redir404.php

这将重写 url,如下所示:

example.com/home -> example.com/index.php?p=home&profile=
example.com/home/user -> example.com/index.php?p=home&profile=user

(我无法在 .htaccess 文件中测试重写规则,但解析 url 的正则表达式应该是正确的)

于 2012-11-24T01:23:31.960 回答