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

PHP脚本更新所有用户值,而不是单个用户值,php,mysql,redirect,Php,Mysql,Redirect,谈到PHP,我几乎是一个完全的初学者,在更新数据库中的值时遇到了一些问题——当脚本启动时,它会更新列中的每个用户值,而不仅仅是登录的个人 一些背景信息: 数据库名称:“用户” 表“用户”中包含用户ID、用户名、密码、电子邮件地址、报价等列 我正在工作的网站允许用户完成许多优惠,然后在完成后获得奖励。offer列的默认值为“1”,用户登录后将根据offer列中的值重定向。(因此,在第一次登录时,用户被重定向到example.com/offer1,在提供1完成后,此值将更新,因此在下一次登录时,用户

谈到PHP,我几乎是一个完全的初学者,在更新数据库中的值时遇到了一些问题——当脚本启动时,它会更新列中的每个用户值,而不仅仅是登录的个人

一些背景信息:

数据库名称:“用户”

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

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

这是在报价完成后(在本例中是在报价3完成后)播放的脚本–目的是连接到数据库,然后更新该用户的“报价值”,以便在下次登录时将其定向到正确的报价–从而存储其进度:

<?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);
?>
因此,对于默认值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>

登录

必须指定where条件

更改下面的代码

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


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

您的问题似乎不是PHP,而是SQL

修理:

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


更新foo set bar=3,其中
。在哪里使用!确定要更新的用户。谢谢@Vijayaragavendran,由于某种原因,我在替换代码时遇到了语法错误。似乎无法更正它。只是第6行出现语法错误-这是完整的代码(感谢您的帮助!)好的,这就解决了语法问题,非常好。刚才根本没有更新offer值:((即在脚本运行后保持为1)这可能是登录脚本没有正确启动会话的问题吗?再次感谢您的帮助Thank@Sérgio Bernardo;尝试交换此脚本,但现在它根本没有更新数据库中的值。可能是一些SQL错误…将此代码放在que UPDATE query之后,以查看mySQL服务器中的错误:打印“mySQL错误:”.mysqli_错误();
mysqli_query($con,"UPDATE users SET offer=3".$plus);
mysqli_query($con,"UPDATE users SET offer=3".$plus."where Username  = $_SESSION['username']" );
mysqli_query($con,"UPDATE users SET offer=3".$plus);
mysqli_query($con,"UPDATE users SET offer=".$plus." WHERE Username = '".$_SESSION['username']."'");