Olumideoluwatosin Ответов: 1

Предупреждение: mysqli_escape_string() ожидает, что параметр 1 будет mysqli, null задан в C:\wamp64\www\form.php на линии 16


Всем доброго дня. Я пытался отправить форму в базу данных, и при отправке формы вышеприведенное предупреждение появилось. Хотя форма была успешно отправлена. Как удалить предупреждение:
Warning: mysqli_escape_string() expects parameter 1 to be mysqli, null given in C:\wamp64\www\form.php on line 16


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

Here is what i have tried.
<pre><?php
// the next line check for the variable POST.
	if(array_key_exists('First_Name', $_POST) OR array_key_exists('Surname', $_POST) OR array_key_exists('Address', $_POST) OR array_key_exists('Email', $_POST) OR array_key_exists('password', $_POST)){
	
		if($_POST['Email'] == ''){
			
			echo "<p> Email Address is required </p>";
		} else if($_POST['password'] == ''){
			
			echo "<p> Password is required </p>";
		}
			
		// to check if the user exist
		else{
			
			$query = "Select 'id' from 'tbl_address_book' where Email = '".mysqli_real_escape_string($link, $_POST['Email'])."'";
			$result = mysqli_query($link, $query);
			
			if(mysqli_num_rows($result) > 0){
				
				echo "<p> That Email has already been taken </p>";
			} 
			else {
				
			$query = "INSERT INTO 'tbl_address_book' ('First_Name', 'Surname', 'Address', 'Email', 'password') Values ('".mysqli_real_escape_string($link, $_POST['First_Name'])."', '".mysqli_real_escape_string($link, $_POST['Surname'])."', '".mysqli_real_escape_string($link, $_POST['address'])."', '".mysqli_real_escape_string($link, $_POST['Email'])."', '".mysqli_real_escape_string($link, $_POST['Password'])."')";
			
			
			if(mysqli_query($link, $query));
				{
					
					echo "<p> You have been successfully added to our Address Book! </p>";
				} 
				
			}
	
		}
	}
		


$link = mysqli_connect("localhost", "root", "", "addressbook");

		if(mysqli_connect_error()){
			
			die ("There was error connecting to the database");
			
		}
		
?>		

Richard Deeming

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

PHP: SQL-инъекция - руководство пользователя[^]

Richard Deeming

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

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

Olumideoluwatosin

- Спасибо, сэр. Но будет ли это по-прежнему решать сообщение об ошибке?

Richard Deeming

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

РНР: Подготовленные инструкции и хранимые процедуры - руководство пользователя[^]
PHP: mysqli::подготовка[^]
РНР: mysqli_stmt::bind_param[^]

Olumideoluwatosin

Ладно, я перезвоню тебе как можно скорее. Спасибо.

Olumideoluwatosin

Пожалуйста, найдите решение, которое я получил без какого-либо сообщения об ошибке. Спасибо.

1 Ответов

Рейтинг:
2

Olumideoluwatosin

<?php

$link = mysqli_connect("localhost", "root", "", "addressbook");

		if(mysqli_connect_error()){
			
			die ("There was error connecting to the database");
			
		}
		
		
		// the next line check for the variable POST.
	if(array_key_exists('First_Name', $_POST) OR array_key_exists('Surname', $_POST) OR array_key_exists('Address', $_POST) OR array_key_exists('Email', $_POST) OR array_key_exists('password', $_POST)){
	
	if($_POST['First_Name'] == ''){
			
			echo "<p> Your name is required </p>";
		} 
	
	else if($_POST['Surname'] == ''){
			
			echo "<p> Your Surname is required </p>";
		} 
	
		else if($_POST['Email'] == ''){
			
			echo "<p> Email Address is required </p>";
		} 
		
		else if($_POST['password'] == ''){
			
			echo "<p> Password is required </p>";
		}
		
	$First_Name = mysqli_real_escape_string($link, $_POST['First_Name']);
	$Surname = mysqli_real_escape_string($link, $_POST['Surname']);
	$Address = mysqli_real_escape_string($link, $_POST['Address']);
	$Email = mysqli_real_escape_string($link, $_POST['Email']);
	$password = mysqli_real_escape_string($link, $_POST['password']);
	
	$sql = "INSERT INTO tbl_address_book (First_Name, Surname, Address, Email, password) VALUES (?, ?, ?, ?, ?)";
	$stmt = mysqli_stmt_init($link);
	if(!mysqli_stmt_prepare($stmt, $sql)){
		
		echo "SQL Error";	
	}
	
		else{
			
			mysqli_stmt_bind_param($stmt, "sssss", $First_Name, $Surname, $Address, $Email, $password);
			mysqli_stmt_execute($stmt);
			
		}
			
	}
?>
	
		<div class="container">
		
		<form method = "post">
		
		<input type ="text" name ="First_Name" placeholder ="Your Name"><br><br>
		
		<input type ="text" name ="Surname" placeholder ="Your Surname"><br><br>
		
		<input type ="text" name ="Address" placeholder ="Your Address"><br><br>
		
		<input type ="text" name ="Email" placeholder ="Your Email"><br><br>
		
		<input type ="password" name ="password" placeholder ="Password"><br><br>
		
		<input type ="submit" value ="Sign Up">
		
		</form> 
		
	</div>