2015-04-21 2 views
0

У меня есть форма, которая имеет 14 числовых входов и 2 текстовых ввода - имя и адрес электронной почты. Кто-то добавляет данные и сохраняется в базе данных - я это сделал. Но когда кто-то добавляет данные во второй раз с использованием того же адреса электронной почты, база данных должна переопределять данные в определенной строке с этим адресом электронной почты.Проверьте, существует ли электронная почта в базе данных и добавляет/изменяет данные.

Я читал о UPDATE в sql, но не знаю, как сделать запрос, который будет проверять, существует ли это письмо, и после этого добавлять или обновлять данные.

<?php 
$servername = "localhost"; 
$username = "username"; 
$password = "pass"; 
$dbname = "test"; 
$quantity = $_POST['quantity']; 
$quantity2 = $_POST['quantity2']; 
$quantity3 = $_POST['quantity3']; 
$quantity4 = $_POST['quantity4']; 
$quantity5 = $_POST['quantity5']; 
$quantity6 = $_POST['quantity6']; 
$quantity7 = $_POST['quantity7']; 
$quantity8 = $_POST['quantity8']; 
$quantity9 = $_POST['quantity9']; 
$quantity10 = $_POST['quantity10']; 
$quantity11 = $_POST['quantity11']; 
$quantity12 = $_POST['quantity12']; 
$quantity13 = $_POST['quantity13']; 
$quantity14 = $_POST['quantity14']; 
$name = $_POST['name']; 
$email = $_POST['email']; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$sql = "INSERT INTO Results (1paracwierc, 1paracwierc2, 2paracwierc, 2paracwierc2, 3paracwierc, 3paracwierc2, 4paracwierc, 4paracwierc2, 1parapol, 1parapol2, 2parapol, 2parapol2, final, final2, name, email) 
VALUES ($quantity, $quantity2, $quantity3, $quantity4, $quantity5, $quantity6, $quantity7, $quantity8, $quantity9, $quantity10, $quantity11, $quantity12, $quantity13, $quantity14, '$name', '$email')"; 

if ($conn->query($sql) === TRUE) { 
    echo "Saved."; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 
?> 
+0

Предупреждение: не вставляйте введенные пользователем данные непосредственно в ваши SQL-запросы, в противном случае вы склонны к атакам SQL-инъекций. Подумайте, что произойдет, если '$ email' содержит' blah '); drop table Результаты; --'. См. Http://php.net/manual/en/security.database.sql-injection.php для обсуждения, а также http://stackoverflow.com/q/60174/21945, чтобы избежать этой проблемы. – mhawke

+0

@mhawke, и что, если этот вход, в котором хранится адрес электронной почты $, имеет тип = «email»? Когда этот ввод имеет тип = «электронная почта», браузер не позволяет добавлять разные данные, кроме электронной почты. – Marcin

+0

Нет ничего, что могло бы помешать пользователю отправлять данные формы на ваш сервер без браузера, например. используя завиток. Кроме того, старые браузеры могут не поддерживать « mhawke

ответ

4

insert . . . on duplicate key update. Вы можете сделать это, если у вас есть уникальный ключ на то, что вы хотите быть уникальным:

create unique index idx_results_name_email (name, email); 

Затем база данных будет обеспечивать соблюдение уникальности. Вы хотите:

INSERT INTO Results (1paracwierc, 1paracwierc2, 2paracwierc, 2paracwierc2, 3paracwierc, 3paracwierc2, 4paracwierc, 4paracwierc2, 1parapol, 1parapol2, 2parapol, 2parapol2, final, final2, name, email) 
    VALUES ($quantity, $quantity2, $quantity3, $quantity4, $quantity5, $quantity6, $quantity7, $quantity8, $quantity9, $quantity10, $quantity11, $quantity12, $quantity13, $quantity14, '$name', '$email') 
    ON DUPLICATE KEY UPDATE 1paracwierc = VALUES(1paracwierc), 
          1paracwierc2 = VALUES(1paracwierc2), 
          . . . 
          final2 = VALUES(final2); 
+0

Большое спасибо. Не могли бы вы также рассказать мне, как добавлять разные сообщения после добавления новых данных и после обновления? Это будет сказано «Сохранено», когда данные будут добавлены и «Обновлено», когда оно будет обновлено. – Marcin

+0

@Marcin. , , Значение 'insert' управляется в инструкции' VALUES() ', в которой перечислены переменные. Значение 'update' контролируется' = 'в части' on duplicate key update'. Вы можете поместить соответствующие значения в каждое место. –

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