0

我有以下用于创建网站的代码:

    <?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"]

顺便说一句,您可以使用字符串取消引用而不是 using substr,所以而不是:

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

你可以这样做:

$cString = $cString . $chars[$rand];
于 2012-05-31T23:43:53.617 回答
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 回答
0

我解决了这个问题!感谢大家的帮助,问题出在代码中的逻辑上。

于 2012-06-01T03:58:58.320 回答