【问题标题】:sql/php/session update userprofilesql/php/session 更新用户配置文件
【发布时间】:2018-04-09 08:19:22
【问题描述】:

我知道已经有很多关于这个主题的问题。但遗憾的是,当我输入不同的输入并按下更新按钮时,我的用户配置文件不想更新。我需要在星期三之前完成这个学校练习,我真的没有其他人可以问。希望你们能帮帮我。 我的问题: 我将始终得到输出update not successful,它永远不会更新我数据库中的任何记录。而且我不确定该怎么做,因为我几乎尝试了所有方法。

欢迎.php:

<?php
 include("../php/session.php");
?>


<div>
                    <div class="col-md-9">
                        <div class="imagepageback">
                            <div class="card">
                                <div class="profilimage"></div>
                                <hr class="verticalline">                   
                                    <form class="form" action="" method="post">
                                    <input id="username" class="username" type="text" name="username" value="<?php echo $username; ?>" readonly>
                                    <input id="email" class="email" type="text" name="email" value="<?php echo $email; ?>" readonly>
                                    <input id="firstname" class="firstname" type="text" name="firstname" value="<?php echo $firstname; ?>" readonly>
                                    <input id="lastname" class="lastname" type="text" name="lastname" value="<?php echo $lastname; ?>" readonly>
                                    <input id="birthdate" class="birthdate" type="text" name="birthdate" value="<?php echo $birthdate; ?>" readonly>
                                    <div>
                                        <input id="street" class="street" type="text" name="street" value="<?php echo $street; ?>" readonly>
                                        <input id="nr" class="nr" type="text" name="streetnr" value="<?php echo $streetnr; ?>" readonly>
                                    </div>
                                    <div>
                                        <input id="city" class="city" type="text" name="city" value="<?php echo $city; ?>" readonly>
                                        <input id="plzz" class="plzz" type="text" name="plzz" value="<?php echo $plzz; ?>" readonly>
                                    </div>
                                    <a href="#" class="editprofilelink" id="editprofilelink"  onclick="editable(); showbt()"; >Edit Profile</a>
                                    <a href="changepd.html" class="editpasswordlink">Change Password</a>
                                        <!----------PHP Skript----------->
                                        <?php 
                                       if($_SERVER["REQUEST_METHOD"] == "POST") {
                                       $email = mysqli_real_escape_string($db,$_POST['email']);
                                       $username = mysqli_real_escape_string($db,$_POST['username']);
                                       $firstname = mysqli_real_escape_string($db,$_POST['firstname']);
                                       $lastname = mysqli_real_escape_string($db,$_POST['lastname']);
                                       $birthdate = mysqli_real_escape_string($db,$_POST['birthdate']);
                                       $street = mysqli_real_escape_string($db,$_POST['street']);
                                       $streetnr = mysqli_real_escape_string($db,$_POST['streetnr']);
                                       $city = mysqli_real_escape_string($db,$_POST['city']);
                                       $plzz = mysqli_real_escape_string($db,$_POST['plzz']);


                                      $sql = "UPDATE clients SET " .
                                            "email = '$email', " .
                                            "username = '$username', " .
                                            "firstname = '$firstname', " . 
                                            "lastname = '$lastname', " .
                                            "birthdate = '$birthdate', " .
                                            "street = '$street', " .
                                            "streetnr = '$streetnr', " .
                                            "city = '$city', " .
                                            "plzz = '$plzz' " .
                                            "WHERE username = '$username'";
                                       $result = mysqli_query($db,$sql);

                                       if($result) {
                                         $_POST["email"] = $email;
                                         $_POST["username"] = $username;
                                         $_POST["firstname"] = $firstname;
                                         $_POST["lastname"] = $lastname;
                                         $_POST["birthdate"] = $birthdate;
                                         $_POST["street"] = $street;
                                         $_POST["streetnr"] = $streetnr;
                                         $_POST["city"] = $city;
                                         $_POST["plzz"] = $plzz;

                                         header("location:http://localhost:81/Left_over_youth_website/php/logout.php");
                                       }else {
                                         echo '<p id="error">Update was not sucessful</p>';
                                       }
                                       }
                                     ?>  
                                    <input hidden id="btupdate" type="submit" name="btupdate" value="Update">   
                                </form>
                            </div>
                        </div>
                    </div>
                </div>

session.php:

<?php
    include('connection.php');
    session_start();

    $user_check = $_SESSION['login_user'];

    if(!isset($_SESSION['login_user'])){
      header("location:http://localhost:81/Left_over_youth_website/pages/login.php");
    }
?>

connection.php:

<?php
   define('DB_SERVER', 'localhost');
   define('DB_USERNAME', 'root');
   define('DB_PASSWORD', '');
   define('DB_DATABASE', 'leftoveryouth');  
   $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

