Page 1 sur 2

Historique PHP

Posté : 01 mai 2017, 00:04
par jems
Bonjour alors j'ai crée une base de données avec le nom des villes, des infos, et un id pour chaque ville.

Lorsque l'utilisateur tape le nom de la ville par Exemple "Paris" cela affiche les infos concernant Paris.

j'aimerais que lorsque l'utilisateur tape le nom de la ville cela conserve la ville dans une autre base de données et ainsi que je puisse afficher les recherches de l'utilisateur je pense que je dois utiliser une session pour conserver l'historique sur la page.

Voici mon code actuel :


Code : Tout sélectionner

<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-10"> </head> <body> <form method="post" action=""> <p>Recherchez votre ville</p> <input type="text" name="recherche"> <p> <input type="submit" name="validation"/></p> </form> <?php if (isset($_POST['validation'])) { if (empty($_POST['recherche'])) {echo 'Veuillez rentrer le nom de votre ville';} else { $recherche = $_POST['recherche']; $mysqli = new mysqli ('localhost', 'root', '', 'recherches'); $result = $mysqli->query('SELECT villes_id, villes_nom, villes_infos FROM villes WHERE villes_nom LIKE "%' . $recherche .'%"'); while($row= $result->fetch_array()) { echo $row['villes_nom'] . '<br>' . $row['villes_infos']; } } } ?> </body> </html>
Et voici ma table principale :
Image



Ainsi que ma table pour l'historique :


Image

Re: Historique PHP

Posté : 01 mai 2017, 00:34
par or 1
avec une table complète des communes françaises, en tapant paris, on n'a pas seulement une seule commune (voir http://www.monbeauvillage.fr/p ). cela n'affichera pas un seul résultat. vu la structure de la table, ce n'est pas ce qui est tapé qui est sauvé mais les villes qui ressortent de la recherche. il y a peut-être une erreur de conception. si ce n'est pas le cas, alors il faut dans la boucle construire une requete sql insert pour mettre les données dans la table, du genre "insert into user_searches ($id, $row['villes_id']), ($id, $row['villes_id']), ($id, $row['villes_id'])", et l'executer après la boucle.

Re: Historique PHP

Posté : 01 mai 2017, 00:37
par jems
oui mais pour le coups c'est de l'entrainement donc c'est uniquement Paris la ville qui est dans ma base de données

Et en effet c'est le résultat de la recherche et non la ville tapée

Re: Historique PHP

Posté : 01 mai 2017, 00:40
par jems
Du coups je suis un peu peur que donne le script et ou dois-je le placer ?

Cordialement,

Re: Historique PHP

Posté : 01 mai 2017, 14:07
par kevin254kl
Salut,

Code : Tout sélectionner

<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-10"> </head> <body> <form method="post" action=""> <p>Recherchez votre ville</p> <input type="text" name="recherche"> <p> <input type="submit" name="validation"/></p> </form> <?php // avec !empty tu vérifies si la variable n'est pas vide et n'est pas initialisée if (!empty($_POST['validation'])) { if (empty($_POST['recherche'])) { echo 'Veuillez rentrer le nom de votre ville'; } else { // Pour éviter qu'on te balance n'importe quoi on échappe els balises et caractères spéciaux $recherche = filter_var($_POST['recherche'],FILTER_SANITIZE_STRING); $mysqli = new mysqli ('localhost', 'root', '', 'recherches'); $result = $mysqli->query('SELECT id, nom, info FROM villes WHERE nom LIKE "%' . $recherche .'%"'); // si on a rien if($result->num_rows === 0) { echo 'aucun résultat trouvé' ; } else { // mettre des noms représentatifs des données ici ville while($ville= $result->fetch_assoc()) { // on insère et ensuite on affiche $mysqli->query('INSERT INTO historique (userId,villeId) VALUES (1, '.$ville['id'].')'); echo $ville['nom'] . ' ' . $ville['info']; echo '<br/>'; } } // on ferme les flux important $result->close(); $mysqli->close(); } } ?> </body> </html>
Tu devrais faire un mcd avant tout projet la c'est pour un entrainement mais c'est une bonne habitude à prendre, change le nom cela le nom des attributs de ta table je n'ai pas prit les même que toi.

Re: Historique PHP

