Bonjour à tous,

je dois réaliser un suivi des recherches par internaute pour développez le script qui permet d’enregistrer dans la base toutes les recherches effectuées sur le site des villes par un internaute. Ensuite je dois enregistrer que les recherches ayant donné un résultat.

Puis en front-office, uniquement pour cet internaute, sa liste de recherche sous forme
de liens.


Exemple : si un utilisateur a recherché « Paris », « Rome » et « Ber » alors nous afficherons Paris et Rome.

Les recherches sont stockées dans une table user_searchs comportant les champs
suivants :
– Id du user (user_id) dans la table user ;
– Id de la ville (ville_id) dans la table ville.

Ces deux derniers champs formant une clé unique.

J'ai dans ma BDD une table user_searchs et deux autres tables :
- user_id
- user_ville

J'ai crée user_ville au lieu de ville_id car je ne comprends pas très bien comment l'utilisateur va mettre une nouvelle ville dans ville_id.

J'ai déjà fais en sort que si les champs étaient vides, un message s'affichera, si la ville est déjà enregistrée il y a également un message qui s'affichera, et bien entendu quand la ville à été créée dans la BDD aussi un message apparaîtra.

Le problème c'est que j'arrive pas à mettre les villes qui à déjà été recherché (et qui s'affichera sous le formulaire), j'ai essayé une requête avec un ORDER BY ID LIMITE 0, 10 mais ça fonctionne pas.

Merci pour vos aides.

(Je n'ai pas mis de ville_id comme dans l'énoncé car comment l'utilisateur va mettre une ville dans la BDD là ou c'est INT et non un VARCHAR)

Mon code PHP :

$mysqli = new mysqli('localhost', 'root', 'root', 'projet_devoir_php');

if (isset($_POST['submit_form'])) {
	
	$ville = $_POST['ville'];
	$prenom = $_POST['prenom'];

	// S'assurer que la case ville n'est pas vide pour éviter de mettre des entrées "vide" dans la BDD.
		if (empty($ville) AND empty($prenom)) {
		
		echo "<p>" . "Vous devez introduire une Ville et votre prénom !" . "</p>";
	}

	else
		{
			$result = $mysqli->query('SELECT count(user_ville) FROM user_searchs WHERE user_ville = "' . $ville . '"');

			$donnees = $result->fetch_array();

			if ($donnees[0] > 0) {
				
				echo "<p>" . "La ville est déjà enregistrée !" . "</p>";
				//echo "<p>" . "Vous avez sélectionné la ville de : ". "<strong>" . $ville . "</strong>" . "</p>";
			}

			else
				{
					if ($mysqli->query('INSERT INTO user_searchs (user_ville) VALUES ("' . $ville .'")')) 
						{
							echo " Merci " . $prenom . " la ville de ". "<strong>" . $ville . "</strong>" ." à été enregistrée avec succès ! ";
						}

						else
							{
								echo "Votre ville n'a pas été enregistrée !";
							}

							

				}
		}
}

Modifié par Faculty50 (24 May 2020 - 17:49)
A mon sens je ferait deux tables,
La table USER par exemple nom,mail,mot de passe
Couple de trois données toutes uniques. comme toujours
Puis une table user,ville couple unique

Ainsi, lorsque je compares au blog, si j'ai 300 Blogs (pages genre un texte une image et un numéro de blog (unique)
Durand peut mettre une remarque dans le blog 101 puis 24 etc...
Tu vois que ça marchera et simplement !