Текстуры с динамически назначенным именем бросают мой код

У меня есть ряд текстовых полей, каждый из которых имеет уникальное присвоенное имя (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']); 

Как я могу это решить?

Solutions Collecting From Web of "Текстуры с динамически назначенным именем бросают мой код"

В этом так много ошибок, что это пугает.

В первую очередь,

 $doedit = "UPDATE ads SET adcode = '".$newadcode."') WHERE ads_ID=$ID" or die(mysql_error()); 

Этот фрагмент кода неверен на многих уровнях.

  1. Синтаксис sql неверен
  2. Sql форматируется со строками из пользовательского ввода (см. Параметризацию запросов здесь
  3. или die () не должны использоваться здесь, вы создаете строку

В идеале у вас должен быть код:

 $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());