【发布时间】:2020-01-26 00:33:16
【问题描述】:
我的代码有错误
( ! ) 解析错误:语法错误,意外的 'else' (T_ELSE) in C:\wamp64\www\cms\include\registor.php 在第 32 行`
第 32 行
我找不到解决办法。
这是我的代码:
<?php
include_once('config.php');
if(isset($_POST['submit'])){
$username = strip_tags($_POST['username']);
$email = $_POST['email'];
$gender = $_POST['gender'];
$about = strip_tags($_POST['about']);
$facebook = htmlspecialchars($_POST['facebook']);
$snapchat = htmlspecialchars($_POST['snapchat']);
$twitter = htmlspecialchars($_POST['twitter']);
$date = date("Y-m-d");
if(empty($username)){
echo '<div class="alert alert-danger" role="alert">الرجاء ادخال اسم المستخدم</div>';
}elseif(empty($email)){
echo '<div class="alert alert-danger" role="alert">الرجاء ادخال البريد الالكتروني</div>';
}elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo '<div class="alert alert-danger" role="alert">الرجاء ادخال بريد الكتروني صحيح</div>';
}elseif(empty($_POST['password'])){
echo '<div class="alert alert-danger" role="alert">الرجاء ادخال كلمة المرور</div>';
}elseif(empty($_POST['con_password'])){
echo '<div class="alert alert-danger" role="alert">الرجاء تاكيد كلمة المرور</div>';
}elseif($_POST['password'] != $_POST['con_password']){
echo '<div class="alert alert-danger" role="alert">كلمة المرور غير متطابقة</div>';
}else{
$sql_username = mysqli_query ($conn, "SELECT `username` FROM `users` WHERE `username` = '$username'");
$sql_email = mysqli_query ($conn, "SELECT `email` FROM `users` WHERE `email` = '$email'");
if(mysqli_num_rows($sql_username) > 0){
echo '<div class="alert alert-danger" role="alert">عذراً لكن اسم المستخدم مسجل بالفعل</div>';
}elseif(mysqli_num_rows($sql_email) > 0)
echo '<div class="alert alert-danger" role="alert">عذراً لكن الاميل مسجل بالفعل</div>';
}else{
if(isset($_FILES['image'])){
$image = $_FILES['image'];
$image_name = $image['name'];
$image_tmp = $image['tmp_name'];
$image_size = $image['size'];
$image_error = $image['error'];
$image_exe = explode('.' , $image_name);
$image_exe = strtolower(end($image_exe));
$allowd = array('png','gif','jpg','jpeg');
if(in_array($image_exe , $allowd)){
if($image_error === 0){
if($image_size <= 3000000){
$new_name = uniqid('user',false) . '.' . $image_exe;
$image_dir = '../images/avatar/' . $new_name;
$image_db = 'images/avatar/' . $new_name;
if(move_uploaded_file($image_tmp , $image_dir)){\
$password = md5($_POST['password']);
$insert = "INSERT INTO `users` (`username`,
`email`,
`password`,
`gender`,
`avatar`,
`about_user`,
`facebook`,
`twitter`,
`snapchat`,
`reg_date`,
`role`)
VALUES
('$username',
'$email',
'$password',
'$gender',
'$image_db',
'$about',
'$facebook',
'$snapchat',
'$twitter',
'$date',
'user')";
$insert_sql = mysqli_query($conn , $insert);
if(isset($insert_sql)){
echo '<div class="alert alert-success" role="alert">تمت عملية التسجيل بنجاح</div>'
}
}else{
echo '<div class="alert alert-danger" role="alert">عذراً حدث خطا اثناء رفع الصورة</div>';
}
}else{
echo '<div class="alert alert-danger" role="alert">عذراً حجم الصورة اكبر من 2 ميغابايت</div>';
}
}else{
echo '<div class="alert alert-danger" role="alert">عذراً ’ حدث خطاء غير متوقع اثناء رفع الصورة</div>';
}
}else{
echo '<div class="alert alert-danger" role="alert">الرجاء اختيار صوره صالحة</div>';
}
}
}
}
?>
谢谢你的帮助
【问题讨论】:
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug。 切勿将$_POST、$_GET或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。htmlspecialchars不是 SQL 的转义方法。 -
注意:object-oriented interface to
mysqli明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query接口混淆,因为缺少单个i会导致麻烦。示例:$db = new mysqli(…)和$db->prepare("…")程序接口很大程度上是 PHP 4 时代引入mysqliAPI 时的产物,不应在新代码中使用。 -
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。当任何现代development framework(如Laravel)带有强大的authentication system 内置时,请不要编写自己的身份验证系统。至少遵循 recommended security best practices 并且永远不要将密码存储为纯文本 或 SHA1 或 MD5 等弱哈希。
-
这段代码的结构使其非常非常难以理解。这主要是因为嵌套级别过高。其次是由于缺乏一致的缩进。解决此类问题的最佳方法是通过将代码转换为函数并调用这些函数来降低复杂性,而不是使用大量嵌套的条件。
-
您在此行末尾缺少
{:}elseif(mysqli_num_rows($sql_email) > 0)
标签: php mysql syntax-error php-5.6