使用ID从下拉菜单更新MySQL

时间:2012-08-06 13:18:07

标签: php mysql drop-down-menu

我想帮助我的代码。我已经在这个网站上搜索了已回答的问题,但遗憾的是没有找到任何有用的东西。我正在建立一个网站,您可以在其中编写,保存,删除和更新笔记。现在我正在尝试修复更新按钮,您可以使用其唯一ID更改已发布的注释。更新按钮位于与备注不同的页面上,您可以使用显示数据库表中现有ID的下拉菜单选择已发布备注的ID。您选择它,写一个新笔记,然后单击更新。

这是我目前的代码:

            

        <li id="id_number"><label>ID number: <select name="id_number"> 
            <option value =" ">Select number</option> 
              <?php $query = "SELECT * FROM notes"; 
              $result2 = mysql_query($query); 
              while ($row = mysql_fetch_array($result2)) { 
                $id = $row ['id']; 
                $select = ""; 
                if ($id == $idID2) {
                    $select = "selected" ; 
                    } 
                ?><option <?php print $select ?> value="<?php print $id; ?>"><?php print "$id";     
                ?></option><?php 
                }  
                ?>
          </select> 
          </label></li>
        <li id="note">New note:</li>
        <li id="note"> <textarea rows="10" cols="30" name="note" value="<?php print $note;?>"/></textarea></li>
        <li id="send"><input type="submit" name="submit" value="Update!"/></li>
    </ul>
    </form>

    <?php
        $id= $_POST ['id'];
        $subject= $_POST ['subject'];
        $note= $_POST ['note'];
    ?>

    <?php
    if (isset($_POST['submit'])) {  //validates the data
            $error="0";


            if ( $note == "" ) { 
                        $error++; 
                        $wrong .= "<p> You forgot to write a new note.</p>";
            }


        if ($error > 0) {
            print "<p><strong>You have made these errors:</strong></p>";
            ?>
                <?php print $wrong; ?>


            <?php
        }


    //if no errors  

        else { 
                $note = mysql_real_escape_string($note); 
                $note = htmlspecialchars($note);
                $id = mysql_real_escape_string($id); 
                $id = htmlspecialchars($id);
                $date = date("j/n, Y, H:i");
                $query = ("UPDATE notes SET note='$note' WHERE id='$id'");
                $result = mysql_query($query) or die (mysql_error()); 
                if ($result) { 
                print "<p>Note updated!</p>";
            }
        }   
    }

    ?>

选择现有ID并更改注释并单击更新时,会显示“注释已更新”,但数据库中的注释保持不变。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

$id = $_POST['id']

应该是

$id = $_POST['id_number']

据我所知,你并不是指任何名为“id”的输入。

答案 1 :(得分:0)

而不是回答“我做错了什么?”我要回答“我怎么能这样做?”

您的界面设置方式不直观。下拉列表应包含有关注释的信息(此处ID足够),当用户从下拉列表中选择注释时,您的文本输入应填充已存在的注释。如果从下拉列表中未选择任何笔记ID,并且用户单击“更新”,则系统应插入新的笔记记录(如果文本区域包含内容)。

那么,我们该怎么做呢?首先让我们设置我们的表单:

<form action="" method="post">
    <select id="noteIds" name="noteId">
        <option value=''>Select a Note</option>
        <option value='1'>1</option>
        <option value='2'>2</option>
        .
        .
        .
    </select> <br />
    <textarea name="noteContents" id="noteContents"></textarea><br />
    <input type="submit" value="Update" />
</form>

现在我们已经设置了表单,我们可以使用jQuery控制元素的行为:

<script language="javascript" type="text/javascript">
    $("#noteIds").on('change', function() { 
        $.post("getNoteInfo.php", {
                noteId: $(this).val()
            }, function(data) {
                $("#noteContents").html(data);
            }
        );
    });
</script>

上面的代码会将 geNoteInfo.php 的输出设置为textarea的内容。

接下来让我们使用 getNoteInfo.php (伪代码)。

<?php
    $noteId = $_POST['noteId'];

    $noteText = // retrieve note text from database where note ID = $noteId

    echo $noteText;

现在,当用户点击Update时,请检查是否已选择ID。如果选择了ID,请更新该行。如果未选择ID,则在textarea中有文本时插入新行。

注意:您应该停止使用mysql_*功能。他们被弃用了。而是使用PDO(从PHP 5.1开始支持)或mysqli(从PHP 4.1开始支持)。如果您不确定使用哪一个,read this SO article