0

Webサイトの作成に使用している次のコードがあります。

    <?php
    session_start();
        ?>
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org   /TR/xhtml11          /DTD/xhtml11.dtd">
         <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
<?php
require_once("connect.php");
                if(isset($_POST["firstName"]))
                {
                    $fname = mysql_real_escape_string($_POST["firstName"]);
                    $lname = mysql_real_escape_string($_POST["lastName"]);
                    $email = mysql_real_escape_string($_POST["email"]);
                    $pass = mysql_real_escape_string($_POST["password"]);
                    $cpass = mysql_real_escape_string($_POST["cPassword"]);

                    $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
                    $salt = "";
                    for($i = 0; $i < 30; $i++)
                    {
                        $rand = rand(0,35);
                        $salt = $salt . substr($chars, $rand, 1);
                    }
                    $hash = crypt($salt . $pass);
                    $query = "INSERT INTO users (salt, hash, email, fname, lname) VALUES ('$salt', '$hash', '$email', '$fname', '$lname')";
                    $result = mysql_query($query);
                    $cString = "";
                    for($i = 0; $i < 30; $i++)
                    {
                        $rand = rand(0, 35);
                        $cString = $cString . substr($chars, $rand, 1); 
                    }

                }
        ?>
        <link rel="stylesheet" type="text/css" href="styles/common.css"/>
        <link rel="stylesheet" type="text/css" href="styles/thanks.css"/>
    </head>

    <body>
        <?php
            echo $cString;  
        ?>

の値がページに表示されないのはなぜ$cStringですか?文字列をエコーすると表示されますが、変数をエコーすると表示されません。どうしてこれなの?

4

4 に答える 4

1

の値は、が定義されている$cString場合にのみ設定されます。$_POST["firstName"]

ところで、を使用する代わりに文字列の逆参照を使用できるため、次substrの代わりに:

$cString = $cString . substr($chars, $rand, 1);

あなたはこれを行うことができます:

$cString = $cString . $chars[$rand];
于 2012-05-31T23:43:53.617 に答える
0

問題を解決しました!皆さんの助けに感謝します。問題はコードのロジックにありました。

于 2012-06-01T03:58:58.320 に答える
0

$cStringが同じスコープ内に設定されていません。このコードを考えると、

$cString = "";

require_once行の直後で、機能するはずです。

アップデート

ほとんどの場合、完全なコード$cStringが表示されておらず、関数内から構築されています。関数内で宣言された変数は、外部では使用できません。いくつかのオプション:

  1. $cString関数が終了したときに戻る

    function my_fn()
    {
        $cString = 'abc';
        return $cString;
    }
    
  2. 上部で宣言$cStringし、参照によって渡します。

    $cString = '';
    function my_fn(&$cString) {
        $cString = 'abc';
    }
    my_fn($cString);
    

globalあなたの場合には適さないと思うので、使用を省略しました。

于 2012-05-31T23:41:01.303 に答える
0

問題は、変数がの内部にありif、外部で呼び出すと存在しないことです。if変数を(コードの先頭で完璧になります)の外で宣言するだけです。

于 2012-05-31T23:45:08.280 に答える