-1

私はPHPの初心者で、GETメソッドについて混乱しています。

ループの状態で Windows 7 の Appserv で動作する理由$textですが、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 を練習したいからです。

4

4 に答える 4

0

さて、なぜあなたはすべての行でPHPに出入りするのですか?一度に複数行のPHPを使用できます。

$_GET['text']は変数です。アクセスは特別なことではありませんが、スコープに関係なくアクセスできるという点で特別です(スーパーグローバルです)。参照は、$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を更新する自由を取りました。

于 2012-07-14T13:53:54.477 に答える
0

最初に$text変数を初期化する必要があります。次のようになります。

$ text = $ _GET ['text'];

これは問題なく動作するはずです。

于 2012-07-14T13:55:06.580 に答える
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';
}
于 2012-07-14T13:57:48.467 に答える
0

あなたの質問に対する実際の答えは、 if$textがエイリアスとして機能している場合、$_GET['text']おそらく Windows サーバーがregister_globalsset toonで構成されていることです。これは、クエリ文字列で渡されたものはすべて適切な変数に変換されることを意味します。

すなわち。?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']) を使った後は、次からは only($text) を使う」ということを理解していましたが、今は混乱しています。

それらを混合していることを知っている場合、なぜそれを行うのですか? 設定されていることを確認している場合$_GET['text']、それをアクセスにも使用するのは論理的です。

于 2012-07-14T14:11:22.627 に答える