Несколько ВСТАВКА не работает - PullRequest
0 голосов
/ 17 октября 2011

У меня есть несколько операторов If, которые, если true, вставляют данные в БД.Проблема в том, что 2-е из операторов INSERT вставляет его 4 раза.Как бы я остановил его от добавления дубликатов.Также возвращенный $ _POST ['tshirt'] содержит только одно значение, которое вставляется 4 раза.

if(isset($_POST['distance'])) {
$dist = $_POST['distance'];
$sql="INSERT INTO sportevent_parameters.Distance(value, user_ref, event) VALUES ('$dist', '$id', '$event')";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());
if(isset($_POST['tshirt'])) {
$tshrt = $_POST['tshirt'];
$sql="INSERT INTO sportevent_parameters.T_Shirt(value, user_ref, event) VALUES ('$tshrt', '$id', '$event') ON DUPLICATE KEY UPDATE";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());
if(isset($_POST['partnerid'])) {
$sql="INSERT INTO sportevent_parameters.Partner_ID(value, user_ref, event) VALUES ('$partnerid', '$id', '$event')";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());
if(isset($_POST['racecategory'])) {
$sql="INSERT INTO sportevent_parameters.Race_Category(value, user_ref, event) VALUES ('$category', '$id', '$event')";
}

mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error());

Что может привести к тому, что он вставит несколько копий в БД?

Ответы [ 2 ]

0 голосов
/ 17 октября 2011

Во-первых, , пожалуйста, очистите ваш пользовательский ввод, прежде чем использовать его непосредственно в запросе !!! - также прочтите это .

Во-вторых- проблема в том, что ваши звонки на mysql_query() должны быть внутри операторов if.С тем, что вы сделали, mysql_query() выполняется независимо, только сама инструкция SQL изменяется на if.Это означает, что если первое if условие истинно, а все остальные ложно, первый оператор будет выполнен 4 раза.

Измените код на:

if (isset($_POST['distance'])) {
  $dist = mysql_real_escape_string($_POST['distance']);
  $sql = "INSERT INTO sportevent_parameters.Distance(value, user_ref, event) VALUES ('$dist', '$id', '$event')";
  mysql_query($sql, $con)
    or die("MySQL Error: ".mysql_error()); 
}

// etc etc
0 голосов
/ 17 октября 2011

Редактировать : mysql_query должен быть внутри операторов if, чтобы он не вызывался, если if не вызывается.Я также проверил бы переменные, которые вы передаете.

Несколько операторов SQL в одном запросе не поддерживаются в PHP.Вы должны разделить каждый оператор SQL на отдельные запросы к базе данных.

Ссылка на руководство по PHP: http://php.net/manual/en/function.mysql-query.php

...