PHP + MySQL (via easyphp)

ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009 - 1 mai 2009 à 18:30
 le père -
Bonjour,

j'ai une page de recherche de "personnes" au format html
(objectif: rechercher les personnes par nom, prenom, ou matricule dans la base de données)


Ci-dessous mon fichier recherche.html


<html>
<head>
<title>Recherche de personne dans la base chantier Sanofi-Aventis PROJET DI 50 </title>
</head>

<body>
<h1>Recherche de personne dans la base chantier Sanofi-Aventis PROJET DI 50</h1>

<form action="resultats.php" method="post">
Choisissez un type de recherche :<br />
<select name="type_recherche">
<option value="nom">Par nom</option>
<option value="prenom">Par prenom</option>
<option value="matricule">Par matricule</option>
</select>
<br />
Entrez le terme recherché; :<br />
<input name="terme_recherche" type="text" size="40" />
<br />
<input type="submit" value="Rechercher" />
</form>

</body>
</html>

***************************************************
Mon fichier php resultat.php

<html>
<head>
<title>Résulat de la recherche de personnes dans la base du chantier Sanofi Aventis</title>
</head>
<body>
<h1>Résultat de la recherhe de personnes dans la base</h1>
<?php
// create short variable names
$type_recherche = $_POST['type_recherche'];
$terme_recherche = trim($_POST['terme_recherche']);

if (!$type_recherche || !$terme_recherche) {
echo 'vous navez pas saisi les détails de la recherche';
exit;
}

if (!get_magic_quotes_gpc()){
$type_recherche = addslashes($type_recherche);
$terme_recherche = addslashes($terme_recherche);
}

@ $db = new mysqli('localhost', '', 'projet ing', 'personnes');

if (mysqli_connect_errno()) {
echo 'Error: Impossible de se connecter à la base de données.';
exit;
}

$requete = "select * from personnes where ".$type_recherche." like '%".$terme_recherche."%'";
$resultat = $db->query($requete);

$nb_lig_resultat = $resultat->num_rows;

echo "<p>Nombre de personnes trouvées: ".$nb_lig_resultat."</p>";

for ($i=0; $i < $nb_lig_resultat; $i++) { // à partir de là je maitrise pas trop j'ai des doutes
$ligne = $resultat->fetch_assoc();
echo "<p><strong>".($i+1).". prenom : ";
echo htmlspecialchars(stripslashes($ligne['prenom']));
echo "</strong><br />nom : ";
echo stripslashes($ligne['nom']);
echo "<br />prenom : ";
echo stripslashes($ligne['prenom']);
echo "<br />matricule : ";
echo stripslashes($ligne['matricule']);
echo "</p>";
}

$resultat->free();
$db->close();

?>
</body>
</html>

********************************************************


mon msg d'erreur:

Résultat de la recherhe de personnes dans la base
query($requete); $nb_lig_resultat = $resultat->num_rows; echo "

Nombre de personnes trouvées: ".$nb_lig_resultat."
"; for ($i=0; $i < $nb_lig_resultat; $i++) { $ligne = $resultat->fetch_assoc(); echo "

".($i+1).". prenom : "; echo htmlspecialchars(stripslashes($ligne['prenom'])); echo "
nom : "; echo stripslashes($ligne['nom']); echo "
prenom : "; echo stripslashes($ligne['prenom']); echo "
matricule : "; echo stripslashes($ligne['matricule']); echo "
"; } $resultat->free(); $db->close(); ?>
A voir également:

16 réponses

Oui je suis en local, je fais un double clik dessus et c'est l'explorateur qui l'ouvre naturellement
Quelle est l'adresse qui s'affiche dans la barre d'addresse de l'explorateur ? style C:\\qqchose\recherche.html ou style http://localhost/qqchose/recherche.html ?
1
infor3lmd Messages postés 111 Date d'inscription jeudi 16 avril 2009 Statut Membre Dernière intervention 13 mai 2009 2
1 mai 2009 à 18:38
d'après le msg d'erreur

les variables que tu récupère de la base ne sont pas affiché.

la ou tu as des doutes : dans ton echo enlève les double quotte ""
essai sa et dis nous quesque sa donne
0
Bonjour

N'enlève pas de double-quotes juste pour voir, sans savoir pourquoi.

Par contre, comment fais-tu tes essais ? ce que tu appelles un message d'erreur n'en est pas un, il vient du fait que ton php n'est pas interpreté. le HTML te cache tout ce qu'il y a entre le <?php qu'il ne comprend pas, et le > suivant, qu'il prend pour la fin d'une balise. et il te montre la suite
Je suppose que tu es en local. comment ouvres-tu ton fichier recherche.html ? en double-cliquant dessus dans le fenêtre de l'explorateur ?
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
1 mai 2009 à 18:58
les variables que tu récupère de la base ne sont pas affiché.
--> Pourquoi elles ne s'affichent pas ?

la ou tu as des doutes : dans ton echo enlève les double quotte ""
essai sa et dis nous quesque sa donne

--> j'ai essayé d'épurer la fin du programme ... mais le msg reste le même
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
1 mai 2009 à 18:59
oui je suis en local, je fais un double clik dessus et c'est l'explorateur qui l'ouvre naturellement
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
1 mai 2009 à 19:11
file:///C:/Program%20Files/EasyPHP%203.0/www/recherche%20personnes.html

je viens de le faire en passant par http://localhost/ ça marche mieux ;) MERCI

humm j'ai une autre erreur maintenant, je vous tiens au courant ^^
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
1 mai 2009 à 19:46
Error: Impossible de se connecter à la base de données

--> est ce qu'on peut regarder ensemble si j'ai bien renseigner les éléments de connexion à la base de données ?

@ $db = new mysqli('localhost', 'root', 'projet ing', 'personnes');

--> serveur, nom d'utilisateur, nom de la base de donnée, nom de la table, ::: c'est juste ?
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
1 mai 2009 à 19:54
Error: Impossible de se connecter à la base de données --> Résolu :)


Résultat de la recherhe de personnes dans la base

Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 30

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 32

Nombre de personnes trouvées:


Fatal error: Call to a member function free() on a non-object in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 49
0
Peux-tu redonner ton code dans son état actuel et préciser sur quelles lignes apparaissent les erreurs ?
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 00:28
******************************************************************
Mon fichier "recherche personnes.html" ci-dessous:

<html>
<head>
<title>Recherche de personne dans la base chantier Sanofi-Aventis PROJET DI 50 </title>
</head>

<body>
<h1>Recherche de personne dans la base chantier Sanofi-Aventis PROJET DI 50</h1>

<form action="resultats.php" method="post">
Choisissez un type de recherche :<br />
<select name="type_recherche">
<option value="nom">Par nom</option>
<option value="prenom">Par prenom</option>
<option value="matricule">Par matricule</option>
</select>
<br />
Entrez le terme recherché; :<br />
<input name="terme_recherche" type="text" size="40" />
<br />
<input type="submit" value="Rechercher" />
</form>

</body>
</html>


***********************************************************************
Mon fichier "résultats.php" ci-dessous

<html>
<head>
<title>Résulat de la recherche de personnes dans la base du chantier Sanofi Aventis</title>
</head>
<body>
<h1>Résultat de la recherhe de personnes dans la base</h1>
<?php
// create short variable names
$type_recherche = $_POST['type_recherche'];
$terme_recherche = trim($_POST['terme_recherche']);

if (!$type_recherche || !$terme_recherche) {
echo 'vous navez pas saisi les détails de la recherche';
exit;
}

if (!get_magic_quotes_gpc()){
$type_recherche = addslashes($type_recherche);
$terme_recherche = addslashes($terme_recherche);
}

@ $db = new mysqli('localhost', 'root', '','projet ing', 'personnes');

if (mysqli_connect_errno()) {
echo 'Error: Impossible de se connecter à la base de données.';
exit;
}

$requete = "select * from personnes where ".$type_recherche." like '%".$terme_recherche."%'";
$resultat = $db->query($requete); // erreur ligne 30
$nb_lig_resultat = $resultat->num_rows; // erreur ligne 32

echo "<p>Nombre de personnes trouvées: ".$nb_lig_resultat."</p>";

for ($i=0; $i < $nb_lig_resultat; $i++) {
$ligne = $resultat->fetch_assoc();
echo "<p><strong>".($i+1).". nom : ";
echo htmlspecialchars(stripslashes($ligne['nom']));
echo "</strong><br />prenom : ";
echo stripslashes($ligne['prenom']);
echo "<br />matricule : ";
echo stripslashes($ligne['matricule']);
echo "</p>";
}

$resultat->free(); // erreur ligne 47
$db->close();

********************************************************************
Le message d'erreur:

Résultat de la recherhe de personnes dans la base

Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 30

Notice: Trying to get property of non-object in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 32

Nombre de personnes trouvées:


Fatal error: Call to a member function free() on a non-object in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 47
0
Bonjour

La connexion se passe mal car tu passes des mauvais paramètres. Enlève le @, tu verras le message d'erreur : tu passes un paramètre de trop, ce qui introduit un décalage (le 5ème devrait être un numéro de port et chez toi c'est un texte)

Mais tu ne t'en rends pas compte car tu ouvres ta connexion en style objet et la fonction que tu utilises un test non objet. J'ai fait quelques essais et je n'ai pas encore trouvé comment faire un test propre en style objet (que je n'utilise jamais)
0
dans le manuel de PHP
http://www.php.net/manual/fr/mysqli.connect.php
Ils parlent bien d'un bug autour de connect_error en style objet et ils préconisent de faire comme ce que tu as fait. Mais je constate comme toi que la solution n'est pas efficace, aucune erreur n'est détectée alors qu'il y en a une...
Il ne te reste qu'à repasser en procédural
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 09:28
ok je commence bien mon apprentissage de PHP + mySQL ^^

qu'est ce que tu appels le procédural ?
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 09:33
Style orienté objet :
mysqli::__construct ([ string $host= ini_get("mysqli.default_host") [, string $username= ini_get("mysqli.default_user") [, string $passwd= ini_get("mysqli.default_pw") [, string $dbname= "" [, int $port= ini_get("mysqli.default_port") [, string $socket= ini_get("mysqli.default_socket") ]]]]]] )

Style procédural :
mysqli mysqli_connect ([ string $host= ini_get("mysqli.default_host") [, string $username= ini_get("mysqli.default_user") [, string $passwd= ini_get("mysqli.default_pw") [, string $dbname= "" [, int $port= ini_get("mysqli.default_port") [, string $socket= ini_get("mysqli.default_socket") ]]]]]]

je vais voir avec ça
0
ejay03 Messages postés 20 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 2 mai 2009
2 mai 2009 à 09:46
Résultat.php ---> mode procédural sur quelques lignes

<html>
<head>
<title>Résulat de la recherche de personnes dans la base du chantier Sanofi Aventis</title>
</head>
<body>
<h1>Résultat de la recherhe de personnes dans la base</h1>
<?php
// create short variable names
$type_recherche = $_POST['type_recherche'];
$terme_recherche = trim($_POST['terme_recherche']);

if (!$type_recherche || !$terme_recherche) {
echo 'vous navez pas saisi les détails de la recherche';
exit;
}

if (!get_magic_quotes_gpc()){
$type_recherche = addslashes($type_recherche);
$terme_recherche = addslashes($terme_recherche);
}
// modification en style procédural
$link = mysqli_connect('localhost', 'root', '','projet ing', 'personnes'); // ligne 25

if (!$link) {
die( 'Erreur de connexion('.mysqli_connect_errno().')';
.mysqli_connect_error());
}
echo 'succes'.mysqli_get_host_info($link)."\n";

// fin de la modification en style procédural

$requete = "select * from personnes where ".$type_recherche." like '%".$terme_recherche."%'";
$resultat = $db->query($requete);

$nb_lig_resultat = $resultat->num_rows;

echo "<p>Nombre de personnes trouvées: ".$nb_lig_resultat."</p>";

for ($i=0; $i < $nb_lig_resultat; $i++) {
$ligne = $resultat->fetch_assoc();
echo "<p><strong>".($i+1).". nom : ";
echo htmlspecialchars(stripslashes($ligne['nom']));
echo "</strong><br />prenom : ";
echo stripslashes($ligne['prenom']);
echo "<br />matricule : ";
echo stripslashes($ligne['matricule']);
echo "</p>";
}

$resultat->free();
$mysqli_close($link); // passage de la ligne en procédural ?!

?>
</body>
</html>

********************************************
-->> Parse error: parse error in C:\Program Files\EasyPHP 3.0\www\resultats.php on line 25
0
Tu avais une erreur et un problème de détection d'erreur. Tu as commencé par corriger le problème de détection d'erreur, c'est très bien mais il faudrait peut-être corriger l'erreur aussi !
Car style objet ou procédural ta connexion est mauvaise, c'est elle le vrai problème. Vérifie la syntaxe dans le manuel PHP, tu ne la respectes pas.

Ça m'étonnerait bien que la ligne 25 soit celle que tu indiques, l'erreur parse error est dans la suite , il y a un .mysqli_connect_error()); qui se promène tout seul.

Enrin, si tu es passé en style procédural, il faut être logique te ne pas utiliser l'objet $db que tu n'as pas créé : le $resultat = $db->query($requete); ne te donnera rien de bon.

Et si tu débutes, sache que recopier des bouts de code sans les comprendre est la meilleure méthode pour ne pas apprendre.
0