2012-05-28 6 views
0

Heres код:С этим вопросом что-то не так?

<?php 

$post = htmlspecialchars($_GET["story"]); 
$con = mysql_connect("localhost","xxx","xxx"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("xxx", $con); 


$sql=" 
    UPDATE `tool` SET 
     `title` = '".mysql_real_escape_string($_POST['title'])."', 
     `details` = '".mysql_real_escape_string($_POST['details'])."' 
    WHERE `id` = $post;"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

echo "<a href=story.php?id="; 
echo $post; 
echo ">Back to the story</a>"; 

mysql_close($con) 


?> 

Итак, сначала позвольте мне описать то, что это должен делать. Предполагается, что это редактирование сообщения для моей системы новостей. Он всегда работал, вплоть до недавнего времени. Я понятия не имею, что я изменил, что заставило его перестать работать. Я пробовал все, что знаю, меняя каждую мелочь и удаляя/добавляя части кода.

Что происходит:

Когда я редактирую пост в первый раз, название, и детали полностью получить уничтожены. Понятия не имею почему. Это происходит только с каждым отдельным сообщением, 1 раз. Если я отредактирую второй раз, он останется прежним, никаких проблем вообще.

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

Я честно пробовал себя на этом, я не уверен, что происходит. Любая помощь всегда приветствуется.

+1

Существует точка с запятой отсутствует после 'mysql_close ($ CON)' – ThiefMaster

+0

бессмысленные ', используя htmlspecialchars для санобработки запроса. .. –

+0

@ThiefMaster: точка с запятой не требуется в последнем утверждении в блоке. См. Http://www.php.net/manual/en/language.basic-syntax.instruction-separation.php – sdjuan

ответ

0
if (intval($post) > 0){ 
    $sql= "UPDATE `tool` SET 
       `title` = '".mysql_real_escape_string($_POST['title'])."', 
       `details` = '".mysql_real_escape_string($_POST['details'])."' 
      WHERE `id` = 'intval($post)' 
      LIMIT 1"; 
} 

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

0

Когда я редактирую сообщение для ПЕРВОГО времени, заголовок и данные полностью уничтожены.

Я полагаю, что первый раз вокруг вы не проводки титула и детали (вызывая $_POST['title'] и $_POST['details'] быть пустыми), тогда как во второй раз вы.

Вам необходимо проверить форму, с которой вы отправляете, когда они пусты. Такие инструменты, как Fiddler, идеально подходят для этой ситуации.

Также вам нужно узнать о SQL Injection и методах защиты от него.

0

поставить $post в запросе кавычки:

WHERE `id` = '$post' 
+1

'$ post' может быть целым числом, и в этом случае он должен работать, поэтому' '' не требуются во всех случаях. Тем не менее, для определения того, является ли это ожидаемым, должна быть больше проверки и переменной очистки. –

0

вы смешиваете $ _GET и $ _POST.

$post = htmlspecialchars($_GET["story"]); 

попробовать

$post = htmlspecialchars($_POST["story"]); 

убедившись, что ваша форма имеет возможность отправлять все те

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