Retour requête php -> Erreur 500

Rechercher

Retour requête php -> Erreur 500

Par LELOUC  -  34 reponses  -  Le 11/05/2020 15:24  -  Editer  - 

Bonjour,
Le projet: sur une page nommée criteria.html le visiteur saisit un nom et sélectionne 2 critères dans les listes. Le clic sur envoyer ouvre la page retour.php ou doit apparaitre le résultat de la requête. Actuellement le résultat est ERREUR 500.

Merci de votre aide.

    <!doctype html>  
    <html>  
    <head>  
    <meta charset="UTF-8">  
    <title>CRITERIA</title>  
    </head>  
    <body>  
    <FORM method="POST" action="retour.php">  
    <P>NAME:<br>  
    <INPUT type="text" nom="nom" size=20>  
    </p>   

     <form method="post" action="retour.php" id="criteria">  
    <label for="etat">Criteria n°1</label><br/>  
        <select name="etat" id="etat">     
                          <option value=" - - - "> - - - </option>  
                          <option value="Andhra Pradesh">Andhra Pradesh</option>  
                          <option value="Arunachal Pradesh">Arunachal Pradesh</option>  
                          <option value="Bhopal">Bhopal</option>  
                          <option value="Bihar">Bihar</option>  
                          <option value="Bombay">Bombay</option>  
                          <option value="Chandigarh">Chandigarh</option>  
        </select><br/><br/>  

    <label for="caste">Criteria n°2</label><br/>  
        <select name="caste" id="caste">   
                          <option value=" - - - "> - - - </option>  
                          <option value="Aboriginal">Aboriginal</option>  
                          <option value="Criminal Tribes">Criminal Tribes</option>  
                          <option value="Denotified communities">Denotified communities</option>  
                          <option value="Denotified Tribes">Denotified Tribes</option>  
                          <option value="Dravidian_peoples">Dravidian_peoples</option>  
                          <option value="Ethnic groups">Ethnic groups</option>  
                          <option value="Gotras">Gotras</option>  
        </select><br/><br/>  

    <input type="submit" value="Envoyer" name="requete" />  

    </form>  

    </body>  
    </html>  

    <?php  

    $mysqli = new mysqli("localhost", "bharata", "mot_de_passe", "bharata");  

    if ($mysqli->connect_errno) {  

      die('<p>Connexion impossible : '.$mysqli->connect_error.'</p>');  

    }  

    if (!$result) {  

      die('<p>ERREUR Requête invalide : '.$mysqli->error.'</p>');  

    }  

        $nom = $_POST["nom"] ;          

        $etat = $_POST["etat"] ;  

        $caste = $_POST["caste"] ;  

    $result = $mysqli->query('SELECT * FROM nex21 WHERE nom='$nom' AND etat='$etat' AND caste='$caste) ;  

    if (!$result) {  

      die('<p>ERREUR Requête invalide : '.$mysqli->error.'</p>');  

    }  

    while ($row = $result->fetch_assoc()) {  

      $nom = $row['nom'] ;  

      $etat = $row['etat'] ;  

      $caste = $row['caste'] ;  

      echo '<p>'.$nom.' - '.$etat.' - '.$caste.'</p>'."\r\n" ;  

    }  

    $result->free() ;  

    $mysqli->close() ;  

    ?><br><br>
 

Réponses apportées à cette discussion

Par Cyrano  -  Le 18/05/2020 09:45  -  Haut de page  - 

Bonjour,
pour avancer plus facilement, il faut un minimum d'attention et de discipline. Et ça implique d'écrire proprement son code : ça facilite la relecture et permet surtout de voir beaucoup plus vite des erreurs possibles.

Voici pour commencer une ré-écriture du code PHP :

    <?php
$mysqli = new mysqli("localhost", "bharata", "mot_de_passe", "bharata");

