У меня есть ряд текстовых полей, каждый из которых имеет уникальное присвоенное имя (name = "adcode $ ID", например). Когда я пытаюсь передать эти имена в код ниже, это не работает из-за динамической части.
if (isset($_POST['editadapp'])) { // Edit AD $newadcode = mysql_real_escape_string($_POST['.adcode$ID.']); $doedit = "UPDATE ads SET adcode = '".$newadcode."') WHERE ads_ID=$ID" or die(mysql_error()); $updatead = mysql_query($doedit) or die(mysql_error()); header("Location: " . $_SERVER['PHP_SELF']);
Как я могу это решить?
В этом так много ошибок, что это пугает.
В первую очередь,
$doedit = "UPDATE ads SET adcode = '".$newadcode."') WHERE ads_ID=$ID" or die(mysql_error());
Этот фрагмент кода неверен на многих уровнях.
В идеале у вас должен быть код:
$dbh = new PDO('connectionstring to connect to your database'); $sql = 'update ads set adcode = ? where ads_id = ?'; $sth = $dbh->prepare($sql); $sth->execute(array($_POST['adcode' . $ID], $ID));
Другие темы:
Необходимы ли параметрированные запросы в pdo?
подготовленные запросы с pdo
Предотвращение SQL-инъекций в php
Кажется, вы пытаетесь объединить конкатенацию. Вот как это сделать правильно:
$newadcode = mysql_real_escape_string($_POST['adcode' . $ID]);
Следующая строка должна просто создать строку, содержащую ваш SQL-запрос; вы не выполняете его до следующей строки, нет вызова функции, чтобы or die
неуместно. Вы также смешиваете конкатенацию с интерполяцией (имена переменных в строке с двойными кавычками), что прекрасно, но, вероятно, не помогает понять ваши проблемы с синтаксисом, поэтому давайте будем последовательными:
$doedit = "UPDATE ads SET adcode = '" . $newadcode . "' WHERE ads_ID = " . $ID;
вы должны использовать массив, например adcode[<?php echo $ID;?>]
на своей странице, где находится текстовая область, и name=adID[$ID]
скрытого поля name=adID[$ID]
. На странице, где запрос выполняет $adID = $_POST['adID']; $newadcode = mysql_real_escape_string($_POST['adcode']); $N = count($adID); for($i=0;$N<$i;$i++){ $doedit = mysql_query("UPDATE ads SET adcode = '$newadcode[$i]' WHERE ads_ID=$adID[$i];") or die(mysql_error());
$adID = $_POST['adID']; $newadcode = mysql_real_escape_string($_POST['adcode']); $N = count($adID); for($i=0;$N<$i;$i++){ $doedit = mysql_query("UPDATE ads SET adcode = '$newadcode[$i]' WHERE ads_ID=$adID[$i];") or die(mysql_error());