2013-11-18 2 views
0

У меня возникла проблема с переписыванием значения базы данных.Переписать значение базы данных php

У меня есть следующий код:

<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> 

Все это не является проблемой. Он показывает имя пользователя ('user_name') и ('user_channel') из базы данных в тегах div.

Идея состоит в том, что пользователь выбирает вариант из тега select и через 'rewrite.php' он переписывает этот «user_channel» в базе данных.

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) 
?> 

Когда я пишу что-то, что сделает новую таблицу вместо того, чтобы переписать этот канал пользователей.

Есть идеи, кто-нибудь?

+1

Где код rewrite.php? –

+0

Ваш код, который выполняет запись в таблицу, является проблемой, которая, вероятно, является кодом, который не отображается. разделить его? – PlantTheIdea

+0

Я обновил комментарий с помощью PHP – Joep

ответ

2

Я думаю, что вы используете UPDATE заявление вместо вашего странного INSERT INTO оператора (который, скорее всего, создающего новую таблицу, кстати):

$user = $_POST['user_name']; 
$channel = $_POST['user_channel']; 

"UPDATE users SET user_channel = '$channel' WHERE user_name = '$user';" 

Или что-то вдоль этих линий.

Также, пожалуйста, ПОЖАЛУЙСТА обновите свой код для использования MySQLi. Использование синтаксиса mysql_ устарело из-за присущих недостатков безопасности, которые оставляют ваш код открытым для опасных событий. Что-то вроде этого является гораздо более безопасным:

$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 инъекций. Дополнительная информация может быть found in the documentation, обязательный параметр - это хорошее место для начала.

+0

Спасибо за предупреждение! Я попытаюсь понять это. Предположим, что я новичок в этой области ... – Joep

+0

не беспокоится, я только что обновил свой ответ, чтобы включить пример того, что вы могли бы сделать с синтаксисом MySQLi. вам нужно установить драйвер (обычно вы можете настроить его как модуль Perl, обычно доступный с любым хостом), но на самом деле это способ создания этих запросов. – PlantTheIdea

+0

Отлично, спасибо PlantTheIdea! – Joep

0

Хорошо, это работает ...

Я сделал это:

<?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> 
Смежные вопросы