数据库:

CREATE TABLE `clients` (
  `id` int(11) NOT NULL,
  `firstname` varchar(50) DEFAULT NULL,
  `lastname` varchar(50) DEFAULT NULL,
  `birthdate` date DEFAULT NULL,
  `street` varchar(50) DEFAULT NULL,
  `streetnr` varchar(50) DEFAULT NULL,
  `city` varchar(50) DEFAULT NULL,
  `plzz` varchar(50) DEFAULT NULL,
  `username` varchar(50) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

【问题讨论】:

  • 什么是 "nrr = '$streetnr'" 的 db 字段名 - 是 nrr 吗?对于 plzz- 你没有在更新查询中使用任何参数,当你传递值时: $_SESSION["plzz"] = $plz
  • 检查我的更新。 plzz 是 =plzz 也在数据库中 nrr = streetnr 在数据库中。我很确定我的问题与命名无关
  • 看你的查询; birthdatee = '$birthdate'您没有名为birthdatee的数据库字段@它是birthdate
  • 在您的 SQL 字符串中,删除所有带有逗号的 and ,
  • 你也应该考虑使用MySQLi prepare ..

标签: php sql session sql-update


【解决方案1】:

代码中有几个变量名错误。例如,一个input 被命名为streett,但是当从$_SESSION[] 读取时,它试图被读取为street

$_SESSION[] 无法读取 POST 数据。您需要改用$_POST[]

根据您提供的 CREATE 语句,SQL 查询中的列名是错误的。此外,在查询的最后部分,您没有为变量 $plzz 包含 $,根据您的代码,该变量也拼写错误。

当事情不正常时,请务必检查您的变量是否存在拼写和大小写错误。

另外,在 SQL 中,进行更新的正确格式是

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

正如 @Karlo 在 cmets 中提到的,删除 and 关键字并用逗号分隔您正在进行的更新。

最后,您必须使用WHERE 语句来限制正在更新的行。否则,您将更新数据库中的所有行。

旧查询:(我创建了多行以便更容易看到更改)

$sql = "UPDATE clients SET " .
    "emaill = '$email' and " .
    "usernamee = '$username' and " .
    "firstnamee = '$firstname' and " .
    "lastnamee = '$lastname' and " .
    "birthdatee = '$birthdate' and " .
    "street = '$street' and " .
    "nrr = '$streetnr' and " .
    "city = '$city' and " .
    "plzz = 'plz'";

基于提供的列的新查询:

$sql = "UPDATE clients SET " .
    "email = '$email', " .
    "username = '$username', " .
    "firstname = '$firstname', " . 
    "lastname = '$lastname', " .
    "birthdate = '$birthdate', " .
    "street = '$street', " .
    "streetnr = '$streetnr', " .
    "city = '$city', " .
    "plzz = '$plzz' " .
    "WHERE username = '$username'";

【讨论】:

  • 感谢您的回答。我已经实现了你所说的一切。我已将代码更新为我的问题。你能不能再看看它。它仍然不起作用。以及如何显示例如电子邮件输入字段的数据......逻辑上(echo $_SESSION['email'])不再起作用
  • 在您的if($result) { ... } 区域中,您将设置您的$_SESSION[] 变量。所以,把它们改回来。
  • 正如我在答案中所说,您无法从$_SESSION[] 读取 POST 信息。但是,正如您尝试做的那样,获取 POST 信息并从中创建会话变量是正确的。
  • 不客气。我不是天才。很多年前,我和你一样走在同一条路上。只是分享知识。
【解决方案2】:

在服务器端,使用 post 全局数组来获取表单数据,例如

$name = $_POST['name'];

然后是sql

    $sql = "UPDATE profile SET name = '".$name.'" WHERE userid = '".$_SESSION['userid].'"; 
    $update = $connection->query($sql);
    if($update){
        $_SESSION['name']=$name;
    }

如果您更新登录人的当前信息,假设您保留他们的 id 或其他东西来唯一标识他们

【讨论】:

  • 我真的很讨厌投反对票(我真的不喜欢它),但是您需要在这篇文章中提供更多信息来解决 OPs 问题。如果您要提供解决方案,请包含完整的 SQL 代码以修复它以及解决其他问题。
  • @Mowzey 不,我没有用 id 这样做。当用户登录时,$_SESSION 保存了用户的信息
  • @Hazaki 然后在数据库中使用一个关于您的用户唯一的字段,它可能是电子邮件地址,您在登录时保持什么会话?
  • @Mowzey 如何将用户 ID 存储在会话中?
  • 登录时,在数据库中查询用户 ID 或电子邮件并执行 $_SESSION['userid']=$id;