2011-10-11 6 views
0

J'ai un formulaire qui envoie les valeurs aux variables $ _POST ['person_id'], $ _POST ['accident_loc'], $ _POST ['message'] et $ _POST ['nom' ]comment obtenir le code de réponse http

Le fichier php insère les valeurs en tant qu'enregistrement dans la base de données, cela ne me pose aucun problème. Mais je veux retourner une erreur quand le formulaire n'envoie aucune valeur aux variables. Je veux dire quand je soumets un formulaire sans aucune valeur. donc j'ai fait une instruction if if(isset($_POST['person_id']) && isset($_POST['accident_loc']) && isset($_POST['message']) && isset($_POST['name'])){} si cette instruction échoue, appelez la fonction "sendResponse()".

maintenant je veux ce fichier pour renvoyer le code de statut 400 à mon fichier javascript afin que je puisse écrire quelques conditions d'erreur. Mais quand j'ai essayé d'afficher la valeur du code de statut request.status il m'a donné 0 comme ses valeurs

Ci-dessous mon fichier php .. pouvez-vous me dire comment envoyer le code de statut ??

<?php 
    //allowing access to the server which contains the following host-origin 
if($_SERVER[HOST_ORIGIN]=="http:\\localhost") 
    header('Access-Control-Allow-Origin:http:\\http:localhost'); 

function sendResponse(){ 
    header('HTTP/1.1 400 invalid request'); 
    header('Content-type: text/html'); 
    echo "invalid request"; 
} 
if(isset($_POST['person_id']) && isset($_POST['accident_loc']) && isset($_POST['message']) && isset($_POST['name'])) 
{ 
    //php mysql database info 
    require ("phpMysql_dbInfo.php"); 
    //getting the arguments from the url 
    $person_id=$_POST['person_id']; 
    $accident_loc=$_POST['accident_loc']; 
    $message=$_POST['message']; 
    $name=$_POST['name']; 
    //connecting to the database 
    $connection= mysql_connect($local_host,$username,$password); 
    if(!$connection) 
     die(mysql_error()."</br>"); 
    //selecting the db 
    $select_db= mysql_select_db($database_name); 
    if(!$select_db) 
     die(mysql_error()."</br>"); 
    //inserting the values into the database 
    $query= sprintf("insert into messages_to_people(name,accident_location,message,person_id) 
       values('%s','%s','%s','%s')", 
       mysql_real_escape_string($name), 
       mysql_real_escape_string($accident_loc), 
       mysql_real_escape_string($message), 
       mysql_real_escape_string($person_id)); 
    $result=mysql_query($query); 

    if(!$result) 
     echo mysql_error().'</br>'; 
} 
    else 
sendResponse(); 
?> 

MISE À JOUR: ici est mon javascript

function downloadXml (url,params,callback) { 
      var request= window.XMLHttpRequest ? new XMLHttpRequest(): new ActiveXObject('Microsoft.XMLHTTP'); 
      request.onreadystatechange= function(){ 
      if(request.readyState==4){ 
    //gives me a zero when i try to display it through alert 
       alert(request.status); 
       callback(request, request.status); 
      } 
      }; 
      request.open('POST',url,true); 

      request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
         request.send(params); 

} 

si vous trouvez un problème dans mon javascript merci de me corriger

+0

Regardez comment activer les rapports d'erreurs/avertissements en PHP, puis inspectez la réponse de PHP avec Fiddler ou Firebug. Je suspecte fortement qu'il vous avertira que les en-têtes ne peuvent pas être modifiés après que la sortie a été écrite - vous faites écho à votre erreur MySQL (qui en soi pourrait être une mauvaise idée) avant de définir l'en-tête de réponse. – tomfumb

+0

Pourquoi exécutez-vous toujours 'sendResponse()'? Ne voulez-vous pas un 'else' là-bas, de sorte qu'il ne soit appelé que lorsque la condition' if' échoue? – pimvdb

+0

ya que vous avez raison je suis désolé tout en le collant j'ai fait une erreur le corrigera maintenant – indr

Répondre

2

Vous faites presque droite, voici comment je capable de le faire de mon côté

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
<script> 

$(function(){ 

    alert('getting page'); 
    jqXHR = $.get(
     'index.php', 
     function(data){ 
      alert(data); 
     } 
    ) 
    .success(function(){ alert('second success'); }) 
    .error(function(){ alert('error'); }) 
    .complete(function(){ alert('complete'); }); 
}); 

</script> 

Et dans le second fichier:

<?php header('HTTP/1.1 400 Bad Request'); ?> 
Invalid request 

Tout cela est disponible sur le site jQuery, juste l'adapter à vos besoins pour le faire fonctionner dans votre système: http://api.jquery.com/jQuery.get/

Bonne chance

+0

Remarque, j'ai supposé que votre partie PHP a envoyé l'erreur 400. Si c'est le cas, alors votre problème n'est pas dans la partie PHP mais dans la partie javascript. Et c'est ce que je vous ai donné ici, le comment en javascript ... –

+0

Salut merci pour le lien .. mais je ne crois pas que le problème est dans mon javacript. J'ai mis à jour mon code javascript, si vous trouvez une faute pls laissez-moi savoir .. et je suis également passé par votre lien – indr

1

lieu de SendResponse(); suffit d'envoyer le code d'erreur HTTP approprié.

La ligne

header('HTTP/1.1 400 Bad Request'); 

fera pour vous. Pour une liste de tous les codes d'état valides, jetez un oeil à http://en.wikipedia.org/wiki/List_of_HTTP_status_codes

+0

J'essaie d'utiliser la fonction sendReponse() afin que je puisse envoyer plus d'un code d'erreur http. Je viens de l'essayer avec un mais ça ne marche pas :( – indr

Questions connexes