Двойные записи, отправленные на MySQL из PHP-скрипта

Несмотря на то, что я выполняю сценарий один раз (один 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

0

Решение

Это слишком долго для комментария.

Во-первых, $_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 с подготовленными заявлениями.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]