【问题标题】:Problem showing a variable from 1 .php to another one显示从 1 .php 到另一个变量的问题
【发布时间】:2019-02-19 10:12:50
【问题描述】:

所以,我在尝试仅修改数据库中的 1 个用户列数据时遇到了问题。我做的代码只会修改数据库中最后一个用户的数据,不会修改当前用户的数据。

例如:我使用以下列登录 Asd 帐户:
电子邮件用户名 nume prenume tara
如果我编辑它,它将在数据库中显示此值,但不会在屏幕上显示它们
如果我有更多用户喜欢 asd abc abcd
它将显示 abcd 的值

<?php include('server.php');
$result = mysqli_query($db,"SELECT * FROM users");
while($row = mysqli_fetch_array($result))
{
   if($username=$row['username'])
   {
      $email=$row['email'];
      $user=$row['username'];
      $nume=$row['nume'];
      $prenume=$row['prenume'];
      $tara=$row['tara'];
      $oras=$row['oras'];
      $adresa=$row['adresa'];
      $numar=$row['numar'];
   }
}
?>

<form method="post" action="editprofil.php">
   <table class="table-fill">
      <thead>
         <tr>
            <th class="text-left" style="font-size:32px;padding-bottom:1em;" >Profil</th>
         </tr>
      </thead>
      <tbody>
         <tr>
            <td class="text-left">Username</td>
            <td class="text-left"><?php echo $user ?></td>
         </tr>
         <tr>
            <td class="text-left">Nume</td>
            <td class="text-left"><input type="text" name="nume"   /></td>
         </tr>
         <tr>
            <td class="text-left">Prenume</td>
            <td class="text-left"><input type="text" name="prenume"  /></td>
         </tr>
         <tr>
            <td class="text-left" >Email </td>
            <td class="text-left">  <?php echo $email; ?></td>
         </tr>
         <tr>
            <td class="text-left">Tara</td>
            <td class="text-left"><input type="text" name="tara"  /></td>
         </tr>
         <tr>
            <td class="text-left">Oras</td>
            <td class="text-left"><input type="text" name="oras"    /></td>
         </tr>
         <tr>
            <td class="text-left">Adresa</td>
            <td class="text-left"><input type="text" name="adresa"/></td>
         </tr>
         <tr>
            <td class="text-left">Telefon mobil</td>
            <td class="text-left"><input type="text" name="telefon"   /></td>
         </tr>
         <tr>
            <td class="text-left">Data nasterii</td>
            <td class="text-left"><input type="text" name="varsta"  /></td>
         </tr>
      </tbody>
   </table>
   <div class="input-container"style="padding-top:1em;">
      <input type="username" name="username" id="#{label}" />
      <label for="#{label}">Confirm username</label>
      <div class="bar"></div>
   </div>
   <div class="input-container"style="padding-top:1em;">
      <input type="password" name="password" id="#{label}" />
      <label for="#{label}">Confirm password</label>
      <div class="bar"></div>
   </div>
   <div class="button-container">
      <button type="submit" class="btn" name="edit_user">Register</button>
   </div>
</form>

server.php

<?php
session_start();

$username = "";
$oras ="";
$nume ="";
$prenume ="";
$tara ="";
$adresa ="";
$telefon ="";
$varsta ="";
$email="";


$errors = array();

$db = mysqli_connect('localhost', 'root', '12345678', 'registration');

if (isset($_POST['reg_user'])) {
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $email = mysqli_real_escape_string($db, $_POST['email']);
  $password_1 = mysqli_real_escape_string($db, $_POST['password_1']);
  $password_2 = mysqli_real_escape_string($db, $_POST['password_2']);
  if (empty($username)) { array_push($errors, "Username is required"); }
  if (empty($email)) { array_push($errors, "email is required"); }
  if (empty($password_1)) { array_push($errors, "Password is required"); }
  if ($password_1 != $password_2) {
    array_push($errors, "The two passwords do not match");
  }

  $user_check_query = "SELECT * FROM users WHERE username='$username' OR email='$email' LIMIT 1";
  $result = mysqli_query($db, $user_check_query);
  $user = mysqli_fetch_assoc($result);

  if ($user) { // if user exists
    if ($user['username'] === $username) {
      array_push($errors, "Username already exists");
    }

    if ($user['email'] === $email) {
      array_push($errors, "email already exists");
    }
  }

  if (count($errors) == 0) {
    $password = md5($password_1);//encrypt the password before saving in the database

    $query = "INSERT INTO users (username, email, password)
              VALUES('$username', '$email', '$password')";
    mysqli_query($db, $query);
    $_SESSION['username'] = $username;
    $_SESSION['email'] = $email;
    $_SESSION['success'] = "You are now logged in";
    header('location: primapagina.php');
  }
}

if (isset($_POST['login_user'])) {
  $username = mysqli_real_escape_string($db, $_POST['username']);
  $password = mysqli_real_escape_string($db, $_POST['password']);
  if (empty($username)) {
    array_push($errors, "Username is required");
  }
  if (empty($password)) {
    array_push($errors, "Password is required");
  }

  if (count($errors) == 0) {
    $password = md5($password);
    $query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
    $results = mysqli_query($db, $query);
    if (mysqli_num_rows($results) == 1) {
      $_SESSION['username'] = $username;
      $_SESSION['email'] = $email;
      $_SESSION['success'] = "You are now logged in";
      header('location: primapagina.php');
    }else {
        array_push($errors, "Wrong username/password combination");
    }
  }
}
if (isset($_POST['edit_user']))
{
$oras = mysqli_real_escape_string($db, $_POST['oras']);
$tara = mysqli_real_escape_string($db, $_POST['tara']);
$adresa = mysqli_real_escape_string($db, $_POST['adresa']);
$nume = mysqli_real_escape_string($db, $_POST['nume']);
$prenume = mysqli_real_escape_string($db, $_POST['prenume']);
$telefon = mysqli_real_escape_string($db, $_POST['telefon']);
$varsta = mysqli_real_escape_string($db, $_POST['varsta']);
$password = md5(mysqli_real_escape_string($db, $_POST['password']));
$username = mysqli_real_escape_string($db, $_POST['username']);
$sql = "UPDATE users SET tara='$tara', oras='$oras', nume='$nume', prenume='$prenume', tara='$tara', adresa='$adresa' WHERE password = '$password' and username='$username' ";
mysqli_query($db, $sql);

}

?>

【问题讨论】:

  • if($username=$row['username']) 将永远为真;你会想要==(或===)。
  • ive tried that and its 没有显示任何内容。我认为我对来自 server.php 的值有疑问。我ll do an edit on the post with the server.php code. I cant 弄清楚为什么有些变量仍然是全局的并且可以在其他页面上显示而有些则不能
  • 也...我能看到它有值的唯一变量是 $_SESSION['username'];即使我尝试做 echo $_SESSION['email'];它没有显示我尝试过的值 if($username=='") 并且它有效..这意味着它不存储来自 server.php 的值。这是我可以将数据存储在所有我登录时的页面?
  • 顺便说一句,md5() 对密码来说是不安全的。

标签: php html mysql database


【解决方案1】:

正如@AKX 所写,当您键入“$username = $row['username']”时,您将行的用户名分配给 $username 并且始终为真,执行里面的代码如果所有时间都用于您的所有记录。在这里你会找到更多信息PHP IfPHP Expressions

【讨论】:

    【解决方案2】:

    正如我在您的代码中看到的,您正在从 users 表中获取所有记录,在最后一次迭代中,所有变量(如 $email、$user....)都有最后一行信息,这就是代码更新的原因最后一个用户。

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-05
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多