Problème Programme php [Fermé]

Signaler
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
-
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
-
Bonjour,

Je débute dans php. Je souhaite créer un programme qui prend les informations correspondante au nom rechercher (ex: quand je recherche pierre, ses infos apparaissent).

Voici mon programme :
<?php

     //définition des constantes de connexion
  define ('NOM_SERVEUR',"root");
  define ('MOT_PASSE', "");
  define ('SERVEUR', "127.0.0.1");
  define ('NOM_BASE', "base_simple");
  
 //Connexion au serveur
 $connexion = mysqli_connect(SERVEUR, NOM_SERVEUR, MOT_PASSE);
 //text connexion au serveur
 if(!$connexion){
      echo "Impossible de se connecter au serveur MySQL";
   exit;
 }
 //test accès à la BDD
 if(!mysqli_select_db($connexion, NOM_BASE)) {
      echo "Impossible de se connecter à la BDD";
   exit;
 }

 //récupération de tous les enregistrements de la table Utilisateur
 $resultat = mysqli_query ("select * FROM utilisateur where prenom like '%" . $_POST["prenom"]. "%' order by
 nom", $connexion, NOM_BASE);
 if($connexion){
     echo "<h1>Résultat de votre recherche</h1>\n";
     //nb de lignes contenu dans résultat
     $nbUtilisateur = mysql_num_rows($resultat);
     if($nbUtilisateur > 0){
         //récupération de chaque lignes
      echo "<table border='1'>\n";
      echo "<tr>\n";
      echo "<td><strong>Prénom</strong></td>\n";
      echo "<td><strong>Nom</strong></td>\n";
      echo "<td><strong>Email</strong></td>\n";
      echo "<td><strong>N°Téléphone</strong></td>\n";
      While($utilisateur = mysql_fetch_array($resultat)){
       echo "<tr>\n";
       echo "<td>" . $utilisateur["Prénom"] . "</td>\n";
       echo "<td>" . $utilisateur["Nom"] . "</td>\n";
       echo "<td>" . $utilisateur["Email"] . "</td>\n";
       echo "<td>" . $utilisateur["N°Téléphone"] . "</td>\n";
       echo "</tr>\n";  
         }
      echo "</table>\n";
     }else{
      echo "<p>Désolé, il n'y a pas de réponse correspondante à votre recherche.</p>";
        }
 }else{
  echo "Erreure dans l'éxécution de la requête </br>";
  echo "le message d'erreure est : " . mysql_error($connexion);
 }  
   
?>


Et voici les erreurs :

Notice: Undefined index: prenom in C:\Users\Noel\Pictures\phpMySQL\ReceptionFormulaire.php on line 30

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\Users\Noel\Pictures\phpMySQL\ReceptionFormulaire.php on line 31
Résultat de votre recherche


Warning: mysql_num_rows() expects parameter 1 to be resource, null given in C:\Users\Noel\Pictures\phpMySQL\ReceptionFormulaire.php on line 35
Désolé, il n'y a pas de réponse correspondante à votre recherche.

Quelqu'un aurai t-il les réponses svp ?
Merci d'avance ;p

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
.
.

4 réponses

Messages postés
33136
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 juillet 2021
3 638
Bonjour,

1 - Quel est le nom du fichier (du code) que tu nous montres ?
2 - Attention à ne pas utiliser de caractères accentués dans le nom de tes variables
Prénom


3 - Tu utilises mysqli _* ... pourquoi avoir également utilisé des fonctions
mysql_* ??
Comme par exemple :
$nbUtilisateur = mysql_num_rows($resultat);

ou encore
While($utilisateur = mysql_fetch_array($resultat)){

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 259
pourquoi avoir également utilisé des fonctions
mysql_*
Ça, c'est encore quelqu'un qui traduit du code mysql_* comme un bourrin et qui oublie des morceaux.
Messages postés
33136
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 juillet 2021
3 638
Commence par vérifier que la connexion à ta BDD est bonne .. en ajoutant un " OR DIE.. ".

 //Connexion au serveur
 or die("Error " . mysqli_error($link));


... sachant que la syntaxe avec mysqli est différente de celle de mysql ... puisqu'il faut y indiquer la BDD..... chose que tu faisais en mysql avec une instruction select_db .... (donc à supprimer.)

$link = mysqli_connect("myhost","myuser","mypassw","mybd") or die("Error " . mysqli_error($link));

Et donc.. pour ton code :
 $connexion = mysqli_connect(SERVEUR, NOM_SERVEUR, MOT_PASSE,NOM_BASE)  or die("Error " . mysqli_error($connexion ));


Ensuite.. pour l'instruction QUERY .. la syntaxe mysqli est de la forme : (voir le manuel : https://www.php.net/manual/fr/mysqli.query.php
mixed mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] )

