我是PHP新手,对GET方法感到困惑。
为什么循环条件下的$text
可以在Windows7中使用Appserv,但当我在Mac上尝试使用Xampps时,它不起作用,我不得不使用for($i=0; $i<strlen($_GET['text']); $i++)
。
起初,我知道在我使用isset($_GET['text'])
之后,所以下次我只使用$text
,但现在我很困惑。
<? $color = array("#FFCCFF", "#FFCCCC", "#FFCC99", "#FF99FF", "#FF99CC",
"#FF9999", "#FF66FF", "#FF66CC", "#FF6699", "#FF6666");
if (isset($_GET['text'])) {
for($i=0; $i<strlen($text); $i++) {
$j = $i%10 ?>
<font color=<?= $color[$j]?>><? echo "$text[$i]"; ?></font>
}
} else {
echo "Empty String";
} ?>
通过您的许多帮助,问题已解决。
<?php $color = array("#FFCCFF", "#FFCCCC", "#FFCC99", "#FF99FF", "#FF99CC",
"#FF9999", "#FF66FF", "#FF66CC", "#FF6699", "#FF6666");
if( isset($_GET['text'])) {
$text = $_GET['text'];
for( $i=0; $i<strlen($text); $i++) {
$j = $i%10;
echo "<font color=$color[$j]>$text[$i]</font>";
}
} else
echo "Empty string";
?>
顺便说一句,我之所以尝试使用HTML+PHP,只是因为我想在深入使用CSS之前先练习HTML。
如果$text
用作$_GET['text']
的别名,那么您的问题的实际答案可能是您的Windows服务器配置的register_globals
设置为on
,这意味着查询字符串中传递的任何内容都将转换为适当的变量。
即。?awesome=true
==$awesome = 'true'
这太糟糕了。在有问题的一侧禁用register_globals
,并使用$_GET['text']
访问您的数据。
你的代码看起来会更好,比如这样:
<?php
$color = array("#FFCCFF", "#FFCCCC", "#FFCC99", "#FF99FF", "#FF99CC",
"#FF9999", "#FF66FF", "#FF66CC", "#FF6699", "#FF6666");
if (isset($_GET['text'])) {
$text = $_GET['text'];
for($i=0; $i < strlen($text); $i++) {
$j = $i % 10; ?>
<span style="color: <?= $color[$j] ?>"><?= htmlentities($text[$i]); ?></span>
<?php }
} else {
echo "Empty String";
}
?>
请注意,我已经整理了您的代码,使其更加理智/安全。htmlentities
用于阻止可能由此产生的XSS漏洞,尽管由于拆分字符串而不太可能。出于某种原因,您混淆了<?php echo .. ?>
和<?= .. ?>
,尽管它们是完全相同的东西。另外,不要使用<font>
。
你说过:
起初,我理解"在我使用isset($_GET['text'])之后,所以下次我只使用($text),但现在我很困惑
如果你知道你在混合它们,你为什么要这么做?如果您正在检查是否设置了$_GET['text']
,那么您也可以使用它进行访问,这是合乎逻辑的。
好吧,你为什么每一行都要进出PHP?一次可以有多行PHP,你知道!
CCD_ 18是一个变量。访问它没有什么特别的,但它的特别之处在于,无论范围如何,都可以访问它(它是超全局的)。仅当启用了自动注册全局设置时,才会将其引用为$text
,由于各种原因,不建议使用此设置。
所以,你的代码应该看起来像:
<?php
$color = array(".....");
if( isset($_GET['text'])) {
$l = strlen($_GET['text']);
for( $i=0; $i<$l; $i++) {
$j = $i%10;
echo "<span style='"color: ".$color[$j].";'">".$text[$i]."</span>";
}
}
else echo "Empty string";
?>
我还冒昧地更新了你的HTML,这是最近的一年。
您应该首先初始化$text变量,如下所示:
$text=$_GET['text'];
这应该不会有任何问题。
我仍然不确定你在做什么,但是:
$colours = array("#FFCCFF", "#FFCCCC", "#FFCC99", "#FF99FF", "#FF99CC", "#FF9999", "#FF66FF", "#FF66CC", "#FF6699", "#FF6666");
if (isset($_GET['text'])) {
$text = $_GET['text'];
for ($i = 0; $i < strlen($text); $i++) {
$j = $i%10;
echo "<span style='color: {$colours[$j]}'>{$text[$i]}</span>";
}
}
else {
echo 'No text';
}