2009-12-06 5 views
2

Je ne peux pas comprendre pourquoi ce script ne fonctionne pas. Cela a à voir avec quelque chose dans le script/la fonction AJAX POST. En ce moment, quand je tape soumettre sur mon formulaire, il exécute le code php sur la même page. Ce qu'il devrait faire est d'envoyer les valeurs du formulaire à project_ajax.php, puis à la page retournera une variable de succès qui sera vrai ou faux.jQuery AJAX Post ne fonctionne pas

$(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; 
    }); 
}); 

est inférieur à ce code pour 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); 

Note: Lorsque la charge sur cette page. Le navigateur ne charge jamais vraiment. L'anneau bleu sur l'onglet titre dans IE8 tourne comme si la page ne se chargeait jamais.

+1

Votre code PHP semble être sujet aux attaques par injection SQL. Devinez ce qui se passe si l'utilisateur envoie un 'pId' avec la valeur' 123; DROP TABLE some_table'. Voir http://en.wikipedia.org/wiki/SQL_injection pour une description du problème et plusieurs solutions pour PHP –

+0

Eh bien, je crois que mon code est sujet aux injections SQL. Cependant, je ne crois pas "PID" est l'un. Seulement parce que pId est une valeur cachée tirée d'une base de données. Sauf si l'utilisateur peut changer les valeurs cachées? Peuvent-ils changer les valeurs cachées? – SgtOJ

+0

vous attribuez une valeur de '$ _POST' à' $ pId' sans l'échapper ou le typer. Si 'projects.id' est un entier, vous pouvez le convertir en int (' $ pId = (int) $ _POST ['pId']; '). Mais '$ pId' n'est pas le seul problème, donc ma suggestion est de s'éloigner des fonctions' mysql_ * 'et d'utiliser quelque chose comme PDO (http://php.net/manual/fr/book.pdo.php) qui prend en charge les déclarations préparées. –

Répondre

4

Sur cette ligne:

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

Vous avez un manque $, ce qui représente la fonction jQuery. Correction:

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

Parce que vous avez une erreur Javascript, l'exécution est terminée. Ainsi, le chargement prend une éternité.

+0

Merci. Cela a corrigé une erreur, mais ce script ne fonctionne toujours pas. – SgtOJ

+0

Merci. Compris ce qui n'allait pas à côté du "$" manquant ... L'autre problème était le "/" à "$ .post ('/ project_ajax.php', {" – SgtOJ

+3

bon pour vous alors. – mauris