Posté : 01 mai 2017, 14:29
par jems
Re coucou d'abord merci de la réponse j'ia donc modifier pour que tout ça corresponde à mes tables. J'ai un problème lorsque je valide deux mesage d'erreurs s'affichent :

-Notice: Trying to get property of non-object on line 28 =

Code : Tout sélectionner

if($result->num_rows === 0)
-Fatal error: Call to a member function fetch_assoc() on boolean on line 35 =

Code : Tout sélectionner

while($ville= $result->fetch_assoc())
"

Re: Historique PHP

Posté : 01 mai 2017, 16:48
par kevin254kl
Moi ça fonctionne, tu dois avoir une erreur sql

Code : Tout sélectionner

if (!$result) { trigger_error('erreur : ' . $mysqli->error); }
Ici tu vas récupérer l'erreur.

Re: Historique PHP

Posté : 01 mai 2017, 22:55
par jems
D'accord du coups mtn ^^ :

Notice: Undefined index: id on line 39
Notice: Undefined index: nom on line 40
Notice: Undefined index: info on line 40

Re: Historique PHP

Posté : 02 mai 2017, 10:30
par kevin254kl
tes attributs ne sont pas définies car il n'existe pas puisque tu utilises les mauvais noms

Code : Tout sélectionner

// on insère et ensuite on affiche $mysqli->query('INSERT INTO historique (userId,villeId) VALUES (1, '.$ville['id'].')'); echo $ville['nom'] . ' ' . $ville['info'];
ici remplace par id_ville, nom_ville et info_ville.

Re: Historique PHP

Posté : 02 mai 2017, 14:32
par jems
Ouais mais pour le coups j'avais changé justement, et lorsque je rentre le nom de la vilel celà ne me ressort même plus les infos

Code : Tout sélectionner

<!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-10"> </head> <body> <form method="post" action=""> <p>Recherchez votre ville</p> <input type="text" name="recherche"> <p> <input type="submit" name="validation"/></p> </form> <?php // avec !empty tu vérifies si la variable n'ai pas vide et n'ai pas initialisé if (!empty($_POST['validation'])) { if (empty($_POST['recherche'])) { echo 'Veuillez rentrer le nom de votre ville'; } else { // Pour éviter qu'on te balance n'importe quoi on échappe els balises et caractères spéciaux $recherche = filter_var($_POST['recherche'],FILTER_SANITIZE_STRING); $mysqli = new mysqli ('localhost', 'root', '', 'recherches'); $result = $mysqli->query('SELECT villes_id, villes_nom, villes_infos FROM villes WHERE villes_nom LIKE "%' . $recherche .'%"'); // si on a rienif (!$result) { if($result->num_rows === 0) { echo 'aucun résultat trouvé' ; } else { // mettre des noms représentatifs des données ici ville while($ville= $result->fetch_assoc()) { // on insère et ensuite on affiche $mysqli->query('INSERT INTO user_searchs (user_id,ville_id) VALUES (1, '.$ville['id'].')'); echo $ville['nom'] . ' ' . $ville['info']; echo '<br/>'; } } // on ferme les flux important $result->close(); $mysqli->close(); } } ?> </body> </html>

Re: Historique PHP

Posté : 02 mai 2017, 17:59
par or 1
SELECT villes_id, villes_nom, villes_infos
echo $ville['nom'] . ' ' . $ville['info'];

Re: Historique PHP

Posté : 02 mai 2017, 18:06
par jems
Je comprend pas ce que tu veux me dire ^^ Désolé je suis un boulet ><

Re: Historique PHP

Posté : 02 mai 2017, 18:16
par or 1
il faut comprendre le message d'erreur :
Notice: Undefined index: id on line 39
Notice: Undefined index: nom on line 40
Notice: Undefined index: info on line 40

Re: Historique PHP

Posté : 02 mai 2017, 18:31
par jems
oui je les ais compris mais je ne sait les résoudre

Re: Historique PHP

Posté : 02 mai 2017, 18:44
par or 1
SELECT villes_id, villes_nom, villes_infos
echo $ville['nom'] . ' ' . $ville['info'];
et dans le premier code qui ne générait pas cette erreur :
echo $row['villes_nom'] . '<br>' . $row['villes_infos'];