c'est à dire pour ton code :
$resultat = mysqli_query ($connexion ,"select * FROM utilisateur where prenom like '%" . $_POST["prenom"]. "%' order by
 nom");



Bref.. une fois ces corrections effectuées ... pense à retirer toutes les instruction mysql_* qui ne servent plus.


Et pour finir ... pour ce qui est de ton message d'erreur sur le "prenom" ...
le souci vient très certaienement du fait que ton formulaire .. ne dispose d'aucun champ (input) dont le "NAME" serait "prenom" ...
Pour le vérifier.. il te suffit de faire un
 print_r($_POST);
au début de ton code PHP pour voir ce que ta variable contient.

NB : Il faut récupérer les variables et s'assurer qu'elles existent via la fonction ISSET (ou !empty) ..... AVANT de les utiliser
$prenom = !empty($_POST["prenom"])?$_POST["prenom"]:NULL;

//si la variable prenom existe et n'est pas vide ...
if($prenom){
//je sépare la requete de son execution (c'est plus simple à lire et pour debuguer ! )
$sql = "SELECT *
           FROM utilisateur 
           WHERE prenom like '%" . $prenom. "%' 
           ORDER BY  nom";

$resultat = mysqli_query ($connexion ,$sql);


}else{
  echo "<br> Erreur : Aucun prénom n'est renseigné ou la variable n'existe pas !";
}

Cordialement,
Jordane
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
2427
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 juillet 2021
453
En complément, n'oublie pas d'utiliser mysqli_real_escape_string() pour éviter les injections sql dans ta requête :
$sql = "SELECT *
           FROM utilisateur 
           WHERE prenom like '%" . mysqli_real_escape_string($connexion, $_POST["prenom"]) . "%' 
           ORDER BY  nom";
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 259 >
Messages postés
2427
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 juillet 2021

C'est à bannir. La méthode idéale, ça reste les requêtes préparées:
$sql = "SELECT *
           FROM utilisateur 
           WHERE prenom like '%?%' 
           ORDER BY  nom"
$req = mysqli_prepare($sql);
mysqli_stmt_bind_param($req, 's', $_POST["prenom"]);
$resultat = mysqli_stmt_execute($req);
Messages postés
2427
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 juillet 2021
453
Je ne vois pas en quoi c'est à bannir. Sauf erreur de ma part c'est équivalent au niveau sécurité non ?
Messages postés
4761
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
23 octobre 2020
1 259 >
Messages postés
2427
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
27 juillet 2021

Équivalent oui, idéal non. J'ai déjà vu des gens se servir deux fois de la fonction sur une même variable, voire pas du tout. Ça porte à confusion quand on fait un truc un peu plus développé que ton exemple.
Le deuxième désavantage est sa redondance: tu dois l'écrire à chaque fois pour chaque variable; quand il y en a beaucoup ça fait gros.
Et le troisième point:
mysqli_real_escape_string
agit sur les strings, mais il faut recourir à d'autres moyens pour vérifier ses entrées (nombre uniquement par ex) que des débutants auraient tendance à oublier en faisant passer bêtement leur variable dedans -- inutilement dans le meilleur des cas.
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015

J'explique, de base j'ai regardé un tutoriel pour comprendre et m'inspirer.
Je ne suis donc qu'aux bases mais j'apprends. Sur le tuto, ça marche. Avec moi non. Probablement que depuis, il faut changer par rapport aux fonctions mysql_* et mysqli_* ?

1. Mon fichier se nomme 'RécéptionFormulaire.php' et est en couple avec 'Formulaire.html'

2.Merci pour les caractères accentués.

3. Oui effectivement, j'avais commencé avec mysql_* et quand j'ai changé en mysqli_* je me suis dis que les autres n'avaient pas besoin d'être changé.

Encore des messages d'erreurs :

Remarque : Undefined index: prenom dans C: \ Users \ phpMySQL \ ReceptionFormulaire.php sur la ligne 30

Warning : mysqli_query () attend paramètre 1 pour être mysqli, chaîne donnée dans C: \ Users \ phpMySQL \ ReceptionFormulaire.php sur la ligne 31

Avertissement : mysqli_num_rows () attend paramètre 1 pour être mysqli_result, null donnée dans C: \ Users \ phpMySQL \ ReceptionFormulaire.php sur la ligne 35
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015

Yahou que des pros :)
Donc si j'ai bien compris ça doit donner ça ? :

