【问题标题】:mySQL php updatemySQL php 更新
【发布时间】:2013-11-03 10:51:00
【问题描述】:

如何从 HTML 表单更新 mySql 数据库中的一行。我已经尝试了每一种技术,但似乎没有任何效果。我希望用户可以更新他们自己的个人资料页面信息。

我的页面上有一个表单,但数据没有发送出去。

我错过了什么?

这是我的代码:

------------INDEX.php

<?php 
            require_once("inc/database.php");
            require_once("inc/query.php");
        ?>
        <div class="wrapper">
            <div class="content">
            <h1>User Profiles</h1>

                <?php
                while ($row = $results->fetch()) {

                    $id = ($row["id"]);
                    $name = ($row["name"]);
                    $age = ($row["age"]);
                    $password = ($row["password"]);

                    print '<div ' . 'class= id-' . ($id) . '">';
                    print "<p>" . ($name) . "</p>";
                    print "<p>" . ($password) . "</p>";
                    print "<p>" . ($age) . "</p>";
                    print "</div>";

                }
                ?>
        </div>
            </div>
            <form action="inc/addnew.php" method="post">
                <p>Name: <input type="text" name="name" required></p>
                <p>ID: <input type="text" name="id" value="<?php echo $id; ?>"></p>
                <p><input type="submit" value="Lisää"></p>
            </form>

------------QUERY.php

<?php

try{
    $results = $db->query("SELECT name, password, age, id FROM users");
    $results->execute();
    // echo "Our query ran successfully.";
} catch (Exception $e){
    echo "Data could not be retrived from the database.";
    exit;
}

------------DATABASE.php

<?php

try{
    $db = new PDO('mysql:host=localhost;dbname=user_profile;port=8889', 'User_profile','bFeLcZjMmVw4PBaF');
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $db->exec("SET NAMES 'utf8'");
} catch (Exception $e){
    echo "Could not connect to the database.";
    exit;
}

------------UPDATE.php

<?php
require_once("database.php");


if( isset( $_POST['name'] ) &&  strlen( $_POST['id'] )){

    $id = $_POST['id'];
    $name = $_POST['name'];


    $results=("UPDATE users SET name='$name' WHERE id=$id");
    }

        header("Location: ../index.php");
    }
else
    {
        //error either $_POST['login'] is not set or $_POST['login'] is empty form field
        echo 'Name or ID field was empty. Please fill out those fields. <a href="../index.php">Back to site</a> <br>';
    }

【问题讨论】:

  • 表单的操作是inc/addnew.php。那个文件存在吗?它是否处理表单发布?
  • @David 哦,我没有注意到现在它通过了,但该字段没有更新:/

标签: php mysql


【解决方案1】:

您需要准备并执行您的查询,而不仅仅是将其定义为字符串:

$sth = $db->prepare("UPDATE users SET name=:name WHERE id=:id")

$sth->execute(array("name" => $_POST["name"], "id" => $_POST["id"]));

您应该使用占位符来插入数据。由于SQL injection bugs,您的查询使用了非常危险的字符串插值。不要将$_POST 数据直接放入查询中,这是不安全的。

【讨论】:

  • 我将如何实现这段代码?我尝试了几种方法,但代码刹车。
  • 不,它什么都不做:/.
  • 阅读prepared statements 部分并尝试使用他们的方法。使用字符串插值是非常危险的。
【解决方案2】:

您希望这个查询如何执行?

$results=("UPDATE users SET name='$name' WHERE id=$id");

您只是在 UPDATE.php 上生成一个查询,而实际上并没有对其进行任何操作。

将此行替换为:

$results = $db->query("UPDATE users SET name='$name' WHERE id=$id");

【讨论】:

  • 不逃避这真的很危险。 PDO 有prepared statements,这让这很容易做到。
  • 是的,这真的很糟糕,我在回答原始问题时没有提出“更好/正确”的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
  • 2013-03-12
  • 2012-07-20
  • 2012-04-13
  • 2010-12-17
相关资源
最近更新 更多