2016-07-03 6 views
0

hy there i want to make simple upadate form для имени пользователя и биографии, и что-то не хватает, и я не могу обновить, я получаю пустую страницу, и когда я перезагружаю ничто, обновляйте sooo, это мой код на сайте Wordpress:Wordpress sql update update

[insert_php] 
global $current_user; 
global $wpdb; 


$result = $wpdb->get_results("SELECT * FROM wpah_users WHERE ID=$current_user->ID"); 
foreach($result as $row) 
{ 
echo "<form action='' method='post'>"; 
echo "<br><br><br>"; 
echo "<p>Name: &nbsp;&nbsp;&nbsp; " .$row->wpah_users ." "."<input  type='text' id='name' Name='name'value='$row->user_nicename'/> "." </p><br> "; 
echo "<p>Biography: &nbsp;&nbsp;&nbsp; " .$row->wpah_users ." "."<input type='text' id='Biography' name='Biography' value='$row->Biography'/> "." </p><br> "; 
echo "<input type='submit' name='show' id='show' value='Upvote'>"; 
    echo '</form>'; 
} 
if(isset($_POST['show'])){ 
    $name=$_POST["name"]; 
    $biography=$_POST["Biography"]; 



$sql ="UPDATE $wpah_users 
    SET ".$Biography."`= '$Biography', WHERE `".$ID."` = '$current_user->ID'"; 
$rez = $wpdb->query($sql); 


} 
[/insert_php] 
+1

, пожалуйста, укажите свой код правильно. – PaulH

+1

Вы широко открыты для [SQL Injections] (http://php.net/manual/en/security.database.sql-injection.php). Поскольку вы используете Wordpress, загляните в [Data Valdiation] (https://codex.wordpress.org/Data_Validation#Database) –

+0

Кстати, вам нужно жестко закодировать имена столбцов, теперь запрос будет терпеть неудачу, поскольку вы пытаетесь задайте имя столбца и значение, так как значение '$ Biography' и' $ ID' даже не определено. –

ответ

0

Ряд проблем.

  1. Комментарий на SQL injection и Data Validation не троллинг, на самом деле ... последний является воплощением хороших стандартов кодирования.
  2. Мы слышим, что помогаем, а не помогаем и внедряем плохое кодирование, которое заставит вас и других столкнуться с множеством проблем.
  3. Вы считаете, что ваш код хорошо написан. Например, WHERE ".$ID." содержит идентификатор '.', который, насколько мне известно, php распознает это как вызов другого объекта в боковом идентификаторе. Возможно, вы имеете в виду это, но это SQL, и вы используете Dynamic Query. SQL выполняет по SQL правила.
  4. Если какие-либо столбцы являются @вариабельными, то для правильной работы они должны быть проверены в SQL. Я предлагаю вам посмотреть Dynamic SQL - MSDN, чтобы понять, как SQL смотрит на строки и переменные.
  5. Используйте sp_executesql - MSDN в вашем запросе. Сам запрос не подвергается воздействию пользователя, и он правильно проверяет каждую переменную таким образом, что SQL Injection невозможно.

  6. Вы относитесь к реляционному языку как к курсору. Зачем? SQL более чем способен полностью вернуть весь набор результатов. Используйте SQL, как и предполагалось.

Надеемся, эти подсказки помогут вам найти решение. С уважением,