<?php
require('connect.php');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if(isset($_POST['username']) && isset($_POST['password'])){
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$sql = 'SELECT count(id) as count FROM users WHERE username=?';
$query = $conn->prepare($sql);
$query->execute([$username]);
$count_users = $query->fetch();
if ((int)$count_users['count'] === 0) {
$sql = "INSERT INTO users (`username`, `password`, `email`)
VALUES ('$username', '$password', '$email')";
} else {
echo "<script>alert('Логин уже занят')</script>";
}
if ($conn->query($sql) === TRUE) {
header("Location: /");
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
?>
//я бы на вашем месте попробовал вот так для начала
require('connect.php');
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if (isset($_POST['username']) && isset($_POST['password'])) {
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$countUsersQuery = 'SELECT count(id) as count_users FROM users WHERE username=?';
$query = $conn->prepare($countUsersQuery);
$query->execute([$username]);
$countUsersResult = $query->fetch();
if ((int)$countUsersResult['count_users'] === 0) {
$insertUserQuery = "
INSERT INTO users (`username`, `password`, `email`)
VALUES ('$username', '$password', '$email')";
} else {
echo "<script>alert('Логин уже занят')</script>";
}
if ($conn->query($insertUserQuery) === true) {
header("Location: /");
} else {
echo "Error: " . $insertUserQuery . "<br>" . $conn->error;
}
$conn->close();
}
Сейчас при дублировании логина, идёт просто переход не срабатывает условие.
$sql = 'SELECT count(id) as count FROM users WHERE username=?';
...
echo "<script>alert('Логин уже занят')</script>";
...
if ($conn->query($sql) === true) {
header("Location: /");
}
=== true
. Но, думаю, просто у вас в коде где-то ещё какая-то подобная ерунда написана.