【发布时间】:2014-07-23 19:14:47
【问题描述】:
当谈到 PHP 时,我几乎是一个完整的初学者,并且我的脚本在更新数据库中的当前用户值时遇到了一些问题——当脚本触发时,它不会更新数据库中的值,因为完全是有意的。
一些背景信息:
数据库名称:“用户”
表“用户”,其中包含用户 ID、用户名、密码、电子邮件地址、报价等列。
我正在开发的网站允许用户完成一些优惠,然后在完成后获得奖励。报价列的默认值为“1”。登录后,用户将根据报价列中的值重定向。 (所以在第一次登录用户被重定向到 example.com/offer1 后,offer 1 完成后这个值被更新,所以下一个登录用户被重定向到 offer 2 - 本质上存储用户进度)这个登录过程工作正常,它只是更新我的问题的值。
这是在报价完成后播放的脚本(在这种情况下,在报价 3 完成之后)– 旨在连接到数据库,然后更新用户“报价”,这样当他们下次登录时,他们将被定向到正确的报价 - 从而存储他们的进度:
~这实际上可能不是脚本本身的问题,而是关于会话在登录时没有正确启动/继续 - 或者可能是脚本没有正确使用会话数据的问题?~
<?php
session_start();
$con = mysqli_connect("localhost","name","password","user");
$select = mysqli_fetch_assoc(mysqli_query($con,"SELECT offer FROM user WHERE Username = '".$_SESSION['username']."'"));
$plus = $select['offer']++;
mysqli_query($con,"UPDATE users SET offer=3".$plus."where user_id = $id" );
header("location: http://example.com/offer4".$plus);
?>
mysqli_query($con,"UPDATE users SET offer=3".$plus."where user_id = $id" ); 根本不起作用,问题可能出在这里吗?
如果有帮助,这是我使用的以前的版本确实可以更新值,但对数据库中的所有用户这样做,而不仅仅是一位已登录的用户。假设 Jim 已完成此优惠,他的优惠值将更新为 3,但所有其他用户的优惠值也将设置为 3,而只有 Jim 的优惠值应该如此。
<?php
session_start();
$con = mysqli_connect("localhost","username","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);
?>
我的登录脚本仅供参考——这可以在登录时将用户重定向到他们的 Offer 列中的值正确工作(我的问题可能与会话未正确启动有关吗?)
<?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());
?>
非常感谢您抽出宝贵的时间,祝您晚上愉快;非常感谢这里所有以前的回复都非常有帮助。
【问题讨论】:
标签: php mysql database session