Как можно реализовать проверку на уникальность вводимого поля:
схема базы данных:
CREATE TABLE `humans` (
`id` int(11) NOT NULL auto_increment,
`lastname` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
файл подключения к бд config/db.php:
<?php
$databaseHost = 'localhost';
$databaseName = 'simple';
$databaseUsername = 'root';
$databasePassword = '';
$mysqli = mysqli_connect($databaseHost, $databaseUsername, $databasePassword, $databaseName);
?>
html форма:
<html>
<head>
<title>Добавление</title>
</head>
<body>
<form action="add.php" method="post" name="form1">
<table width="25%" border="0">
<tr>
<td>Фамилия</td>
<td>
<input type="text" name="lastName">
</td>
</tr>
<tr>
<td>Имя</td>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<td>Отчество</td>
<td>
<input type="text" name="patronymic">
</td>
</tr>
</table>
</form>
</body>
</html>
И сам скрипт , по которому вопрос:
<html>
<head>
<title>Добавление ++</title>
</head>
<body>
<?php
include_once("./config/db.php");
if(isset($_POST['Submit'])) {
$lastName = stripslashes(trim($_POST['lastName']));
$name = stripslashes(trim($_POST['name']));
// проверка на пустые поля
if(empty($lastName) || empty($name) ) {
if(empty($lastName)) {
echo "<font color='red'>Заполните фамилию</font><br/>";
}
if(empty($name)) {
echo "<font color='red'>Заполните имя</font><br/>";
}
//link to the previous page
echo "<br/><a href='javascript:self.history.back();'>Назад</a>";
} else {
// if all the fields are filled (not empty)
//insert data to database
$result = mysqli_query($mysqli, "INSERT INTO humans(lastname,name) VALUES('$lastName','$name')");
//display success message
echo "<font color='green'>Успех";
echo "<br/><a href='index.php'>Результат</a>";
}
}
?>
</body>
</html>
Как мне грамотно провести проверку на то что :
если в базе уже есть такое имя его не добавлять, оставить как есть, а фамилию просто перезаписать не проверять есть она или нет.
if(isset($_POST['submit']))
{
$err = array();
$query = mysql_query("SELECT COUNT(id) FROM users WHERE login='".mysql_real_escape_string($_POST['login'])."'");
if(mysql_result($query, 0) > 0)
{
$err[] = "Пользователь с таким логином уже существует в базе данных";
}
if(count($err) == 0)
{
$login = $_POST['login'];
$sql = mysql_query("INSERT INTO users
(`login``) VALUES ('$login')");
if ($sql) {
echo "даные переданы";
}
else
{
echo "даные не переданы";
}
//header("Location: login.php"); exit();
}
else
{
print "<b>При регистрации произошли следующие ошибки:</b><br>";
foreach($err AS $error)
{
print $error."<br>";
}
}
}
Уникальность полей стоит сделать на уровне базы данных. Это не позволит даже ошибкам в приложении внести в базу неверные данные. Вашу таблицу можно объявлять так:
CREATE TABLE `humans` (
`id` int(11) NOT NULL auto_increment,
`lastname` varchar(100) NOT NULL,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`name`)
);
Уникальный ключ гарантирует, что в БД не смогут оказаться два одинаковых имени.
После этого немного изменяете свой SQL-запрос добавляющий данные:
insert into humans(lastname, name)
values('last','first')
on duplicate key update lastname=values(lastname);
Он выполнит именно то, что вы хотели получить: если имени в БД еще нет - то создаст новую запись, а если есть - изменит фамилию в уже существующей записи.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как можно получить все значения элементов "name" для файла со структурой:
Подскажите пожалуйста почему не подключаются внешние стилиВ header
Есть ли функция на php для преобразования текста вида "пример !? я ссылка *&" в seo url "primer-ya-ssilka"