Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP Как проверить есть в базе такое имя пользователя ?

n0bleman Ученик (3), открыт 1 неделю назад
Не могу подредатикровать свой код чтобы проверял есть ли вбазе такой пользователь
таблица имеет
id,name,age
вот код добавляет в таблицу имя и возраст
как перед добавление проверить есть ли такое имя уже в базе или нет подредактируйте именно даунный код все работает но можно добавлять бескоенчно
<?php
if (isset($_POST["username"]) && isset($_POST["userage"])) {

$conn = new mysqli("lдщсрщые", "fr7910hy_users", "PASS", "TABLE");
if($conn->connect_error){
die("Ошибка: " . $conn->connect_error);
}
$name = $conn->real_escape_string($_POST["username"]);
$age = $conn->real_escape_string($_POST["userage"]);
$sql = "INSERT INTO Users (name, age) VALUES ('$name', $age)";
if($conn->query($sql)){
echo "Данные успешно добавлены";
} else{
echo "Ошибка: " . $conn->error;
}
$conn->close();
}
?>
3 ответа
Татьяна Шеховцова Высший разум (520696) 1 неделю назад
Ну даёшь, прям логин-пароль от БД выкладывать. Беги менять сейчас

А проверяют отдельным запросом, выбирай пользователя по нику
Андрей Высший разум (460550) 1 неделю назад
Сделай в БД для столбца username уникальный индекс. И тогда попытка добавить имя, которое уже есть, будет возвращать ошибку.

Вот это вот:
 $age = $conn->real_escape_string($_POST["userage"]); 
является уязвимостью. Метод real_escape_string должен применяться только к строкам: тем самым, которые внутри запроса обрамляются кавычками. А числа надо приводить к числовому типу:
 $age = (int)$_POST["userage"]; 

Но куда надёжнее вообще не встраивать значения в запросы, а использовать параметризованные запросы. Начиная с PHP 8.1 можно делать так:
 $req = $conn->prepare("INSERT INTO Users (name, age) VALUES (?, ?)");
if($req->execute([$_POST["username"], $_POST["userage"]])) {
n0blemanУченик (3) 1 неделю назад
Так индекс уже есть базовый нумерация вроде ? id это и есть же вроде его рандомить что ли ? если да то как и зачем это если уникальный индекс по сути имя один фиг по имени искать или по индексу
Анонимус Мудрец (14718) 1 неделю назад
 <?php  
if (isset($_POST["username"]) && isset($_POST["userage"])) {
$conn = new mysqli("localhost", "fr7910hy_users", "PASS", "TABLE");
if($conn->connect_error){
die("Ошибка: " . $conn->connect_error);
}
$name = $conn->real_escape_string($_POST["username"]);
$age = $conn->real_escape_string($_POST["userage"]);
// Проверяем, существует ли пользователь с таким именем
$check_sql = "SELECT * FROM Users WHERE name='$name'";
$result = $conn->query($check_sql);
if ($result->num_rows > 0) {
// Пользователь с таким именем уже существует
echo "Ошибка: Пользователь с таким именем уже существует.";
} else {
// Если пользователя нет, добавляем нового
$sql = "INSERT INTO Users (name, age) VALUES ('$name', $age)";
if($conn->query($sql)){
echo "Данные успешно добавлены";
} else {
echo "Ошибка: " . $conn->error;
}
}
$conn->close();
}
?>
n0blemanУченик (3) 1 неделю назад
Спасибо
n0blemanУченик (3) 1 неделю назад
А как потом по имени найти и удалить из таблицы ?всю строку с этим именем
Анонимус Мудрец (14718) n0bleman, чтобы удалить строку из таблицы по имени пользователя, вы можете использовать SQL-запрос DELETE.
АнонимусМудрец (14718) 1 неделю назад
 // Код для удаления пользователя по имени 
if (isset($_POST["delete_username"])) {
$conn = new mysqli("localhost", "fr7910hy_users", "PASS", "TABLE");
if($conn->connect_error){
die("Ошибка: " . $conn->connect_error);
}
$delete_name = $conn->real_escape_string($_POST["delete_username"]);
// Удаляем пользователя по имени
$delete_sql = "DELETE FROM Users WHERE name='$delete_name'";
if ($conn->query($delete_sql) === TRUE) {
echo "Пользователь успешно удалён.";
} else {
echo "Ошибка при удалении пользователя: " . $conn->error;
}
$conn->close();
}
?>
Похожие вопросы