У меня есть приложение для 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);
?>
Действительно, как он говорит, что Альваро условие наоборот. Другой выбор состоял бы в том, чтобы происходить просто 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')
Проблема, которая будет способствовать тому, чтобы он не работал 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
}