2013-08-09 4 views
0

Я создаю простой инструмент для отслеживания ошибок.Обновление таблицы в Mysql с помощью формы

Когда вы создали проект, вы можете выбрать статус проекта (открыть, в процессе, закончено).

Вы можете изменить этот статус на странице проекта с этой избранной формой:

<form action="classes/changestatus.class.php" method="post"> 
    <label> Change Project Status </label> 
    <select name="status" id="status"> 
     <option value="open">Open</option> 
     <option value="inprogress">In Progress</option> 
     <option value="finished">Finished</option> 
    </select> 
    <input class="small button" value="Change Status" type="submit"> 
</form> 

формы сообщения Действия этого класса:

 $status = $_POST['status'];  
    $sql = "UPDATE INTO projects (status) VALUES ('$status')";  
    $result = mysql_query($sql); 
    $result = mysql_real_escape_string($sql);  
    $latestID = mysql_insert_id(); 

    if ($result) { 
     header('Location: ../projectpage.php?id='.$latestID); 
    } else { 
     echo "There is something wrong. Try again later."; 
    } 

    mysql_close(); 

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

Проблема в том, что я не могу получить идентификатор, если у меня есть эта ссылка, например, «projectpage? Id = 20», она всегда перенаправляет меня на «projectpage? Id = 0».

Может ли кто-нибудь мне помочь? Я знаю, что код не полностью sql-инъекции, и я не использую mysqli, мне просто нравится иметь anwser по моему вопросу.

Спасибо!

+4

и ваш код уязвим для ___SQL INJECTION___ либо надлежащим образом избежать все просьбы или использовать подготовленные заявления –

+0

Не говоря уже о '$ результат = mysql_real_escape_string ($ SQL);' ВСЕГДА возвращает истину ... – Mike

+0

Пожалуйста, пожалуйста, пожалуйста, _please_ : Прекратить использование 'mysql_ *' функций, все расширение устарело и будет удалено в ближайшем будущем. Узнайте, как использовать 'PDO' или' mysqli_ * '(' i' для _improved_). Не могли бы вы объяснить, почему вы _first_ вызываете 'mysql_query', а _then_ вызывают' mysql_real_escape_string'? Потому что это делает _no sense_ вообще –

ответ

1

Попробуйте это,

$sql="UPDATE projects SET status = '$status', id = LAST_INSERT_ID(id)"; 
$latestID = mysql_insert_id(); 

Это будет работает для вас.

0

Использование

$sql="UPDATE projects SET status = '$status'"; 

И mysql_insert_id будет работать только тогда, когда INSERT запрос executed.You нужен id, чтобы обновить его или либо перенаправить его ... Если вы даете id, то вы можете сделать, как

$sql="UPDATE projects SET status = '$status' WHERE id = $id"; 

И перенаправление будет как

header('Location: ../projectpage.php?id='.$id); 
+0

Спасибо, теперь это работает! –

2

Вы не храните идентификатор $ id, поэтому эти данные не передаются. на вашей формы использования:

<input type='hidden' name='hdnID' value="<?php echo $id;?>"> 
<input class="small button" value="Change Status" type="submit"> 

Тогда на Вашем виде:

$status = $_POST['status']; 
$id = $_POST['hdnID']; 
+0

Спасибо, теперь это работает! –

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