8768 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis en train de suivre une formation pour être Dev mais je suis confronté à un petit problème...
Pour commencer je vais décrire mes tables dans ma BDD.
Base de données = projet_villes
Ensuite j'ai trois tables :
1. user => qui à le login et mot de passe de l'utilisateur qui doit se connecter à la page.
- user_id, user_login, user_password
2. user_searchs => qui doit stocker les recherches des personnes qui entre une ville dans un champs input type="texte".
- user_id, ville_id, ville_name
3. ville
- ville_id, ville_nom, ville_texte

J'ai une page avec login.php où l'utilisateur doit rentrer un login et mdp, ensuite il arrive sur une page avec un champs input type='texte" où il doit entrer une ville, si la ville existe il met un lien pour pouvoir cliquer dessus et arriver à une autre page où il y a le détails de cette ville (texte wikipédia), mais dés qu'il entre une ville elle doit allez se stocker dans la table user_searchs, mais ça marche pas !
Est-ce que dans ma requête je dois stipuler l'id du user qui vient de se connecter ? mais le ville_id de la table ville je dois aussi aller le chercher ?

<?php

	$ville_nom = $_POST['ville_nom'];

	if (isset($ville_nom)) 
	{

		if (empty($ville_nom)) 
			{
				
				echo "<p>" . "Veuillez saisir une ville !" . "</p>";

			} // Fin if empty

		else

			{
				$mysqli = new mysqli('localhost', 'root', 'root', 'projet_villes');

				$result = $mysqli->query('SELECT ville_id, ville_nom FROM villes WHERE ville_nom LIKE "' . $ville_nom . '"');

				while ($donnees = $result->fetch_array()) 

				{
					
					$villes[$donnees['ville_id']] = $donnees['ville_nom'];
				}
				

			}

	}

	?>

	<?php
		$mysqli = new mysqli('localhost', 'root', 'root', 'projet_villes');
		$result = $mysqli->query('INSERT INTO user_searchs (ville_name) VALUES ("'. $ville_nom .'")');
	?>


		<ul>
					<?php foreach ($villes as $id => $ville) : ?>
				<li><a href="devoir_php2.php?id=<?php echo $id ?>"><?php echo $ville ?></a></li>
					<?php endforeach ?>
		</ul>


J'ai mis un INSERT INTO mais je ne vois pas pourquoi je n'ai pas les villes qui se rajoutent dans ma table user_searchs.

Quelqu'un pourrait m'éclairer ?
Modérateur
Et l'eau,

Je vois quelques petites erreurs dans ton schema de ta base.
1. quand je lis user_id, ça fait référence pour moi et pour beaucoup à une clef étrangère. Or ce n'est pas le cas.
2. Je ne vois pas l'intérêt de nommer les champs nomdelatable_champ puisque de toutes manières, ces champs sont accessibles comme ceci : database.table.champ
3. la table user_searchs ne nécessite pas le champ name puisque tu fais références à la table en elle même via la clef etrangères
4. user_search n'est pas une table normalisée. Une clef primaire ne peut être composée que d'un seul champ ! ouais je sais, on voit ça dans les CMS. Mais c'est dégueux puisqu'on compromet l'intégrité des données ! On appelle ça une clef primaire composite ==> Smiley firing
5. le champ ville_texte n'est pas explicite dans son nom. Description me parait plus pertinent.
6. il manque une uniformisation des noms des champs (soit tu les nommes en français, soit en anglais, mais pas les 2)

* pour chipoter
7. le nom des tables doit être toujours au pluriels. Pourquoi ? Tu as plusieurs lignes dans ta table. en revanche, le nom des champs est au singulier.
8. Lorsque tu as une table de relation n*n, ajouter le nom par ordre alphabétique. ex : searches_users

Pour ton souci :
1. chercher dans la table ville, le critère recherché.
2. une fois trouvé, récupérer son id
3. insérer dans la table searches_users, le user_id et cities_id

Peux tu mettre sur le forum, le sql de la creation de tes tables ? Tu travailles avec quelle base de données ?
Modifié par niuxe (31 May 2020 - 00:44)