PHP GET方法在Xampps中不起作用

时间:2012-07-14 13:49:12

标签: php

我是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。

4 个答案:

答案 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'],那么您也可以将其用于访问,这是合乎逻辑的。