Historique PHP

Eléphanteau du PHP | 28 Messages

01 mai 2017, 00:04

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

Mammouth du PHP | 2703 Messages

01 mai 2017, 00:34

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.

Eléphanteau du PHP | 28 Messages

01 mai 2017, 00:37

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

Eléphanteau du PHP | 28 Messages

01 mai 2017, 00:40

Du coups je suis un peu peur que donne le script et ou dois-je le placer ?

Cordialement,

Eléphant du PHP | 385 Messages

01 mai 2017, 14:07

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.
Modifié en dernier par kevin254kl le 01 mai 2017, 16:48, modifié 1 fois.

Eléphanteau du PHP | 28 Messages

01 mai 2017, 14:29

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())
"

Eléphant du PHP | 385 Messages

01 mai 2017, 16:48

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.

Eléphanteau du PHP | 28 Messages

01 mai 2017, 22:55

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

Eléphant du PHP | 385 Messages

02 mai 2017, 10:30

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.

Eléphanteau du PHP | 28 Messages

02 mai 2017, 14:32

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>

Mammouth du PHP | 2703 Messages

02 mai 2017, 17:59

SELECT villes_id, villes_nom, villes_infos
echo $ville['nom'] . ' ' . $ville['info'];

Eléphanteau du PHP | 28 Messages

02 mai 2017, 18:06

Je comprend pas ce que tu veux me dire ^^ Désolé je suis un boulet ><

Mammouth du PHP | 2703 Messages

02 mai 2017, 18:16

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

Eléphanteau du PHP | 28 Messages

02 mai 2017, 18:31

oui je les ais compris mais je ne sait les résoudre

Mammouth du PHP | 2703 Messages

02 mai 2017, 18:44

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'];