其他块中的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字段。