0

因此,当有人按下此链接时,它应该将该文本 id 中的所有数据插入到一个新表中,但带有单击它的用户名和用户按下的文本的 id。

问题是,当用户单击链接时,它没有插入数据,这可能是什么问题?

会话有效,所以它必须与 GET 相关?

<?php
if(isset($_GET['collect'])) {
    $perman = $_GET['collect'];
    $username = $_SESSION['username'];

    $query = $dbh->query("INSERT INTO collections (id, ad, user) VALUES ('', $perman, $username)");
    echo 'Saving';
    echo $perman;
    header ('Refresh: 1; URL=http://localhost/de/collect.php');
}

?>

4

3 回答 3

0

首先,为ID插入''不是很好(不知道它是否有效),不要使用它(使用默认值),或者插入NULL(也使用默认值,如果不是NULL)。其次,要插入值,最好将其引用并在其上使用 escape_string。我认为这是你的问题。

$query = $dbh->query("INSERT INTO collections (ad, user) VALUES ('" . $dbh->escape_string($perman) . "', '" . $dbh->escape_string($username) . "')");
于 2013-06-19T16:42:27.537 回答
0

您用“PDO”标记了您的问题。你在使用 PDO 吗?如果是,为什么不使用 bindParam() 或 bindValue()?

如果 $perman 和 $username 是字符串,你必须转义它们:

$query = $dbh->query("INSERT INTO `collections` (`id`, `ad`, `user`) VALUES ('', '{$perman}', '{$username}')");

该查询应该可以工作,但仍然存在安全问题。你必须逃避这些价值观。使用 PDO 非常简单。

一般:使用http://php.net/manual/en/function.mysql-error.php

您的列“id”应该是整数并且有一个 auto_increment。当然,有些 ID 是字符串,但如果你能够避免它,那就避免它!

您可以使用打印出 $_GET 参数

print_r($_GET);

使用 PDOStatement::bindValue()编辑示例:

$stmt = $dbh->prepare("INSERT INTO `collections` (`id`, `ad`, `user`) VALUES (:id, :ad, :user)");
$stmt->bindValue(":id", 123);
$stmt->bindValue(":ad", "ad");
$stmt->bindValue(":user", "username");
$stmt->execute();
于 2013-06-19T16:42:34.370 回答
0

你应该这样做......如果你正在使用 PDO

使用准备好的语句更安全

 $sql = "INSERT INTO books (id,ad,user) VALUES (:id,:ad,:user)";
 $q = $conn->prepare($sql);
 $q->execute(array(':id'=>null,':ad'=>$perman,':user'=>$username));
于 2013-06-19T16:49:29.650 回答