проверка на уникальное поле

188
10 декабря 2016, 10:27

Как можно реализовать проверку на уникальность вводимого поля:

схема базы данных:

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>

Как мне грамотно провести проверку на то что :

если в базе уже есть такое имя его не добавлять, оставить как есть, а фамилию просто перезаписать не проверять есть она или нет.

Answer 1
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>";
    }
}

}

Answer 2

Уникальность полей стоит сделать на уровне базы данных. Это не позволит даже ошибкам в приложении внести в базу неверные данные. Вашу таблицу можно объявлять так:

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);

Он выполнит именно то, что вы хотели получить: если имени в БД еще нет - то создаст новую запись, а если есть - изменит фамилию в уже существующей записи.

READ ALSO
Разобрать XML в PHP на SimpleXML

Разобрать XML в PHP на SimpleXML

Как можно получить все значения элементов "name" для файла со структурой:

197
Не подключаются внешние стили

Не подключаются внешние стили

Подскажите пожалуйста почему не подключаются внешние стилиВ header

198
Функция преобразования в seo url, транслит на PHP

Функция преобразования в seo url, транслит на PHP

Есть ли функция на php для преобразования текста вида "пример !? я ссылка *&" в seo url "primer-ya-ssilka"

298
PHP SSH2 скорость работы

PHP SSH2 скорость работы

Здравствуйте! Есть такой скрипт на php:

245