2015-05-03 2 views
-3

Мне нужно создать форму, которая собирает имя, фамилию и адрес электронной почты. Я создал таблицу в MySQL под названием guestbook. Таблица выглядит примерно так:Проверка дубликатов в таблице базы данных перед вставкой

CREATE TABLE guestbook (
    id int unsigned NOT NULL AUTO_INCREMENT, 
    firstName varchar(50) NOT NULL, 
    lastName varchar(50) NOT NULL, 
    email varchar(250) NOT NULL, 
    status int NOT NULL, 
    sort int NOT NULL 
); 

А вот мой код до сих пор:

<?php 

Global $Conn; 
$Conn = new mysqli("localhost","151_millet","2gZMXYGC","GUESTBOOK"); 

if(!$Conn) { 
    $ErrorMsg = "Couldn't connect to the database"; 
} 

$FName = $_POST["fname"]; 
$LName = $_POST["lname"]; 
$Email = $_POST["email"]; 

// The series of ifs below tests to see if each field is blank 
// If it is blank it will output an error message for each that is blank 
if($FName == "") { 
    $ErrorMsg .= "First Name Was Left Blank<br>"; 
} 

if($LName == "") { 
    $ErrorMsg .= "Last Name Field Was Left Blank.<br>"; 
} 

if($Email == "") { 
    $ErrorMsg .="Email field was left blank.<br>"; 
} 

Я понятия не имею, как проверить наличие дубликатов в поле электронной почты. Любая помощь будет оценена по достоинству. Я думаю, мне нужно придумать способ протестировать $ _POST против того, что уже есть в db.

+1

Stack Overflow - это место, где можно получить помощь * после того, как вы попытались что-то сделать. Это не место, чтобы прийти, чтобы сделать работу для вас. Вы должны показать, что вы сделали, какую конкретную проблему вы пытаетесь решить, и вы также должны убедиться, что вы уже пытались найти на сайте решение с помощью функции поиска. Мы здесь не для того, чтобы делать вашу курсовую работу для вас! – Seer

+0

Я пробовал, у меня есть три разных файла. Я разрабатываю систему билетов на работе, я уже работаю в своем поле, я просто не могу понять, как проверять дубликаты и не может найти решение для вывода в txt-файлы .... Помогло бы, если бы я загрузил мой код? –

+0

Да, это абсолютно было бы полезно. Здесь нет настоящего вопроса, это скорее похоже на спецификацию для чего-то. Мы не знаем, что вы уже сделали, или какую конкретную проблему вы пытаетесь решить. Если вы пытаетесь просто изучать PHP и MySQL, то, вероятно, это неправильное место, о котором я сожалею. – Seer

ответ

1

Alrighty, теперь мы немного убрали этот вопрос. Давайте приступим к делу.

Вы хотите проверить наличие дубликатов в базе данных. Для этого вам нужно сделать пару вещей. Давайте попробуем сделать это как можно проще, пока мы работаем над этим.

Прежде всего, хорошо видеть, что вы используете MySQLi, а не устаревшие функции mysql_ *. Но мы можем обрабатывать MySQLi более объектно-ориентированным образом. Кроме того, использование globals неодобрительно (и на самом деле не нужно, даже в вашем текущем коде!)

Еще одна вещь, которую следует отметить, это несколько разных стилей кода, используемых в современном PHP, таких как случай верблюда и как вы форматируете заявления. Если вы заинтересованы в изучении PHP, тогда вы должны взглянуть на PSR-PHP-FIG.

<?php 

$conn = new mysqli("localhost", "151_millet", "2gZMXYGC", "GUESTBOOK"); 

if ($conn->connect_errno) { 
    // This is an error that will stop us from continuing, so assigning 
    // the error message to a string, doesn't really help us in this case 
    // The application NEEDS to stop 
    throw new RuntimeException("Unable to connect to MySQL database."); 
} 

$firstName = $_POST["fname"]; 
$lastName = $_POST["lname"]; 
$email  = $_POST["email"]; 

if (!$firstName || !$lastName || !$email) { 
    echo "Please make sure to fill in all of your details."; 

    // You may want to handle this differently, this is just to keep things 
    // Very simple 
    exit; 
} 

$query = "SELECT COUNT(1) FROM guestbook WHERE email = ?"; 
$stmt = $conn->prepare($query); 
$count = 0; 

if ($stmt) { 
    $stmt->bind_param("s", $email); 
    $stmt->execute(); 
    $stmt->store_result(); 

    $count = $stmt->num_rows; 

    $stmt->close(); 
} 

if ($count > 0) { 
    echo "A user with that email address already exists."; 
    exit; 
} 

// Do other stuff 

Это должно помочь вам с тем, что вам нужно сделать, чтобы проверить, существует ли уже существующий адрес электронной почты. Но вы также должны обеспечить это в своей базе данных, добавив в столбец электронной почты уникальный ключ. Это будет означать, что даже если ваш код завершится с ошибкой и позволит дублировать запись адреса электронной почты, ваша база данных не будет.

Смежные вопросы