<?php

    print_r($_POST);

     //définition des constantes de connexion
  define ('NOM_SERVEUR',"root");
  define ('MOT_PASSE', "");
  define ('SERVEUR', "127.0.0.1");
  define ('NOM_BASE', "base_simple");
  
 //Connexion au serveur
 $connexion = mysqli_connect(SERVEUR, NOM_SERVEUR, MOT_PASSE,NOM_BASE)  
 or die("Error " . mysqli_error($connexion ));
 
 //text connexion au serveur
 if(!$connexion){
      echo "Impossible de se connecter a la BDD";
   exit;
 }

 //récupération de tous les enregistrements de la table Utilisateur
    $prenom = !empty($_POST["prenom"])?$_POST["prenom"]:NULL;

    //si la variable prenom existe et n'est pas vide ...
    if($prenom){
  
    //je sépare la requete de son execution (c'est plus simple à lire et pour debuguer ! )
    $sql = "SELECT * FROM utilisateur WHERE prenom like '%?%' ORDER BY  nom" 
 
 $req = mysqli_prepare($sql);
    mysqli_stmt_bind_param($req, 's', $_POST["prenom"]);
    $resultat = mysqli_stmt_execute($req));
 
  
 if($connexion){
     echo "<h1>Résultat de votre recherche</h1>\n";
  
     //nb de lignes contenu dans résultat
     $nbUtilisateur = mysqli_num_rows($resultat);
     if($nbUtilisateur > 0){
         //récupération de chaque lignes
      echo "<table border='1'>\n";
      echo "<tr>\n";
      echo "<td><strong>Prenom</strong></td>\n";
      echo "<td><strong>Nom</strong></td>\n";
      echo "<td><strong>Email</strong></td>\n";
      echo "<td><strong>N°Telephone</strong></td>\n";
      While($utilisateur = mysqli_fetch_array($resultat)){
       echo "<tr>\n";
       echo "<td>" . $utilisateur["Prénom"] . "</td>\n";
       echo "<td>" . $utilisateur["Nom"] . "</td>\n";
       echo "<td>" . $utilisateur["Email"] . "</td>\n";
       echo "<td>" . $utilisateur["N°Téléphone"] . "</td>\n";
       echo "</tr>\n";  
         }
      echo "</table>\n";

  }else{
             echo "<br> Erreur : Aucun prénom n'est renseigné ou la variable n'existe pas !";
        }
    
?>


Désolé pour le non coloration. J'e n'ai pas tout a fait compris.
Merci pour vos réponses précédentes et le temps que vous m'accordez.

J'ai un message d'erreur a la ligne 37 pour $req

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

Merci d'y penser dans tes prochains messages.
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulaire</Title>
</head>

<body>
<form action="ReceptionFormulaire.php" method="post">
     Rechercher un conseiller par son prénom <input type="text" name="prenom"/>
	 <input type="submit" value="Rechercher"/>
</form>

</body>
</html>
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015

D'accord je ne le savais pas.
Autant pour moi
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015

Voici mon formulaire :

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulaire</Title>
</head>

<body>
<form action="ReceptionFormulaire.php" method="post">
     Rechercher un conseiller par son prénom <input type="text" name="prenom"/>
  <input type="submit" value="Rechercher"/>
</form>

</body>
</html>


Et voici mon programme de réception php :

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulaire</Title>
</head>

<body>


<?php

    print_r($_POST);

     //définition des constantes de connexion
  define ('NOM_SERVEUR',"root");
  define ('MOT_PASSE', "");
  define ('SERVEUR', "127.0.0.1");
  define ('NOM_BASE', "base_simple");
  
 //Connexion au serveur
 $connexion = mysqli_connect(SERVEUR, NOM_SERVEUR, MOT_PASSE,NOM_BASE)  
 or die("Error " . mysqli_error($connexion ));
 
 //text connexion au serveur
 if(!$connexion){
      echo "Impossible de se connecter a la BDD";
   exit;
 }

 //récupération de tous les enregistrements de la table Utilisateur
    $prenom = !empty($_POST["prenom"])?$_POST["prenom"]:NULL;

    //si la variable prenom existe et n'est pas vide ...
    if($prenom){
  
    //je sépare la requete de son execution (c'est plus simple à lire et pour debuguer ! )
    $sql = "SELECT * FROM utilisateur WHERE prenom like '%?%' ORDER BY  nom";
 
 $req = mysqli_prepare( $connexion,$sql);
    mysqli_stmt_bind_param($req, 's', $_POST["prenom"]);
    $resultat = mysqli_stmt_execute($req);
 
  
    if($connexion){
  echo "<h1>Résultat de votre recherche</h1>\n";
  
  //nb de lignes contenu dans résultat
  $nbUtilisateur = mysqli_num_rows($resultat);
   if($nbUtilisateur > 0){
    //récupération de chaque lignes
 echo "<table border='1'>\n";
        echo "<tr>\n";
 echo "<td><strong>Prenom</strong></td>\n";
 echo "<td><strong>Nom</strong></td>\n";
 echo "<td><strong>Email</strong></td>\n";
 echo "<td><strong>N°Telephone</strong></td>\n";
 While($utilisateur = mysqli_fetch_array($resultat)){
  echo "<tr>\n";
                echo "<td>" . $utilisateur["Prénom"] . "</td>\n";
  echo "<td>" . $utilisateur["Nom"] . "</td>\n";
  echo "<td>" . $utilisateur["Email"] . "</td>\n";
  echo "<td>" . $utilisateur["N°Téléphone"] . "</td>\n";
  echo "</tr>\n";  
       }
   echo "</table>\n";
       }else{
                 echo "Erreur : Aucun prénom n'est renseigné ou la variable n'existe pas !<br>"; 
          echo "Le message d'erreur est : " . mysqli_error($connexion);
       } 
 
?>


Enfin , voici ma probable dernière erreur :

Parse error: syntax error, unexpected end of file in C:\Users\Noel\Pictures\phpMySQL\ReceptionFormulaire.php on line 62
Messages postés
33136
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 juillet 2021
3 638
Il te manque une accolade pour fermer le
 if($connexion){

==>> A placer ligne 62 avant le
 ?> 
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015

D'accord.

Nouveau problème :


-Array ([prenom] => Noel) Attention : mysqli_stmt_bind_param () attend paramètre 1 pour être mysqli_stmt, booléennes donnée dans C: \ Users \ Noel \ images \ phpMySQL \ ReceptionFormulaire.php sur la ligne 31

-Warning : mysqli_stmt_execute () attend paramètre 1 pour être mysqli_stmt, booléennes donnée dans C: \ Users \ Noel \ images \ phpMySQL \ ReceptionFormulaire.php sur la ligne 39

Résultat de votre recherche

-Avertissement : mysqli_num_rows () attend paramètre 1 pour être mysqli_result, null donnée dans C: \ Users \ Noel \ images \ phpMySQL \ ReceptionFormulaire.php sur la ligne 39

Erreur: Aucun prénom Ne est renseigné ou là pas de EXISTE variables Le message de d'erreur is: Inconnu colonne 'prenom' à 'clause where'