2016-01-14 3 views
0

У меня есть следующая форма с кнопки отправки:Почему я не буду обновлять базу данных sql?

<form id ="easytohard" class = "classtest" action="framework.php" method="POST"> 

<div class="test" style="display:none"> 

<input type="submit" name="easytohardbutton"> 

</div> 
</form> 

Примечание: У меня есть session_start(); в другом месте выше этого сценария в коде.

Когда я нажимаю кнопку «отправить», я хочу, чтобы она обновила столбец под названием «FUNCTIONSLEVEL» в базе данных под названием «ответы». Чтобы сделать это, я попытался использовать следующий код:

<?php 
$id = $_SESSION['id']; 

if(isset($_POST['easytohardbutton'])){ 

    $res6 = $db->query("SELECT FUNCTIONSLEVEL FROM answers WHERE id=$id"); 
    $data6 = $res6->fetch_array(); 

    if($data6['FUNCTIONSLEVEL']==0)$db->query("UPDATE answers SET FUNCTIONSLEVEL = 1 WHERE id=$id"); 

} 
?> 

Ниже приведен скриншот SQL, так что вы можете увидеть, что не должно быть никаких проблем с моей ссылки базы данных.

enter image description here

Спасибо!

+0

Это странно, весь div, который имеет кнопку, имеет 'display: none' inline css. вы даже не можете нажать кнопку на всех == без обновления. lol – Ghost

+0

Есть ли у вас какие-либо ошибки? Если нет, вы * ищете * для ошибок (сообщения об ошибках, для PHP и используемого SQL API)? – Qirel

+0

@Ghost Это связано с другой частью кода. Он появляется после выполнения другого условия. – user3666954

ответ

1

Он не обновляется, потому что вы еще не начали сеанс. Вам нужно положить:

session_start(); 

на каждой странице, что вы хотите использовать сессии на. Таким образом, ваша переменная $id по существу не равна нулю.

Не говоря уже о том, что вы используете PDO/Mysqli, почему вы не используете Подготовленные заявления? Наряду с вопросом, что вы присваивающей вместо сравнения:

if($data6['FUNCTIONSLEVEL']=0)... 

Должно быть:

if($data6['FUNCTIONSLEVEL']==0).... 
+0

У меня был session_start(), выше этого в другом месте кода. (Sry - забыли включить сюда.) Я изменил значение = на a == и он по-прежнему не обновляется. – user3666954

+0

@ user3666954 вы можете сделать 'print_r ($ data6);' перед 'if' и сообщить мне, что он показывает. – Darren

+1

Только что заметили еще одну опечатку в коде:' SET FUNCTIONSLEVEL == 1'. Это должно быть просто '=' . – Barmar

3

Вам не нужно использовать два отдельных запросов, вы можете сделать все это в SQL. И вы должны использовать подготовленный запрос, а не замену строки.

if(isset($_POST['easytohardbutton'])){ 
    $stmt = $db->prepare("UPDATE answers SET functionslevel = 1 
          WHERE id = ? AND functionslevel = 0") or die($db->error); 
    $stmt->bind_param("i", $id); 
    $stmt->execute(); 
} 
+0

Получил мой голос за подготовленный! – Darren

+0

... и более простой код! – Qirel

+0

Хм, это не сработало. (Я заменил id =? Id = $ id.) Что означает «i» после bind_param? Может, мне следовало это изменить? – user3666954

Смежные вопросы