其他块中的PHP代码赢得';t回波变量

其他块中的PHP代码赢得';t回波变量,php,html,Php,Html,我使用以下代码创建网站: <?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"> &

我使用以下代码创建网站:

    <?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不在同一范围内设置。给定此代码,如果

$cString = "";
就在require_once行之后,它应该可以工作

更新

您很可能没有显示完整的代码,
$cString
是从函数中构造的。函数内部声明的变量在函数外部不可用。有几个选择:

  • 函数结束时返回
    $cString

    function my_fn()
    {
        $cString = 'abc';
        return $cString;
    }
    
  • 在顶部声明
    $cString
    ,并通过引用传递:

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

  • 我省略了使用
    global
    ,因为我认为它不适合您的情况。

    只有定义了
    $\u POST[“firstName”]
    时才设置
    $cString
    的值

    顺便说一句,您可以使用字符串解引用,而不是使用
    substr
    ,因此,您可以使用以下方法代替:

    $cString = $cString . substr($chars, $rand, 1);
    
    您可以这样做:

    $cString = $cString . $chars[$rand];
    

    问题是变量在
    if
    内部,当您在外部调用它时,它将不存在。如果
    ,只需在
    之外声明变量即可(在代码开始时就可以了)。

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

    $\u POST['firstName']
    set?echo$\u POST['firstName']并查看是否正确传递给您。此外,你真的应该考虑使用mysqli_*或PDOs而不是mysql_*函数。仅供参考,我认为在数据库中保存salt不是一个好主意。@DanielA.White我认为在数据库中存储salt没有问题,尽管他实际上可以将salt作为第二个参数传递给
    crypt
    :),尽管他可能会收到PHP警告,
    echo null
    echo”“
    将产生相同的净效果。。。当EchodHP作用域不能像那样工作时,该值不会被“看到”。变量退出
    if()
    块时未取消设置。这不会发生在福斯或惠利斯身上;只有函数,真的。@user532493嗯,我明白了。。。您没有显示完整的代码;更新了我的回答我没有在函数中定义$cString,这是我能确定的为数不多的事情之一。我以为$u POST[“firstName”]已经定义了。在我试图回显$cString变量的地方,我实际上无法回显前面php代码块中的任何变量。发生了什么事?@user532493在这种情况下,你可以非常肯定
    isset($\u POST[“firstName”])
    返回
    false
    我不这么认为,因为当我查询数据库添加用户信息时,它都正确添加了,这意味着设置了$\u POST字段。