使用变量时,无法将数据添加到数据库字段中

时间:2015-06-06 19:18:25

标签: php mysql

我有一张名为" 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>";
        }

    }
?>

1 个答案:

答案 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注入添加一层保护。