PHP 脚本更新所有用户值而不是单个用户值

标签 php mysql redirect

对于 PHP 来说,我几乎是一个完全的初学者,并且在更新数据库中的值时遇到了一些问题 - 当脚本触发时,它会更新列中的每个用户值,而不仅仅是记录的个人值英寸。

一些背景信息:

数据库名称:“用户”

表“用户”,其中包含用户 ID、用户名、密码、电子邮件地址、报价列。

我正在开发的网站允许用户完成许多优惠,然后在完成后获得奖励。优惠列的默认值为“1”,登录后用户将根据优惠列中的值进行重定向。 (因此,在第一次登录时,用户会被重定向到 example.com/offer1 ,在 Offer 1 完成后,该值会更新,因此下次登录时,用户会被重定向到 example.com/offer2 – 本质上是存储用户进度)

这是在报价完成后播放的脚本(在本例中是在报价 3 完成后) - 旨在连接到数据库,然后更新用户的“报值(value)”,这样当他们下次登录时,他们将被定向到正确的报价 - 从而存储他们的进度:

<?php
session_start();
$con = mysqli_connect("localhost","name","pass","user");
$select = mysqli_fetch_assoc(mysqli_query($con,"SELECT offer FROM users      WHERE Username = '".$_SESSION['username']."'"));
$plus = $select['offer']++;
mysqli_query($con,"UPDATE users SET offer=3".$plus);
header("location: http://example.com/offer4".$plus);
?>

这确实可以更新值,但适用于数据库中的所有用户,而不仅仅是登录的一个用户。因此,假设 Jim 已完成此优惠,他的优惠值将更新为 3,但所有其他用户的报值(value)也会设置为 3,而只有 Jim 的应该如此。 – 希望这是有道理的。我如何更改上面的脚本,以便仅设置登录的用户值。也许是 session 的问题?或者这部分脚本不起作用

$select = mysqli_fetch_assoc(mysqli_query($con,"从用户中选择优惠,WHERE Username = '".$_SESSION['username']."'"));

以防万一它有帮助,这是登录脚本的一部分,它根据用户报价列中的值进行重定向,效果很好。

echo '<meta http-equiv="refresh" content="0;URL=\'http://example.com/offer'.$row['offer'].'\'" />';

因此,对于默认值 1 个用户,重定向到 example.com/offer1 等。

这也是我的完整登录脚本,以防需要:

<?php include "base.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<title>Login</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>  
<body>  
<div id="main">
<?php

if(!empty($_POST['username']) && !empty($_POST['password']))
{
     $username = mysql_real_escape_string($_POST['username']);
    $password = md5(mysql_real_escape_string($_POST['password']));

     $checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'");

    if(mysql_num_rows($checklogin) == 1)
    {
         $row = mysql_fetch_array($checklogin);
        $email = $row['EmailAddress'];

        $_SESSION['Username'] = $username;
        $_SESSION['EmailAddress'] = $email;
        $_SESSION['LoggedIn'] = 1;

         echo "<h1>Success</h1>";
        echo "<p>We are now redirecting you to the member area.</p>";
        echo '<meta http-equiv="refresh" content="0;URL=\'http://example.com/offer'.$row['offer'].'\'" />'; 

    }
    else
    {
         echo "<h1>Error</h1>";
        echo "<p>Sorry, your account could not be found. Please <a href=\"index.php\">click here to try again</a>.</p>";
    }
}
else
{
    ?>

   <h1>Member Login</h1>

   <p>Thanks for visiting! Please either login below, or <a href="register.php">click here to register</a>.</p>

    <form method="post" action="index.php" name="loginform" id="loginform">
    <fieldset>
        <label for="username">Username:</label><input type="text" name="username" id="username" /><br />
        <label for="password">Password:</label><input type="password" name="password" id="password" /><br />
        <input type="submit" name="login" id="login" value="Login" />
    </fieldset>
    </form>

   <?php
}
?>
</div>
</body>
</html>

最后,这是base.php

<?php
session_start();

$dbhost = "localhost"; // this will ususally be 'localhost', but can sometimes differ
$dbname = "user"; // the name of the database that you are going to use for this project
$dbuser = "name"; // the username that you created, or were given, to access your database
$dbpass = "password"; // the password that you created, or were given, to access your database

mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());
mysql_select_db($dbname) or die("MySQL Error: " . mysql_error());
?>

非常感谢您抽出宝贵的时间。

最佳答案

您必须指定一个where条件

修改下面的代码

mysqli_query($con,"UPDATE users SET offer=3".$plus);

mysqli_query($con,"UPDATE users SET offer=3".$plus."where Username  = $_SESSION['username']" );

除非给出where条件,否则更新将应用于表中的所有记录

关于PHP 脚本更新所有用户值而不是单个用户值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24885888/

相关文章:

javascript - 如何通过隐藏输入元素将 PHP 字符串变量传递给 Javascript 函数

php - C++ 在 PHP 中使用命名空间?

php - 如何在 Laravel 中提取多个列

mysql - 等同于 MSSQL with MYSQL 中的语句

ruby-on-rails - 使用 Devise 在 Rails 中更改主机名以进行重定向

php变量知道jquery何时加载?

mysql - 对于使用部分组合键的删除,InnoDB 是否会锁定整个表?

mysql - 有没有什么方法可以将新的 Wordpress 站点与 RoR Web 应用程序连接起来,并从 Wordpress 站点管理其旧数据库,而无需进行数据迁移?

php - 登录后 Wordpress 重定向到引用页面

javascript - 如何使用 Node JS 重定向?