if($mysqli->connect_errno)
{
    die('<p>Connexion impossible : ' . $mysqli->connect_error . '</p>');
}

// if(!$result) <=== la variable $result n'a pas encore été définie, donc ici, ça affichera de toutes façon une erreur.
// {
//     die('<p>ERREUR Requête invalide : ' . $mysqli->error . '</p>');
// }

$nom    = $_POST["nom"];
$etat   = $_POST["etat"];
$caste  = $_POST["caste"];

/**
 * On commence par définir la requête en l'écrivant proprement avec 
 * des concaténation correctes.
 */
$requete = "SELECT * ".
           "FROM nex21 ".
           "WHERE nom   = '". $nom ."' ".
           "  AND etat  = '". $etat ."' ".
           "  AND caste = '". $caste ."'";

$result = $mysqli->query($requete) ;

if(!$result)
{
    die('<p>ERREUR Requête invalide : ' . $mysqli->error . '</p>');
}

while(false != ($row = $result->fetch_assoc()))
{
    $nom = $row['nom'];
    $etat = $row['etat'];
    $caste = $row['caste'];
    echo '<p>' . $nom . ' - ' . $etat . ' - ' . $caste . '</p>' . "\r\n";
}
$result->free();
$mysqli->close();
?><br />
<br />

On aligne bien le code, ça simplifie la vie : à noter, un premier bloc mis en commentaire avec une explication; ensuite, la requête SQL doit être correctement écrite et les concaténation doivent être convenablement faites, sinon, on a toutes les chances d'avoir des erreurs.

Il faudrait déjà essayer ça, et voir si l'erreur 500 persiste ou non.

 
Par LELOUC  -  Le 18/05/2020 17:08  -  Haut de page  - 

Bonjour Cyrano,

Merci de votre aide et de vos explications. Il n'y a plus d'erreur 500, mais la page est blanche. J'ai modifié la page html, mais ce n'est surement pas suffisant.
Cordialement.

<!doctype html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>Apprendre</title>  
</head>  
<body> 
<form action = "apprendre.php" method = "post">    
<p>name:<br>  
<input type="text" nom="nom" size="20">  
</p>   

<form method="post" action="apprendre.php" id="criteria">  
<label for="etat">Criteria n°1</label><br/>  
<select name="etat" id="etat">     
                      <option value=" - - - "> - - - </option>  
                      <option value="Andhra Pradesh">Andhra Pradesh</option>  
                      <option value="Arunachal Pradesh">Arunachal Pradesh</option>  
                      <option value="Bhopal">Bhopal</option>  
                      <option value="KARNATAKA">KANATAKA</option>
                      <option value="Bombay">Bombay</option>  
                      <option value="Chandigarh">Chandigarh</option>  
</select><br/><br/>  

<label for="caste">Criteria n°2</label><br/>  
<select name="caste" id="caste">   
                      <option value=" - - - "> - - - </option>  
                      <option value="Aboriginal">Aboriginal</option>  
                      <option value="OBC">OBC</option>  
                      <option value="Denotified communities">Denotified communities</option>  
                      <option value="Denotified Tribes">Denotified Tribes</option>  
                      <option value="Dravidian_peoples">Dravidian_peoples</option>  
                      <option value="Ethnic groups">Ethnic groups</option>  
                      <option value="Gotras">Gotras</option>  
</select><br/><br/>  

<input type="submit" value="Envoyer" name="requete" />  

</form>  

</body>  
</html>
 
Par Cyrano  -  Le 18/05/2020 18:16  -  Haut de page  - 

Est-ce que la valeur de l'attribut action de la balise <form> est correct ? Ça doit pointer vers la page qui traitera les données du formulaire.

 
Par LELOUC  -  Le 18/05/2020 19:06  -  Haut de page  - 

Les 2 balises pointent bien vers la page php qui envoie la requête.
Mais est-ce correct ?

