2009-12-06 2 views
2

Я не могу понять, почему этот скрипт не работает. Это связано с чем-то в скрипте/функции AJAX POST. Прямо сейчас, когда я нажимаю submit в своей форме, он запускает php-код на той же странице. То, что он должен сделать, это отправить значения формы в project_ajax.php, а затем на странице вернет var успеха, который будет истинным или ложным.jQuery AJAX Сообщение не работает

$(document).ready(function() { 
    $('div#didIt').hide(); 
    $('form[name=adminForm]').submit(function() { 
     $.post('/project_ajax.php', { 
      action: $('[name=action]').val(), 
      pId: $('[name=pId]').val(), 
      name: $('[name=name]').val(), 
      url: $('[url=url]').val(), 
      summary: ('[summary=summary]').val() 
     }, function (data) { 
      if (data.success) { 
       $('div#didIt').slideDown('slow'); 
      } else { 
       alert('Failed SA!'); 
      } 
     }, 'json'); 
     return false; 
    }); 
}); 

Ниже, что код для project_ajax.php ...

if($_POST['action'] == "update") { 
    //Prep the field for Query Entry!----------------------------------- 
    $pId  = $_POST['pId']; 
    $name = trim(mysql_prep($_POST['name'])); 
    $status = 1; 
    $url  = trim(mysql_prep($_POST['url'])); 
    $tumb = false; //False because I still need to make a script for it. 
    $summary = trim(mysql_prep($_POST['summary'])); 
    $creater = $_SESSION['userId']; 
    $created = date("Ymd"); 

    $q = "UPDATE " . DB_NAME . ".`projects` SET 
        name = '{$name}', 
        status = '{$status}', 
        url  = '{$url}', 
        summary = '{$summary}', 
        creater = '{$creater}', 
        created = '{$created}' 
       WHERE `projects`.`id` = {$pId}"; 
    $r = mysql_query($q, $connection); 
    if ($r) { 
     //Successful 
     $data['success'] = true; 
     $date['error'] = false; 
     $date['message'] = "You are the Greatest!"; 

    } else { 
     //Fail 
     $data['success'] = false; 
     $data['error'] = true; 
     $date['message'] = "You can't do it fool!"; 

    } 

} else { 
    $data['success'] = false; 
    $date['error'] = true; 
    $data['message'] = "You Failed Stupid!"; 
} 

echo json_encode($data); 

Примечание: Когда нагрузка этой страницы. Браузер никогда не загружается. Синее кольцо на вкладке заголовка в IE8 вращается, как будто страница никогда не загружается финбом.

+1

Ваш PHP-код выглядит так, как будто он подвержен атакам SQL Injection. Угадайте, что произойдет, если пользователь отправит 'pId' со значением' 123; DROP TABLE some_table'. См. Http://en.wikipedia.org/wiki/SQL_injection для описания проблемы и нескольких решений для PHP –

+0

Ну, я считаю, что мой код подвержен SQL-инъекциям. Однако я не верю, что «pId» - это один. Только потому, что pId является скрытым значением, которое вытаскивается из базы данных. Разве пользователь не может изменять скрытые значения? Могут ли они изменить скрытые значения? – SgtOJ

+0

вы присваиваете значение от '$ _POST' до' $ pId' без экранирования или приведения его в соответствие. Если 'projects.id' является целым числом, вы можете применить его к int (' $ pId = (int) $ _POST ['pId']; '). Но '$ pId' - не единственная проблема, поэтому я хочу отказаться от функций' mysql_ * 'и использовать что-то вроде PDO (http://php.net/manual/en/book.pdo.php) который поддерживает подготовленные заявления. –

ответ

4

На этой линии:

summary: ('[summary=summary]').val()}, 

У вас не хватает $, который представляет собой функцию JQuery. Исправлено:

summary: $('[summary=summary]').val()}, 

Поскольку у вас есть ошибка Javascript, выполнение прекращается. Таким образом, загрузка берет навсегда.

+0

Спасибо. Это исправило ошибку, но этот скрипт не работает. – SgtOJ

+0

Спасибо. Выяснил, что случилось с отсутствующим «$» ... Другая проблема заключалась в том, что «/» на «$ .post» («/ project_ajax.php», {« – SgtOJ

+3

» хорошо для вас. – mauris

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