V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yappa
V2EX  ›  PHP

php小白求教form display and update mysql的问题

  •  
  •   yappa · 2014-01-24 00:08:49 +08:00 · 3267 次点击
    这是一个创建于 3987 天前的主题,其中的信息可能已经有所发展或是发生改变。
    php小白,各种谷歌,也试了好多stackoverflow上的代码,都只能正常display,无法update。代码如下:
    <?php
    define('DB_NAME', 'form');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '123456');
    define('DB_HOST', 'localhost');


    $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

    if (!$link)
    {
    die('could not connect: ' . mysql_error());
    }
    $db_selected = mysql_select_db(DB_NAME, $link);

    if (!$db_selected)
    {
    die('Can\'t use ' .DB_NAME .':' . mysql_error());
    }
    $query = "SELECT * FROM articles";
    $result = mysql_query($query) or die(mysql_error());
    ?>
    <div class="content-holder">
    <form action="" method="post">
    <table border='1' cellpadding='10' id='ViewTable'>
    <tr>
    <th>title</th>
    <th>id</th>
    </tr>
    <?php
    while($row = mysql_fetch_array($result))
    {
    $id = $row['id'];
    $title = $row['title'];
    ?>
    <tr>
    <td>
    <input type="textbox" class="TextAreaTitle" name="title" value="<?=$title?>"></input>
    <input type="hidden" name="id" value="<?=$title?>"></input>
    </td>
    <td><?=$id?></td>
    </tr>
    <?php
    }
    ?>
    </table>
    <input type="submit" name="update" class="submitlink" Value="update">
    </form>
    </div>

    <?php
    if(isset($_POST['update']))
    {
    for ($i=count($_POST['id']); $i--;)
    {
    $id = $_POST['title'][$i];
    $title = $_POST['id'][$i];
    mysql_query("UPDATE articles SET title= $title WHERE id= $id ");
    }
    }
    ?>

    4 条回复    1970-01-01 08:00:00 +08:00
    vibbow
        1
    vibbow  
       2014-01-24 05:33:00 +08:00   ❤️ 2
    槽点很多

    http://pic.vsean.net/di/MBB4/QQ截图20140123212941.png

    你的这个hidden input明明是id,为什么你要设置变量为value。
    其次Input标签是自闭和的。

    还有如果你的input有N多相同name的元素的话,那么name应该这样写:
    <input type="hidden" name="id[]" value="<?=$title?>" />
    这样PHP才会把这些name相同的元素识别成一个数组了,否则应该是后者替换前者的关系。

    最后你mysql语句update数值的时候不转移特殊字符么...

    看着太纠结了,给你重写一份出来吧。
    vibbow
        2
    vibbow  
       2014-01-24 06:30:38 +08:00   ❤️ 2
    重写完成
    http://pastebin.com/XPFa1EaS

    虽然我写的代码也很挫...
    vibbow
        3
    vibbow  
       2014-01-24 06:37:16 +08:00   ❤️ 2
    重写的时候又发现了代码的两个槽点:

    1. for loop写错了
    2. for loop没必要每次都去求一次数组的大小,太浪费性能了...

    LZ是在HTML中间去运行sql查询的,我重写的时候也这样写了。

    不过一般情况下我喜欢在开头把所有该查的东西都查完了,保存成数组,然后在HTML里直接输出。虽然会浪费点内存,反正这年头内存也不值钱。
    yappa
        4
    yappa  
    OP
       2014-01-24 08:34:32 +08:00
    @vibbow 感谢已发送
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:15 · PVG 04:15 · LAX 12:15 · JFK 15:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.