2015-08-05 2 views
1

Я сделал страницу обновления, которая извлекает запись из таблицы, показывает всю информацию о форме html, где пользователь может изменить/изменить значения и отправить. Следующая страница извлекает эти значения с помощью $ _POST и обновляет таблицу.Обновление запроса, не работающего в PHP и Mysql

$new_id = $_POST['c_id']; 
$new_name = $_POST['c_name']; 
$table_name = "tcompany"; 

$sqlStatement = "UPDATE $table_name SET 'name'=$new_name WHERE 'id'= $new_id"; 
if($result_1 = mysql_query($sqlStatement)) 
{ 
    header('Location: edit_company.php'); 
} 
else { 
     echo "". mysql_error(); 
} 

Я получаю сообщение об ошибке: У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с '' name '= HARDWARE Экспортеры WHERE' id '= 69' в строке 1

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

ответ

6

Не используйте апостроф (') для имен столбцов и используйте его вместо переменных.

$sqlStatement = "UPDATE ".$table_name." SET name='$new_name' WHERE id='$new_id'"; 

Вы также должны дезинфицировать значения, которые вы связываете с вашим запросом. Используйте *_real_escape_string.

$new_id = mysql_real_escape_string($_POST["c_id"]); 

И mysql_* API уже deprecated и вы должны рассмотреть возможность использования mysqli prepared statement вместо этого.

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

/* ESTABLISH FIRST YOUR CONNECTION */ 
$con = new mysqli("YourHost","Username","Password","Database"); /* REPLACE NECESSARY DATA */ 

if($stmt = $con->prepare("UPDATE ? SET name = ? WHERE id = ?")){ /* CHECK IF STATEMENT IS TRUE */ 
    $stmt->bind_param("ssi",$table_name,$_POST["c_name"],$_POST["c_id"]); /* BIND VALUES TO YOUR QUERY */ 
    $stmt->execute(); /* EXECUTE THE QUERY */ 
    $stmt->close(); 
} /* END OF PREPARED STATEMENT */ 
0

Проблема состоит в том, что переменная $new_name содержит пробелы. Поэтому вам следует указать использование переменных в инструкции:

$sqlStatement = "UPDATE $table_name SET 'name'='$new_name' WHERE 'id'= '$new_id'"; 
Смежные вопросы