<body>
<form action = "apprendre.php" method = "post">
<p>name:<br>
<input type="text" nom="nom" size="20">
</p>

<form method="post" action="apprendre.php" id="criteria">  
<label for="etat">Criteria n°1</label><br/>  
<select name="etat" id="etat">
 
Par Cyrano  -  Le 18/05/2020 21:15  -  Haut de page  - 

Ben pour la syntaxe HTML, c'est bon, mais j'ignore si le nom de la page est bon. Je ne sais pas comment sont structurés les fichiers, et sans ça, impossible de dire ce qui est bon ou pas.

 
Par LELOUC  -  Le 18/05/2020 22:05  -  Haut de page  - 

Sur PhpMyAdmin le fichier nex21 sujet de la requête comporte 5 colonnes. La première colonne "nom" la seconde "etat" la troisième "caste". Les 2 dernières ne sont pas utilisées dans cette requête.
Côté nom de page c'est bon:
pour le nom à saisir : <form action = "apprendre.php" method = "post">
pour les 2 menus déroulants : <form method="post" action="apprendre.php" id="criteria">
Pour info je viens de voir que sur le code source de la page la ligne :
<form method="post" action="apprendre.php" id="criteria"> est en rouge ???

 
Par Cyrano  -  Le 18/05/2020 22:13  -  Haut de page  - 

Je parle de la structure des fichiers, pas de la base de données.

Donc il devrait y avoir un premier fichier sur lequel se trouve le formulaire, et l'autre qui se nomme apprendre.php situé dans le même répertoire que le premier. Si ce n'est pas le cas, alors il faudrait m'indiquer les noms exacts des fichiers et leur disposition avec éventuellement les noms des répertoires relatifs au fichier qui contient le formulaire.

 
Par LELOUC  -  Le 18/05/2020 22:36  -  Haut de page  - 

Le premier fichier sur lequel se trouve le formulaire "apprendre_3.html" est sur le même répertoire que "apprendre.php"
Les 2 fichiers s'affichent en ligne sans problème .... mais sans résultat sur "apprendre.php"

 
Par LELOUC  -  Le 18/05/2020 22:38  -  Haut de page  - 

voir: http://bharata.nexgate.ch/apprendre_3.html

 
Par Cyrano  -  Le 18/05/2020 23:26  -  Haut de page  - 

Ok, alors il y a un soucis avec le retour de la requête : je suggère un petit ajout :

/**
 * On commence par définir la requête en l'écrivant proprement avec
 * des concaténation correctes.
 */
$requete =  "SELECT * ".
            "FROM nex21 ".
            "WHERE nom   = '". $nom ."' ".
            "  AND etat  = '". $etat ."' ".
            "  AND caste = '". $caste ."'";
/* Affichage de débogage de la requête */
echo('<pre>'. PHP_EOL);
var_dump($requete);
echo('</pre>'. PHP_EOL);

Ça va afficher la requête SQL telle qu'elle est envoyée à MySQL : il faudrait alors faire un copier/coller et la tester directement dans phpMyAdmin. S'il y a un problème, ça devrait apparaître tout de suite

 
Par LELOUC  -  Le 19/05/2020 14:47  -  Haut de page  - 

Bonjour Cyrano,

  • Requête affichée:
    string(82) "SELECT * FROM nex21 WHERE nom = '' AND etat = 'KARNATAKA' AND caste = 'OBC'"

  • La valeur du "nom" saisie n'est pas prise en compte.

  • Test dans phpMyAdmin:

    Erreur  
    Analyse statique :  
    1 erreurs trouvées lors de l'analyse.  
        Type d'énoncé non reconnu. (near "string" at position 0)  
    Requête SQL : Documentation  
    string(82) "SELECT * FROM nex21 WHERE nom = '' AND etat = 'KARNATAKA' AND caste = 'OBC'"  
    
    MySQL a répondu: Documentation  
    #1064 - Erreur de syntaxe près de 'string(82) "SELECT * FROM nex21 WHERE nom   = ''   AND etat  = 'KARNATAKA'   AND' à la ligne 1  
    

  • J'ai testé :

         SELECT * FROM `nex21` WHERE `nom` = 'ahir' AND etat = 'KARNATAKA' AND caste = 'OBC'   
    
  • MySQL a retourné un résultat vide (aucune ligne).

 
