重写数据库值php
我在重写数据库值时遇到问题 我有以下代码的密码:重写数据库值php,php,mysql,Php,Mysql,我在重写数据库值时遇到问题 我有以下代码的密码: <div> Hey, <?php echo $_SESSION['user_name']; ?>. You are logged in. </div> <div> Your saved channel is <?php echo $_SESSION['user_channel']; ?>. </div> <form method="post"
<div>
Hey, <?php echo $_SESSION['user_name']; ?>.
You are logged in.
</div>
<div>
Your saved channel is <?php echo $_SESSION['user_channel']; ?>.
</div>
<form method="post" action="rewrite.php">
<select name="user_channel" id="user_channel">
<option value="NOS">NOS</option>
<option value="NU">NU</option>
<option value="RTL">RTL</option>
</select>
<input type="submit" value="Save">
</form>
嘿
您已登录。
您保存的频道为。
网络操作系统
怒族
RTL
所有这些都没有问题。它在div标记中显示数据库中的用户名('user\u name')和('user\u channel')
这个想法是用户从select标记中选择一个选项,并通过“rewrite.php”在数据库中重写这个“user\u通道”
rewrite.php
<?php
$con = mysql_connect("db_host","db_name","db_pass");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("m1_ac082e9d", $con);
$sql="INSERT INTO users (user_channel)
VALUES
('$_POST[user_channel]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
echo "1 record added";
mysql_close($con)
?>
我认为您使用了一个UPDATE
语句,而不是奇怪的INSERT-INTO
语句(顺便说一句,这可能会创建一个新表):
或者类似的东西
另外,请,请,请更新您的代码以使用MySQLi。由于固有的安全缺陷,使得您的代码容易发生危险事件,因此不推荐使用mysql\uuz
语法。像这样的东西更安全:
$link = mysqli_connect('db_host', 'db_name', 'db_pass', 'm1_ac082e9d');
$stmt = "UPDATE users SET user_channel = ? WHERE user_name = ?;"
if(mysqli_prepare($link,$stmt)){
mysqli_stmt_bind_param($stmt, 'ss', $channel, $user);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
}
mysqli_close($link);
mysqli语法的使用是解决最近安全漏洞的关键,绑定语句确实使您的语句在SQL注入中防弹。可以提供更多信息,bind param是一个很好的起点。好的,它可以工作
我这样做:
<?php
if(isset($_POST['submit']))
{
$db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$user = $_SESSION['user_name'];
$channel = $_POST['user_channel'];
mysqli_query($db_connection,"UPDATE users SET user_channel='$channel' WHERE user_name='$user'");
$_SESSION['user_channel'] = $channel;
}
?>
<div>
Hey, <?php echo $_SESSION['user_name']; ?>.
You are logged in.
</div>
<div>
Your choosen channel is <?php echo $_SESSION['user_channel']; ?>
</div>
<div>
<a href="index.php?logout">Logout</a>
</div>
<form method="post">
<select name="user_channel" id="user_channel">
<option value="NOS">NOS</option>
<option value="NU">NU</option>
<option value="RTL">RTL</option>
</select>
<input type="submit" name="submit" value="Bewaar">
</form>
rewrite.php的代码在哪里?您执行表写入的代码可能就是问题所在,而恰好是未显示的代码。介意分享吗?我用PHPY更新了评论你正在查看UPDATE
a用户条目。。。您正在使用INSERT
语句。。。这里有点不对劲…。。。它将创建一个新表,而不是重写此用户频道。
-您是说它正在MySQL数据库中创建一个表吗?谢谢您的警告!我会设法弄明白的。假设我是这个领域的新手……不用担心,我刚刚更新了我的答案,其中包含了一个示例,说明了如何使用MySQLi语法。您需要安装驱动程序(通常您可以将其设置为Perl模块,任何主机都可以使用),但这确实是今后构建此类查询的方法。嘿,如果它解决了您的问题,请不要感谢我,谢谢复选标记。;)
<?php
if(isset($_POST['submit']))
{
$db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$user = $_SESSION['user_name'];
$channel = $_POST['user_channel'];
mysqli_query($db_connection,"UPDATE users SET user_channel='$channel' WHERE user_name='$user'");
$_SESSION['user_channel'] = $channel;
}
?>
<div>
Hey, <?php echo $_SESSION['user_name']; ?>.
You are logged in.
</div>
<div>
Your choosen channel is <?php echo $_SESSION['user_channel']; ?>
</div>
<div>
<a href="index.php?logout">Logout</a>
</div>
<form method="post">
<select name="user_channel" id="user_channel">
<option value="NOS">NOS</option>
<option value="NU">NU</option>
<option value="RTL">RTL</option>
</select>
<input type="submit" name="submit" value="Bewaar">
</form>