Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重写数据库值php_Php_Mysql - Fatal编程技术网

重写数据库值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>