Par Cyrano  -  Le 19/05/2020 14:51  -  Haut de page  - 

Ok, donc... ?
Quelle doit être la suite logique de cette vérification ?

 
Par LELOUC  -  Le 19/05/2020 15:02  -  Haut de page  - 

Le formulaire ?

 
Par Cyrano  -  Le 19/05/2020 15:12  -  Haut de page  - 

Non : un peu de logique voyons !

D'abord, créer une requête (manuellement) qui donne un résultat conforme non vide : une fois que ce sera au point, on aura le canevas qui servira pour construire une requête dynamique;

Ensuite, vérifier ce qui est reçu depuis le formulaire dans le fichier de traitement, par exemple avec un var_dump($_POST) afin de savoir exactement ce qu'on reçoit, ça permet de vérifier si on utilise les bons index :

Ensuite ... ?

 
Par LELOUC  -  Le 19/05/2020 15:53  -  Haut de page  - 
  • Du moment qu'il n'y a qu'un seul formulaire avec un nom à saisir la réponse de la requête est correcte.
    $nom = $_POST['nom'];
    $result = $mysqli->query("SELECT * FROM conca WHERE recherche LIKE '%$nom%' LIMIT 0, 3000") ;

  • Pour info, mais vous avez du vous en apercevoir, mes connaissances en php sont quasiment nulles.

 
Par Cyrano  -  Le 19/05/2020 16:05  -  Haut de page  - 

Pas grave, on est sur ApprendrePHP.com, donc il y est question d'apprentissage.

La programmation requiert logique et discipline, sinon on s'enlise dans des problèmes insolubles.

J'ai fait une suggestion, à savoir utiliser var_dump($_POST) : mais je n'ai pas indiqué où. Selon la logique, où faudrait-il écrire ça ?

 
Par LELOUC  -  Le 19/05/2020 16:28  -  Haut de page  - 

... dans le php

$nom = $_POST["nom"];
$etat = $_POST["etat"];
$caste = $_POST["caste"];
var_dump($_POST);

 
Par LELOUC  -  Le 19/05/2020 18:42  -  Haut de page  - 
  • La requête fonctionne en supprimant dans le formulaire cette ligne:
    <form method="post" action="apprendre.php" id="criteria">

  • avec dans le php le code:
    $result = $mysqli->query("SELECT * FROM nex21 WHERE nom LIKE '%$nom%' AND etat = '". $etat ."' ". " AND caste = '". $caste ."'") ;

Pourquoi ? Cela reste un mystère pour moi ...

 
Par Cyrano  -  Le 19/05/2020 19:12  -  Haut de page  - 

Avec le var_dump, il faudrait voir ce que ça affiche lorsqu'on remplit le formulaire et qu'on l'envoie. Ce sera la première étape.

 
Par LELOUC  -  Le 19/05/2020 22:20  -  Haut de page  - 
  • Résultat:
    array(3) { ["etat"]=> string(9) "KARNATAKA" ["caste"]=> string(3) "OBC" ["requete"]=> string(7) "Envoyer" }
 
Par Cyrano  -  Le 19/05/2020 22:27  -  Haut de page  - 

Ok, qu'est-ce qu'on remarque ? Il manque quelque chose non ?

Et s'il manque, c'est parce qu'il y a une erreur dans la syntaxe HTML du formulaire. Observe attentivement. C'est une erreur classique quand on débute, mais il est important de la débusquer et de la corriger. Et ça concerne bien entendu le champ qui est manquant dans les données envoyées depuis ce formulaire

 
Par LELOUC  -  Le 20/05/2020 14:39  -  Haut de page  - 

