我是PHP的新手,我对GET方法感到困惑。
为什么循环条件中的$text
适用于Windows 7中的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";
?>
btw我正在尝试使用HTML + PHP,因为我想在深入了解CSS之前先练习HTML。
答案 0 :(得分:0)
好的,你为什么每一行都进出PHP?你知道,它允许一次拥有多行PHP!
$_GET['text']
是一个变量。访问它并没有什么特别之处,但它的特殊之处在于无论范围如何都可以访问它(它是超全局的)。引用为$text
仅在启用了autoregister全局设置时才有效,不建议出于各种原因。
因此,您的代码应如下所示:
<?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。
答案 1 :(得分:0)
您应首先初始化$ text变量,如下所示:
$ text = $ _GET ['text'];
这应该没有任何问题。
答案 2 :(得分:0)
我仍然不确定你在做什么,但是:
$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';
}
答案 3 :(得分:0)
如果$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']
,那么您也可以将其用于访问,这是合乎逻辑的。