Проблема, предотвратив реестр дублированных пользователей PHP - MYSQL

У меня есть приложение для Android, в котором я соглашаюсь на базу данных MySql из-за php.

Я пробую способствовать тому, чтобы, когда пользователь пробует регистрироваться, и уже он существовал, не вводите данных в BBDD.

Проблема приходит, что, поместив if что считает линии select или что-нибудь в этом роде, так как я попытался с достаточно select, никогда не выполняй insert что находится внутри if.

Что у меня есть прокомментированный звук какие-то из выборов, с которыми также я попытался без успеха.

С другой стороны в базе данных у меня есть первичные ключи, которые phpadmin позволяет вводить удвоенные без какой-либо проблемы.

Код:

<?php

$connect = mysqli_connect("localhost","root","root","comuniero");

if(mysqli_connect_errno($connect))
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
    echo "success";
}

$email = isset($_POST['email']) ? $_POST['email'] : '';
$password = isset($_POST['password']) ? $_POST['password'] : '';


/*mysqli_select_db($connect,"comuniero");*/
$sql= mysqli_query($connect,"SELECT COUNT(*) AS total FROM users WHERE email='$email'");
$row=mysqli_fetch_object($sql);
if($row->total > 0){
    $query = mysqli_query($connect, "insert into users (username,email,password) values ('$email','$email','$password') ");
}
/*
$sql = "SELECT * FROM users WHERE email='$email' ";
$result=mysqli_query($connect,$sql) or die (mysql_error());
if(mysqli_num_rows($result)>0){
        $query = mysqli_query($connect, "insert into users (username,email,password) values ('$email','$email','$password') ");
}
}
/*$result = $connect->query($sql);

if ($result->num_rows > 0) {
    $query = mysqli_query($connect, "insert into users (username,email,password) values ('$email','$email','$password') ");*/
    /*
$n1=1;
$n2=1;
if ($n1==$n2) {
    $query = mysqli_query($connect, "insert into users (username,email,password) values ('$email','$email','$password') ");
*/
else {
    echo "0 results";
}

mysqli_close($connect);
?>
2
задан 07.09.2016, 13:05
2 ответа

Действительно, как он говорит, что Альваро условие наоборот. Другой выбор состоял бы в том, чтобы происходить просто INSERT в else, который у тебя есть внизу.

С другой стороны, ты мог бы уберегаться $row=mysqli_fetch_object($sql); используя для условия if следующую функцию: if(mysqli_num_rows($sql)>0) (оставляя такое условие как дела в твоем примере, который я повторяю, он плохой)

В конце концов, говорить тебе, что, если действительно ты считаешь определенной PRIMARY KEY (если это username или электронная почта) ты мог бы уберегаться вся проверка используя

insert ignore into users (username,email,password) values ('$email','$email','$password')
1
ответ дан 24.11.2019, 13:28

Проблема, которая будет способствовать тому, чтобы он не работал insert что находится внутри if дело в том, что условие помещено наоборот, как он должен бы быть: ты хочешь, чтобы данные ввели, если не существует реестр, и что, если уже он существует, не вводите данных в BBDD. Тогда было бы нужно делать insert если результат COUNT(*) его 0, но в if подтверждено, что был больше, чем 0:

$sql= mysqli_query($connect,"SELECT COUNT(*) AS total FROM users WHERE email='$email'");
$row=mysqli_fetch_object($sql);
if($row->total > 0){
    // insert va aquí, pero sólo se ejecuta si hay un usuario con ese email
}

Это будет способствовать тому, чтобы он только был введен в базе данных, если уже существует реестр с этой электронной почтой, которая является тем, что хочется предотвращать. В Вашем месте ты был бы должен подтверждать, что $row->total его было 0. С этим он осуществится insert исключительно, когда не будет существовать уже пользователь с этой электронной почтой:

$sql= mysqli_query($connect,"SELECT COUNT(*) AS total FROM users WHERE email='$email'");
$row=mysqli_fetch_object($sql);
if($row->total == 0){
    // insert va aquí, y sólo se ejecuta si no hay ningún usuario con ese email
}
1
ответ дан 24.11.2019, 13:28