Bonjour Cyrano,

Il faut supprimer dans la syntaxe html cette ligne:
<form method="post" action="apprendre.php" id="criteria">

 
Par Cyrano  -  Le 20/05/2020 14:41  -  Haut de page  - 

Pas du tout.

L'erreur est dans le premier champs INPUT

Indice : quels sont les attributs de ce type de champ ?

 
Par LELOUC  -  Le 20/05/2020 19:08  -  Haut de page  - 

Pourquoi en supprimant cette ligne cela fonctionne t'il?

 
Par Cyrano  -  Le 20/05/2020 19:26  -  Haut de page  - 

Ça ne devrait pas, et j'avoue qu'il y a un détail qui m'échappe. Et ça ne résoud pas l'erreur qui est toujours là.

 
Par LELOUC  -  Le 20/05/2020 23:23  -  Haut de page  - 
  • Manque id=" "
    <input type="text" id="nom" nom="nom" size="20">

    • à la place de :

<input type="text" nom="nom" size="20">

 
Par Cyrano  -  Le 20/05/2020 23:24  -  Haut de page  - 

Presque : un attribut est faux et n'existe pas en HTML

 
Par LELOUC  -  Le 21/05/2020 21:31  -  Haut de page  - 

Bonjour Cyrano
- Size ne serait pas un attribut en html ???

 
Par Cyrano  -  Le 21/05/2020 21:37  -  Haut de page  - 

Non, celui-ci est bon, mais un autre ne l'est pas du tout. Ça ne devrait pas être difficile, ce champ n'en présente que quatre et on vient d'en éliminer un, et sur les trois restant, celui ajouté hier est bon aussi ... donc ... ?

Là, je suis certain que plus jamais il n'y aura d'erreur sur ce genre de champ de formulaire, ça a l'air difficile à trouver, pourtant tout ce qu'il faut, c'est de l'attention.
Allez un autre indice : généralement, les mots clés d'un langage comme le HTML ou le PHP ou bien d'autre sont en anglais et non en français.

 
Par LELOUC  -  Le 25/05/2020 18:27  -  Haut de page  - 

Bonjour Cyrano,

<input type = "text" name = "nom" />

<input type = "text" />

  • Les 2 fonctionnent ...
 
Par LELOUC  -  Le 25/05/2020 18:27  -  Haut de page  - 

Bonjour Cyrano,

<input type = "text" name = "nom" />

<input type = "text" />

  • Les 2 fonctionnent ...
 
Par Cyrano  -  Le 25/05/2020 18:36  -  Haut de page  - 

Avec un correctif : la première fonctionne parce qu'un attribut a été modifié, en mettant « name » au lieu de « nom »
Ce genre de faute d'inattention peut être très longue à débusquer, et il était important que je n'apporte pas une réponse toute cuite, la trouver soi-même la grave profondément en mémoire et on ne la commet plus par la suite.

Ce qu'il est important de comprendre : lorsqu'on envoie un formulaire, qu'on utilis la méthode POST ou GET, les données sont envoyées comme un tableau associatif dont les index sont l'identifiant inscrit dans l'attribut « name » des champs du formulaire. Si on ne met pas du tout d'attribut name, la donnée sera envoyée tout de même, mais alors il y aura probablement un index nuérique automatique, ce qui n'est pas du tout pratique parce qu'il faut afficher les données brutes pour savoir quelle donnée correspond à quel index et donc à quel champ.

C'est bon cette fois-ci ? Le formulaire fonctionne ?

 
Par LELOUC  -  Le 25/05/2020 21:50  -  Haut de page  - 

Ca marche, merci Cyrano.

 
Par Cyrano  -  Le 25/05/2020 21:54  -  Haut de page  - 

Super, bonne continuation alors :-)

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |