Несмотря на то, что я выполняю сценарий один раз (один mysql_query), по какой-то причине я получаю повторяющиеся записи в таблице mySQL.
Эти записи не совпадают — запись «дубликат» всегда будет иметь одинаковые поля для столбцов Timestamp и Picture, но остальные столбцы будут пустыми.
Это мой сценарий:
<?php
session_start();
$con = mysql_connect("Fruity.mysql.anyhost.com", "apples", "password");
mysql_select_db("IAN_1");
$username = $_SESSION['username'];
$image = $_POST['image'];
$post = $_POST['postdescription'];
$idcolor = $_POST['idcolor'];
$idbgcolor = $_POST['idbgcolor'];
$timestamp = date("jS \of F Y h:i:s A P");
$user_uploadposts =
"INSERT INTO $username (Timestamp, Image, Description, ID_color, ID_backgroundcolor)
VALUES ('$timestamp','$image', '$post','$idcolor','$idbgcolor')";
mysql_query($user_uploadposts);
mysql_close($con)
?>
скриншот проблемы http://i.imgur.com/DaPiRYm.jpg
Это слишком долго для комментария.
Во-первых, $_POST['image']
предполагает, что мы имеем дело с файлами, и если это так, ваша форма требует действительный enctype, метод POST, плюс вам нужно будет использовать $_FILES
скорее, чем $_POST
если это так.
Мы также не знаем, был ли установлен массив сеанса (не знаю, зачем вы его здесь используете) и содержат ли элементы формы соответствующие атрибуты имени.
т.е .: <input type="text" name="postdescription">
и ваша форма должна содержать method="post" enctype="multipart/form-data"
,
Если ваша форма и PHP / MySQL находятся в одном файле, вам нужно будет использовать isset()
или же !empty()
для ваших переменных. Возможно, вы получаете неопределенные уведомления об индексах, но они не отображаются.
т.е .: if(!empty($_POST['postdescription'])){...}
то же самое для других.
Вам также нужно иметь первичный ключ; это обычно исправляет вещи.
У вас также есть пропущенная точка с запятой для mysql_close($con)
добавь это mysql_close($con);
,
Замените свой текущий код на:
mysql_query($user_uploadposts) or die(mysql_error());
для того, чтобы найти ошибки и сообщения об ошибках.
Кроме того, вы также используете MySQL зарезервированное слово Timestamp
, и это должно быть обернуто в клещи.
INSERT INTO $username (`Timestamp`, Image, ...
Если это все еще не работает, тогда ваши входящие данные могут содержать символы, на которые MySQL будет жаловаться.
$post = mysql_real_escape_string($_POST['postdescription']);
добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отображать ошибки следует только в постановке, а не в производстве.
Ваш настоящий код открыт для SQL-инъекция.
использование mysqli
с подготовленными заявлениями, или же PDO с подготовленными заявлениями.
Других решений пока нет …