PHP GET方法没有';我不在Xampps工作


PHP GET method doesn't work in Xampps

我是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';
}