我有一张名为" utilizatori" (这意味着"用户"英语)有5个字段,第五个被称为" cartea_favorita"并且对于该表中的所有行(即用户)为空。我试图在特定行(即用户)的第五个字段中添加一些文本。
以下代码不会在数据库中添加任何内容。如果我使用文本字符串替换mysql_query
函数$titlu_carte
,并使用文本字符串替换$nume
,那么它可以工作,但是当我使用变量时它不会。
有趣的是,当我在页面中echo
$titlu_carte
或$nume
时,我看到正确显示的值,但由于某种原因,在添加时它不起作用在那个查询中。任何解决方案?
<?php
$lista_carti = mysql_query("SELECT `titlu` FROM `carti` ORDER BY `titlu` ASC");
$option = '';
while($rezultat_lista_carti = mysql_fetch_assoc($lista_carti)) {
$option .= '<option value = "'.$rezultat_lista_carti['titlu'].'">'.$rezultat_lista_carti['titlu'].'</option>';
}
?>
<form method="post" class="formular" action="utilizator.php">
<select name="titlu_carte">
<?php echo $option; ?>
</select>
<input type="submit" name="submit2" value="Selecteaza Carte" />
</form>
<?php
$titlu_carte = $_POST['titlu_carte'];
$submit2 = $_POST['submit2'];
$nume = $_SESSION['login'];
if($submit2) {
if($titlu_carte==null) { echo "<p class='eroare'>Selectati o carte din lista!</p>"; }
else {
$cautare2 = mysql_query("UPDATE `utilizatori` SET `cartea_favorita`=$titlu_carte WHERE `nume`=$nume");
echo "<p class='succes'>Carte selectata cu success!</p>";
}
}
?>
答案 0 :(得分:2)
您的问题出在您的查询中。您忘记在查询中的变量上添加撇号,因此SQL不会将其识别为字符串,而是将其识别为可能不存在的列名。
$cautare2 = mysql_query("UPDATE `utilizatori` SET `cartea_favorita` = '$titlu_carte' WHERE `nume` = '$nume'");
由于您的变量$titlu_carte
来自$_POST
,因此您应该将其转义以防止在向数据库表添加数据时出现问题。
所以改变这一行:
$titlu_carte = $_POST['titlu_carte'];
进入这个:
$titlu_carte = mysql_real_escape_string($_POST['titlu_carte']);
它可以帮助您避免将来出现问题,并为SQL注入添加一层保护。