У меня есть form.php, в котором запись либо создается, либо редактируется. Эта страница вызывается либо ссылкой «Новая запись», в этом случае идентификатор не установлен, либо ссылкой «РЕДАКТИРОВАТЬ», в этом случае устанавливается $ _GET ['ID'] (и используется для извлечения записи).
План А был:
Отправка form.php в process.php; в process.php, если есть идентификатор, запрос представляет собой ОБНОВЛЕНИЕ, в противном случае это ВСТАВКА. В какой-то момент, если / иначе работал как положено, но обновлял созданные дупы, я начал играть с «ON DUPLICATE KEY UPDATE», но безуспешно. План B в конце концов пришел в голову моему крошечному мозгу: не должен ли process.php иметь только запрос INSERT с добавлением ON DUPLICATE KEY UPDATE? Это тоже пока не работает.
process.php:
<?php
// get $_POST from form.php *** note: no ID if it's a New Record ***
$id = $_POST['ID'];
$invNumber = $_POST['invoice-number'];
$invDate = $_POST['invoice-date'];
$projNumber = $_POST['project-number'];
$client = $_POST['client'];
$issueDate = $_POST['issue-date'];
$task = $_POST['task'];
$subTotal = $_POST['sub-total'];
$tax = $_POST['tax'];
$invTotal = $_POST['invoice-total'];
$datePaid1 = $_POST['payment-date-1'];
$datePaid2 = $_POST['payment-date-2'];
$comments = $_POST['comments'];
if (isset($_POST['submit'])) {
$query = "INSERT INTO $table SET
invNumber = '$invNumber',
invDate = '$invDate',
projNumber = '$projNumber',
client = '$client',
task = '$task',
issueDate = '$issueDate',
subTotal = '$subTotal',
tax = '$tax',
invTotal = '$invTotal',
datePaid1 = '$datePaid1',
datePaid2 = '$datePaid2',
comments = '$comments'
ON DUPLICATE KEY UPDATE
invNumber = $invNumber,
invDate = $invDate,
projNumber = $projNumber,
client = $client,
task = $task,
issueDate = $issueDate,
subTotal = $subTotal,
tax = $tax,
invTotal = $invTotal,
datePaid1 = $datePaid1,
datePaid2 = $datePaid2
ID = LAST_INSERT_ID(ID)
";
$lastID = mysql_insert_id();
$result = mysql_query($query) or die(mysql_error());
$affRows = mysql_affected_rows();
if (($result) && ($affRows)) {
echo "<p class=\"status\">
<strong>RECORD #".$id." UPDATED.</strong><br />
<strong>Records updated: " . $affRows . "</strong>
</p>";
} // END if ($result ...
} // END CASE 1
?>
Обновление process.php ВСТАВЛЯЕТ, дублирует ли идентификатор или нет. Мой столбец 'ID', кстати, является первичным ключом, уникальным индексом, автоинкрементом. Так как же $ query проверяет идентификатор перед вставкой или обновлением? [Введите выдвигающееся клише после нескольких дней исследований и экспериментов]
Заранее спасибо, с
p.s. Re: впрыск:
Я включил этот кусок в свой head.php - пожалуйста, дайте мне знать, если это охватывает инъекцию:
<?php
// prevent SQL Injection in $_POST variables:
foreach ($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
// prevent SQL Injection in $_GET variables:
foreach ($_GET as $key => $value) {
$_GET[$key] = mysql_real_escape_string($value);
}
?>