wamui Ответов: 2

Ошибка в моем коде, не могу ее найти. Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '}' в C:\xampp2\htdocs\checkout\server.php на линии 66


Parse error: syntax error, unexpected '}' in C:\xampp2\htdocs\checkout\server.php on line 66



это часть кода



// log user in fromlog in page
		if(isset($_POST['login'])){
			$uname = mysql_real_escape_string($_POST['uname']);
			$password = mysql_real_escape_string($_POST['password']);
			
			//ensure all fields filled
			if (empty($uname)){
				array_push($errors, "Username is required");
			}
			if (empty($password)){
				array_push($errors, "Password is required");
			}
			if (count($errors) == 0){
				$query = "SELECT * FROM users WHERE uname='$uname' AND 
                                                  password='$password'";
				$result = mysqli_query($db, $query);
				if (mysqli_num_rows($result) == 1) {
					//log user in
					$_SESSION['username'] = $username;
					$_SESSION['success'] = "You are now loggedin";
					header('location: login.php');	
				}else {     //this is line 66
		array_push($errors, " wrongusername/passwordcombination");
				}
			}


Что я уже пробовал:

пристально вглядываясь.
перезапуск компа. снова перекодировка. кажется, ничего не работает. я знаю, что это небольшая ошибка, но я не могу ее найти

Richard Deeming

В дополнение к уязвимости SQL-инъекции вы сохраняете пароли в виде обычного текста. НИКОГДА сделай это!
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]

PHP уже включает в себя функции, которые помогут вам сделать все правильно:
PHP: password_hash[^]
РНР: функцию password_verify[^]

Richard Deeming

И мы никак не можем ответить на ваш вопрос. Вы не сказали нам, какая строка является строкой 66, и нам нужно было бы увидеть весь предыдущий код, чтобы сосчитать открывающие и закрывающие фигурные скобки.

Основываясь на примере кода, который вы опубликовали, вы на самом деле потерянный закрывающая фигурная скобка.

wamui

//вот полный код



<?php
session_start();

$команда uname = "";
$аська = "";
$болтовня = "";
$errors = массив();

//подключение к базе данных
$db = mysqli_connect('localhost', 'root', 'registration');

//если нажата кнопка регистрация
if(isset($_POST['register'])){
$команде uname = использования mysql_real_escape_string($_POST, где['команде uname']);
$аська = использования mysql_real_escape_string($_POST, где['аськи']);
$джаббер = использования mysql_real_escape_string($_POST, где['бла']);
password_1 $ = использования mysql_real_escape_string($_POST, где['password_1']);
$password_2 = mysql_real_escape_string($_POST['password_2']);

//убедитесь, что поля формы заполнены правильно
if(empty($uname)){
array_push($errors, "требуется имя пользователя");
}
if(empty($jabber)){
array_push($errors, "требуется Jabber");
}
если(пусто($password_1)){
array_push($errors, "требуется пароль");
}
если (password_1$! = $password_2){
array_push($errors, " два пароля не совпадают");
}

//если ошибки нет, сохраните пользователя в базе данных
if (count($errors) == 0){
$sql = "вставить в пользователей (uname, icq, jabber, пароль)
Ценности ('$команде uname', '$аська', '$вздор', '$пароль)";
mysqli_query($db, $sql);
$_SESSION['uname'] = $uname;
$_SESSION['success'] = "теперь вы вошли в систему";
заголовок('location: autoshop.html'); //перенаправление на домашнюю страницу
}
}

// вход пользователя в систему fromlog in page
if(isset($_POST['login'])){
$команде uname = использования mysql_real_escape_string($_POST, где['команде uname']);
$password = mysql_real_escape_string($_POST['password']);

//убедитесь, что все поля заполнены
if (empty($uname)){
array_push($errors, "требуется имя пользователя");
}
if (empty($password)){
array_push($errors, "требуется пароль");
}
if (count($errors) == 0){
$запрос = "выбрать * из пользователей, где команде uname='$команде uname' и пароль='$пароль";
$result = mysqli_query($db, $query);
if (mysqli_num_rows($result) == 1) {
//войти в систему пользователя
$_SESSION['username'] = $username;
$_SESSION['success'] = "теперь вы вошли в систему";
заголовок('location: login.php');
}else { // это строка 66
array_push($errors, " неправильная комбинация имени пользователя и пароля");
}
}



}

//выход из системы
if(isset($_GET['logout'])){
session_destroy();
unset($_SESSION['username']);
заголовок('location: login.php');

}

?>

2 Ответов

Рейтинг:
1

Patrice T

$query = "SELECT * FROM users WHERE uname='$uname' AND
password='$password'";

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
1

wamui

//вот полный код здесь


<?php 
		session_start();
		
		$uname = "";
		$icq = "";
		$jabber = "";
		$errors = array();
		
		//connect to the database
		$db = mysqli_connect('localhost', 'root', '', 'registration');
		
		//if the register button is clicked
		if(isset($_POST['register'])){
			$uname = mysql_real_escape_string($_POST['uname']);
			$icq = mysql_real_escape_string($_POST['icq']);
			$jabber = mysql_real_escape_string($_POST['jabber']);
			$password_1 = mysql_real_escape_string($_POST['password_1']);
			$password_2 = mysql_real_escape_string($_POST['password_2']);
			
			//ensure that form fields are filled well
			if(empty($uname)){
				array_push($errors, "Username is required");
			}
			if(empty($jabber)){
				array_push($errors, "Jabber is required");
			}
			if(empty($password_1)){
				array_push($errors, "Password is required");
			}
			if($password_1 != $password_2){
				array_push($errors, " Two passwords do not match");
			}
			
			//if there is no error, save user to database
			if (count($errors) == 0){
				$sql = "INSERT INTO users (uname, icq, jabber, password)
						VALUES ('$uname', '$icq', '$jabber', '$password')";
				mysqli_query($db, $sql);
				$_SESSION['uname'] = $uname;
				$_SESSION['success'] = "You are now logged in";
				header('location: autoshop.html'); //redirect to home page
				}
		}
		
		// log user in fromlog in page
		if(isset($_POST['login'])){
			$uname = mysql_real_escape_string($_POST['uname']);
			$password = mysql_real_escape_string($_POST['password']);
			
			//ensure all fields filled
			if (empty($uname)){
				array_push($errors, "Username is required");
			}
			if (empty($password)){
				array_push($errors, "Password is required");
			}
			if (count($errors) == 0){
				$query = "SELECT * FROM users WHERE uname='$uname' AND password='$password'";
				$result = mysqli_query($db, $query);
				if (mysqli_num_rows($result) == 1) {
					//log user in
					$_SESSION['username'] = $username;
					$_SESSION['success'] = "You are now logged in";
					header('location: login.php');	
				}else {           //this is line 66
					array_push($errors, " wrongusername/password combination");
				}
			}
			
			
			
		}

		//logout
		if(isset($_GET['logout'])){
			session_destroy();
			unset($_SESSION['username']);
			header('location: login.php');
			
		}

?>


Richard MacCutchan

Вы все еще храните пароли в открытом тексте, поэтому все ваше предприятие открыто для атаки и уничтожения хакерами. Или даже дети, с такой ошибкой школьника.