Problème Programme php
Fermé
Pilenix
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
-
Modifié par jordane45 le 24/06/2015 à 17:25
Pilenix Messages postés 9 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 26 juin 2015 - 26 juin 2015 à 16:02
Pilenix Messages postés 9 Date d'inscription mercredi 24 juin 2015 Statut Membre Dernière intervention 26 juin 2015 - 26 juin 2015 à 16:02
A voir également:
- Problème Programme php
- Programme demarrage windows 10 - Guide
- Easy php - Télécharger - Divers Web & Internet
- Désinstaller programme windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Forcer la fermeture d'un programme - Guide
4 réponses
jordane45
Messages postés
38364
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 décembre 2024
4 720
24 juin 2015 à 17:31
24 juin 2015 à 17:31
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
3 - Tu utilises mysqli _* ... pourquoi avoir également utilisé des fonctions
mysql_* ??
Comme par exemple :
ou encore
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)){
jordane45
Messages postés
38364
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 décembre 2024
4 720
Modifié par jordane45 le 25/06/2015 à 14:25
Modifié par jordane45 le 25/06/2015 à 14:25
Commence par vérifier que la connexion à ta BDD est bonne .. en ajoutant un " OR DIE.. ".
... 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.)
Et donc.. pour ton code :
Ensuite.. pour l'instruction QUERY .. la syntaxe mysqli est de la forme : (voir le manuel : https://www.php.net/manual/fr/mysqli.query.php
c'est à dire pour ton code :
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
NB : Il faut récupérer les variables et s'assurer qu'elles existent via la fonction ISSET (ou !empty) ..... AVANT de les utiliser
Cordialement,
Jordane
//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
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
25 juin 2015 à 14:18
25 juin 2015 à 14:18
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";
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
25 juin 2015 à 14:27
25 juin 2015 à 14:27
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);
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
25 juin 2015 à 15:19
25 juin 2015 à 15:19
Je ne vois pas en quoi c'est à bannir. Sauf erreur de ma part c'est équivalent au niveau sécurité non ?
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
>
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
25 juin 2015 à 17:43
25 juin 2015 à 17:43
É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:
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_stringagit 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.
Pilenix
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
24 juin 2015 à 19:15
24 juin 2015 à 19:15
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
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
Pilenix
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
Modifié par jordane45 le 26/06/2015 à 12:56
Modifié par jordane45 le 26/06/2015 à 12:56
Yahou que des pros :)
Donc si j'ai bien compris ça doit donner ça ? :
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.
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.
jordane45
Messages postés
38364
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 décembre 2024
4 720
26 juin 2015 à 12:57
26 juin 2015 à 12:57
J'ai (encor) édité ton message pour y mettre la coloration syntaxique.
Merci 'y penser à l'avenir.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Merci 'y penser à l'avenir.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Pilenix
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
26 juin 2015 à 12:58
26 juin 2015 à 12:58
Oui merci je crois avoir compris maintenant.
jordane45
Messages postés
38364
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
30 décembre 2024
4 720
Modifié par jordane45 le 26/06/2015 à 13:00
Modifié par jordane45 le 26/06/2015 à 13:00
Tu as un message d'erreur ....??? LEQUEL ?
Tu dis à la ligne 37 .... ... dans ce que tu nous donnes.. c'est la ligne 30 !
Tu as oublié ... à cette ligne... (et peut être plus bas aussi je n'ai pas regardé....) de mettre la connexion
A croire que tu n'as pas lu ce que je t'avais répondu la première fois.....
Tu dis à la ligne 37 .... ... dans ce que tu nous donnes.. c'est la ligne 30 !
Tu as oublié ... à cette ligne... (et peut être plus bas aussi je n'ai pas regardé....) de mettre la connexion
$req = mysqli_prepare( $connexion,$sql);
A croire que tu n'as pas lu ce que je t'avais répondu la première fois.....
Pilenix
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
26 juin 2015 à 13:00
26 juin 2015 à 13:00
C'est la ligne 37 chez moi dsl.
Parse error: syntax error, unexpected '$req' (T_VARIABLE) in C:\Users\Noel\Pictures\phpMySQL\ReceptionFormulaire.php on line 37
Parse error: syntax error, unexpected '$req' (T_VARIABLE) in C:\Users\Noel\Pictures\phpMySQL\ReceptionFormulaire.php on line 37
Pilenix
Messages postés
9
Date d'inscription
mercredi 24 juin 2015
Statut
Membre
Dernière intervention
26 juin 2015
26 juin 2015 à 13:03
26 juin 2015 à 13:03
<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>
24 juin 2015 à 17:43