pratibha pattu Ответов: 2

Mysqli_num_rows() ожидает параметр 1, чтобы быть mysqli_result логическое приведены в PHP


<?php

session_start();


$con = mysqli_connect('localhost','root','123456');

mysqli_select_db($con, 'usserregistration');

$name = $_POST['user'];
$pass = $_POST['password'];

$s = " select * from usertable where name = '$name' ";

$result = mysqli_query($con, $s);

$num = mysqli_num_rows($result);

if($num == 0){
	echo "Usrtname Already Taken";
}else{
	$reg= " insert into usertable(name , password) values ('$name' , '$pass')";
	mysqli_query($con, $reg);
	echo" Registration Sucessfull";
}

?>


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

попробовал изменить параметры, а также изменить имя таблицы

Richard Deeming

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

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

Richard Deeming

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

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

2 Ответов

Рейтинг:
2

Corrosio

Я поиграл с вашим кодом, привел его в действие. В вашем коде были изъяны.
Для понимания скопируйте мой код, как он есть .. работает.

создайте таблицу sql со следующей схемой:

CREATE TABLE `registration` (
    `id` 
           INT(1) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `name`
           VARCHAR(50),
    `lastname` 
           VARCHAR(50),
     `pass`
           VARCHAR(50)
)  

Создайте html., сохраните его как php-файл. Подобный этому:

   <form action="action.php" method="POST" id="form_example">
   Name:
        <input type="text" name="name" /><br />
   Lastname:
        <input type="text" name="lastname" /><br />
   Password:
        <input type="text" name="pass" /><br /> <p>
   <br />
   <button type="submit" form="form_example" > Odeslat ==> </button>
   <br />
</form>


Создайте php-файл "action.php-вот так, например:
<?php

//session_start();

$dbName = ""; // here is name of your database

$con = new mysqli("localhost", "root", "", $dbName);
$con -> set_charset("utf8");

$name = trim($_POST['name']);
$lastname = trim($_POST['lastname']);
$pass = trim($_POST['pass']);

$sql = "SELECT*FROM registration WHERE `name`= '$name' AND `lastname`='$lastname' AND `pass`='$pass'";

$reg = "INSERT INTO registration (name, lastname, pass) VALUES('$name', '$lastname', '$pass')";

if($result = $con->query($sql)) {
    $rowCount = $result->num_rows;

    if($rowCount > 0) {
       echo "Usrtname Already Taken";
    } else {
        $con->query($reg);
        echo" Registration Sucessfull";
    }
}
$con->close();
?>


Рейтинг:
1

Richard MacCutchan

Пожалуйста, сначала проверьте документацию, когда вы получите сообщение об ошибке. Вы всегда должны проверять возвращаемые значения, чтобы увидеть, был ли ваш запрос успешным или нет, никогда не предполагайте, что он был правильным. Видеть РНР: в mysqli::запрос - руководство по эксплуатации[^]