PHP parse/syntax errors; and how to solve them?(17个答案)
四年前关闭。
嗨,我看到另一个类似的帖子,但似乎不适合我的问题。
我正在为一个网站写一个注册脚本,并且已经到了将数据输入数据库的最后一点,但是我得到了这个错误。。。
分析错误:语法错误,意外的“”(T_包含的_和_空格),
需要标识符(T_字符串)或变量(T_变量)或数字
(T_NUM_STRING)在第46行的C:\wamp\www\fastfood\app\register.php中
我看是说有一个意外,但我看不出来。我需要所有我没有的我?
如果有人能看看这个,让我知道我哪里做错了,我将不胜感激。
我有两个脚本(如果你算上我的数据库配置,有三个)一个包含我调用的所有函数。
<?php
require_once "config.php";
function dbconnect(){
global $dbhost,$dbuser,$dbpass,$connectdb;
if (!$connectdb){
echo "failed to connect to database" . mysqli_connect_error();
}
}
function dbdisconnect(){
global $connectdb;
if(mysqli_close($connectdb)){
}else{
echo "an error occured while attempting to close the connection to the database";
}
}
//notworking
function getCategories(){
global $connectdb;
$query = mysqli_query($connectdb,"SELECT category_name FROM categories");
while ($result=mysqli_fetch_array($query)){
$options=$result['catergory_name'];
echo "$options";
}
}
function randStrGen($len){
$result = "";
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
$charArray = str_split($chars);
for($i = 0; $i < $len; $i++){
$randItem = array_rand($charArray);
$result .= "".$charArray[$randItem];
}
return $result;
}
function mysqlclean($clean){
global $connectdb;
mysqli_real_escape_string($connectdb, $clean);
return $clean;
}
function checkUsername($a){
global $connectdb;
$query = $connectdb->query("SELECT username FROM users WHERE username = '$a'");
$result = $query->num_rows;
if ($result !=0){
return true;
}else{
return false;
}
}
function verify($a,$b){
if ($a == $b){
return true;
}else{
return false;
}
}
function encrypt($a,$b){
$encrPass = hash('sha256',$b.$a);
return $encrPass;
}
?>
以及主要的注册脚本:
<html>
<head></head>
<body>
<?php
require'assets/functions.php';
$errors = array();
$cleanData =array();
//fetch data from form and add to array
if (isset($_POST['submit'])){
$data = array('uName'=>$_POST['uName'],
'pass'=>$_POST['pass'],
'verPass'=>$_POST['verPass'],
'fName'=>$_POST['fName'],
'lName'=>$_POST['lName'],
'dob'=>$_POST['dob'],
'email'=>$_POST['email'],
'verEmail'=>$_POST['verEmail'],
'address'=>$_POST['address'],
'city'=>$_POST['city'],
'suburb'=>$_POST['suburb'],
'country'=>$_POST['country'],
);
}
//loop form data and escape
foreach ($data as $key => $value) {
$cleanData[$key] = mysqlclean($value);
}
//check if user exists, returns true if not unique
if (checkUsername($cleanData['uName'])){
$errors['uName'] = "error";
}
//check if password matches
if (verify($data['pass'],$data['verPass'])){
}else{$errors['pass'] = "error";}
//check if email matches
if (verify($data['email'],$data['verEmail'])){
}else{$errors['email'] = "error";}
if (empty($errors)){
$emailVerStr = randStrGen(100);
$uniqueKey = randStrGen(100);
$encrPass = encrypt($cleanData['pass'],$uniqueKey);
$query = $connectdb->query("INSERT INTO users(username,fName,lName,dob,emailAddress,address,city,suburb,country,password,emailVerStr,uniqueKey) VALUES('$cleanData['uName']','$cleanData['fName']','$cleanData['lName']','$cleanData['dob']','$cleanData['email']','$cleanData['address']','$cleanData['city']','$cleanData['suburb']','$cleanData['country']','$encrPass','$emailVerStr','$uniqueKey')");
if (!$query){
echo 'an error has occured!' mysqli_error();
}
}
echo '<pre>',print_r($data,true),'</pre>' ;
echo '<pre>',print_r($errors,true),'</pre>' ;
echo '<pre>',print_r($cleanData,true),'</pre>' ;
?>
<div id=register>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<?php if (array_key_exists('username', $errors)){
echo '<span>Username</span><input type="text" name="uName" value="'. $data['uName'] .'" placeholder="desired username" autofocus required><span>username taken</span></br>';
}else{
echo '<span>Username</span><input type="text" name="uName" value="'. $data['uName'] .'" placeholder="desired username" autofocus required></br>';
}
if (array_key_exists('pass', $errors)){
echo '<span>Password</span><input type="password" name="pass" value="" placeholder="enter password"required><span class=error>Passwords did not match</span></br>';
}else{
echo '<span>Password</span><input type="password" name="pass" value="'. $data['uName'] .'" placeholder="enter password"required></br>';
}
echo '<input type="password" name="verPass" value="'. $data['verPass'] .'" placeholder="re-enter password"required></br>
<span>First Name</span><input type="text" name="fName" value="'. $data['fName'] .'" required></br>
<span>Last Name</span><input type="text" name="lName" value="'. $data['lName'] .'" required></br>
<span>D.O.B</span><input type="date" name="dob" required></br>';
if(array_key_exists('email', $errors)){
echo '<span>Email</span><input type="email" name="email" value="'. $data['email'] .'" required><span class=error>Email did not match</span></br>';
}else{
echo '<span>Email</span><input type="email" name="email" value="'. $data['email'] .'" required></br>';
}
echo '<input type="email" name="verEmail" value="'. $data['email'] .'" required></br>
<span>Address</span><input type="text" name="address" value="'. $data['address'] .'" required></br>
<span>City</span><input type="text" name="city" value="'. $data['city'] .'" required></br>
<span>Suburb</span><input type="text" name="suburb" value="'. $data['suburb'] .'" required></br>
<span>Country</span><input type="text" name="country" value="New Zealand" readonly></br>
<input type="submit" name="submit" value="Register">
</form>';
?>
</div>
</body>
</html>
为了节省您的时间,这里的sql查询让我很难过
if (empty($errors)){
$emailVerStr = randStrGen(100);
$uniqueKey = randStrGen(100);
$encrPass = encrypt($cleanData['pass'],$uniqueKey);
$query = $connectdb->query("INSERT INTO users(username,fName,lName,dob,emailAddress,address,city,suburb,country,password,emailVerStr,uniqueKey) VALUES('$cleanData['uName']','$cleanData['fName']','$cleanData['lName']','$cleanData['dob']','$cleanData['email']','$cleanData['address']','$cleanData['city']','$cleanData['suburb']','$cleanData['country']','$encrPass','$emailVerStr','$uniqueKey')");
if (!$query){
echo 'an error has occured!' mysqli_error();
}
}
我很感激你的帮助。
if (empty($errors))
{
$emailVerStr = randStrGen(100);
$uniqueKey = randStrGen(100);
$encrPass = encrypt($cleanData['pass'], $uniqueKey);
$query = $connectdb->query("INSERT INTO users(username,fName,lName,dob,emailAddress,address,city,suburb,country,password,emailVerStr,uniqueKey) VALUES('{$cleanData['uName']}','{$cleanData['fName']}','{$cleanData['lName']}','{$cleanData['dob']}','{$cleanData['email']}','{$cleanData['address']}','{$cleanData['city']}','{$cleanData['suburb']}','{$cleanData['country']}','{$encrPass}','{$emailVerStr}','{$uniqueKey}')");
if (!$query)
{
echo 'an error has occured!' . mysqli_error();
}
}