0

我有许多文本区域,每个区域都有一个唯一的分配名称(例如,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']);

我该如何解决这个问题?

4

3 回答 3

1

您似乎正在尝试字符串连接。以下是如何正确执行此操作:

$newadcode = mysql_real_escape_string($_POST['adcode' . $ID]);

以下行应该简单地创建一个包含您的 SQL 查询的字符串;你直到下一行才执行它,没有函数调用,所以它or die不合适。您还将串联与插值(双引号字符串中的变量名称)混合使用,这很好,但可能无法帮助您理解语法问题,所以让我们保持一致:

$doedit = "UPDATE ads SET adcode = '" . $newadcode . "' WHERE ads_ID = " . $ID;
于 2012-10-06T02:49:27.870 回答
1

这有太多的错误,令人恐惧。

首先,

$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 准备的查询

防止php中的sql注入

于 2012-10-06T03:07:30.110 回答
0

您应该adcode[<?php echo $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());

于 2012-10-06T03:23:43.310 回答