无论我做什么,PHP都会将变量设置为数组?

无论我做什么,PHP都会将变量设置为数组?,php,mysql,scripting,Php,Mysql,Scripting,这是我遇到过的最奇怪的错误,我在这里束手无策。它只是从脚本开始的,我知道我唯一改变的是在名字和姓氏变量上运行大写函数 问题在于$lname变量。我将脚本设置为debug,并在每个进程中回显$lname,只有在将其设置为_SESSION变量后,它才会更改为数组。我所做的一切似乎都不管用。每次用户返回表单时,它都会取消设置所有会话变量,但我甚至尝试更改$u会话['reglname']的名称;我还是会有同样的事情发生 我在这里束手无策,如果你通读这篇文章,你会发现我已经尽了一切努力,把它作为一根绳子穿

这是我遇到过的最奇怪的错误,我在这里束手无策。它只是从脚本开始的,我知道我唯一改变的是在名字和姓氏变量上运行大写函数

问题在于$lname变量。我将脚本设置为debug,并在每个进程中回显$lname,只有在将其设置为_SESSION变量后,它才会更改为数组。我所做的一切似乎都不管用。每次用户返回表单时,它都会取消设置所有会话变量,但我甚至尝试更改$u会话['reglname']的名称;我还是会有同样的事情发生

我在这里束手无策,如果你通读这篇文章,你会发现我已经尽了一切努力,把它作为一根绳子穿过去。我想我可以编辑后续的脚本来解释它是一个数组,但是我更想弄清楚这里到底发生了什么,这样我以后就可以避免它了!请帮忙

//Start session
session_start();

unset($_SESSION['ERRMSG_ARR']);

//Include database connection details
require_once("$DOCUMENT_ROOT/../SQLlogin.php");

//Array to store validation errors
$errmsg_arr = array();

//Validation error flag
$errflag = false;

//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
    die('Failed to connect to server: ' . mysql_error());
}

//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
    die("Unable to select database");
}

//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

//Sanitize the POST values
$fname = clean($_POST['FirstName']);
$lname = clean($_POST['LastName']);
$email = clean($_POST['Email']);
$cemail = clean($_POST['ConfirmEmail']);
$bday = clean($_POST['BirthDay']);
$bmonth = clean($_POST['BirthMonth']);
$byear = clean($_POST['BirthYear']);

echo $lname;

//Capitalize first and last name
$fname = ucwords($fname);
$lname = ucwords($lname);

//Collate and format birthdate
if ($bmonth < 10){
    $bdate = clean("0".$bmonth."/".$bday."/".$byear);
}else{
    $bdate = clean($bmonth."/".$bday."/".$byear);
}

//Echo out vars to check
echo $fname."<br />".$lname;

//Server-side validations
if($fname == '' || strlen($fname) < 2 || strlen($fname) > 24 || strpbrk($fname, " ")) {
    $errmsg_arr[] = '*First name must be greater than 2 characters, less than 24, and contain no spaces!';
    $errflag = true;
}
if($lname == '' || strlen($lname) < 2 || strlen($lname) > 24 || strpbrk($lname, " ")) {
    $errmsg_arr[] = '*Last name must be greater than 2 characters, less than 24, and contain no spaces!';
    $errflag = true;
}
if(!ereg("[a-zA-Z]+", $fname, $lname)){
    $errmsg_arr[] = '*First and last name can contain only letters!';
    $errflag = true;
}
if ($email == '' || strlen($email) < 2 || strlen($email) > 32) {
    $errmsg_arr[] = '*Email address must be greater than 3 and less than 32 characters!';
    $errflag = true;
}
if ($cemail == '') {
    $errmsg_arr[] = '*Email address must be greater than 3 and less than 32 characters!';
    $errflag = true;
}
if ($email != $cemail) {
    $errmsg_arr[] = '*Email addresses do not match!';
    $errflag = true;
}
if (!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
    $errmsg_arr[] = '*The email address entered appears to be invalid. Please enter a valid email address';
    $errflag = true;
}
if($bday == '') {
    $errmsg_arr[] = '*Birthday field left blank!';
    $errflag = true;
}
if($bmonth == '') {
    $errmsg_arr[] = '*Birth month field left blank';
    $errflag = true;
}
if($byear == '') {
    $errmsg_arr[] = '*Birth year field left blank';
    $errflag = true;
}
$year = date(Y);
if(($year - $byear) < 18){
    $errmsg_arr[] = '*You must be 18 years or older to register as a Hoppr client!';
    $errflag = true;
}
$allowed_age = 18;
$bdatecheck = strtotime($byear.'-'.$bmonth.'-'.$bday);
$age = (time()-$bdatecheck)/31536000;
if($age >= $allowed_age) {

}else{
    $errmsg_arr[] = '*You must be 18 years or older to register as a Hoppr client!';
    $errflag = true;
}

//If there are input validations, redirect back to the registration form
if($errflag) {
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
    session_write_close();
    header("location: http://www.thehoppr.com/clients/registration.php");
    exit();
}

echo $_SESSION['reglname'];

//Set registration session vars
$_SESSION['regstep'] = (int) 0;
$_SESSION['regfname'] = (string) $fname;
(string) $_SESSION['reglname'] = (string) $lname;
$_SESSION['regemail'] = (string) $email;
$_SESSION['regbdate'] = (string) $bdate;

echo $_SESSION['reglname'];

//Perform the email check query
$checkqry = "SELECT * FROM clients WHERE email='".mysql_real_escape_string($email)."'";
$checkresult = mysql_query($checkqry);
$checkAry = mysql_fetch_array($checkresult, MYSQL_ASSOC);
if (empty($checkAry)){
    //No email found, send user to step 2
    $_SESSION['regstep'] = (int) 2;
}else{
    //Dupl email found, check for Hoppr registration
    $isReg = $checkAry['isReg'];
    if ($isReg == 0) {
        global $checkAry;
        //Email found but not registered. Send user to Facebook merge page
        $_SESSION['regstep'] = (int) 1;
        $_SESSION['regfbname'] = $checkAry['firstname']." ".$checkAry['lastname'];
        $_SESSION['regfbpic'] = $checkAry['imgURL'];
        $_SESSION['regfbid'] = $checkAry['facebookID'];
        $_SESSION['regfbbday'] = $checkAry['birthday'];
    }else{
        //Email found and is registered. Ask user for a different email
    }
}
这是你的问题:

if(!ereg("[a-zA-Z]+", $fname, $lname)){
我想你想要:

if(!ereg("[a-zA-Z]+", $fname.$lname)){

Ereg将在参数3中存储匹配项。

提示:在问题文本中使用一些段落分隔符。@Jared+1以满足您的请求。这是非常有用的,比如将代码分解为模块,以便更容易处理。Lol这里是var_dump$\会话['reglname']:Arraystring5 Arraydon别忘了接受答案。顺便说一句,ereg已被弃用:擦擦它,我以为它在工作。当我扔掉它的时候,我得到了这个信息:string5 Doe,如果输入的名字是John Doe。这是值得的+一个耐心地涉过所有这些。@Jacob-这是一个byVal。它返回字符串的长度和匹配项。因此,它使用了C样式的引用。当我考虑它的时候,你可能需要添加一个参考捕手如果!ereg[a-zA-Z]+,$fname.$lname,$tmpArr,否则函数可能会返回true。意大利面条代码的插图Jacob的代码。另外,替换$year=dateY;其中$year=日期'Y';尽量不要使用ereg,因为它已被弃用。