Pages :
bonjour a tous,

j'ai créer une base de donnée(projet_villes)avec trois tables :
la première(city) est constituée d'un city_id, city_name, city_text.
la deuxième(users) est constituée d'un user_id,user_first_name,user_name,city_id (pour la relation)
la troisième(user_searchs) est constitué d'un user_id de la table users et d'un city_id de la table city

mon problème est de pouvoir récupéré les "id" de chaque table (city, users) et de pouvoir les enregistrés dans la table user_search afin de pouvoir les récupéré et les affichés.

je vous remercie d'avance.

mais la je bloque(je suis débutant),voici le code:

<?php
require('inc/connection.php');

?>
<!doctype html>
<html>
<head>

<title>acceuil</title>
<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>

<div class="content">
<center>

<h1>formulaire de recherche de villes</h1>





<?php
if(isset($_GET['submit']))
{

//print_r($_GET);

$user_first_name = $_GET['user_first_name'];


$user_name = $_GET['user_name'];


$villes = $_GET['villes'];

if((empty($_GET['user_first_name'])) AND empty($_GET['user_name'])){

// var_dump($_GET);

$message = '<p>veuillez remplir tous les champs</p>';


}else{


if($mysqli->query('INSERT INTO users(user_first_name, user_name) VALUES (" '.$user_first_name. ' ", " ' .$user_name . ' ") ')){


$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' ont ete enregistre.</p>';

if((empty($_GET['villes'])) ){


$message = '<p>veuillez remplir le champs</p>';

}else{

$result = ('SELECT user_id, city_id FROM users, city' );


if($result){

$req = ('INSERT INTO user_searchs(user_id, city_id) VALUES (" '. $result . ' ")');

$message = '<p>vos informations ont ete enregistre.</p>';



}else{



$message = '<p>vos informations n ont pas ete enregistre.</p>';

}

}

}
}

}


?>
<?php if(isset($message)) echo $message; ?>
<form action="index.php" method="GET">


<p>quel est votre prenom : <input class="button" type="text" name="user_first_name" placeholder="votre prénom" /></p>
<p>quel est votre nom : <input class="button" type="text" name="user_name" placeholder="votre nom" /></p>
<p>quel ville recherchez vous : <input class="button" type="text" name="villes" placeholder="votre ville" /></p>
<p><input type="submit" name="submit" value="recherche" /></p>

</form>

</center>
</center>
</div>

</body>
</html>
boni75 a écrit :
bonjour a tous,

j'ai créer une base de donnée(projet_villes)avec trois tables :
la première(city) est constituée d'un city_id, city_name, city_text.
la deuxième(users) est constituée d'un user_id,user_first_name,user_name,city_id (pour la relation)
la troisième(user_searchs) est constitué d'un user_id de la table users et d'un city_id de la table city

mon problème est de pouvoir récupéré les "id" de chaque table (city, users) et de pouvoir les enregistrés dans la table user_search afin de pouvoir les récupéré et les affichés.


pourquoi ? tu as déjà user_id et city_id dans la même tables users. tu as besoin d'une table intermédiaire si tu as une relation N-N. là c'est pas le cas en lisant tes specs, un city_id pour plusieurs users.
Modifié par JENCAL (24 Nov 2015 - 12:06)
oui désoler pour l'indentation, le but c'est qu'a la fin de la récupération je puisse aficher toutes les recherches des utilisateurs avec les informations de villes city_name, city_text c'est pourquoi il faut faire une relation entre les deux tables et d'enregistrer les id dans une autre table.
Ok, donc la personne va chercher un mec quelque part, donc user Id et city ID dans users_search, je comprend mieux merci.

Exemple à adapter, mais qui te montre comment faire du multi select dans un insert into.
Il te faut un select pour l'user_id via le nom saisie, et un select pour la city_id via le champs city saisie
Tous les selects retourne une seul ligne.
INSERT INTO
  MyTable (Col1,Col2,Col3,Col4,Col5,Col6,Col7)
SELECT
  f1.col1, f2.col2, f3.col3, f3.col4, f3.col5, f4.col6, f5.col7
FROM
  (SELECT Col1 FROM Func1())           AS f1
CROSS JOIN
  (SELECT Col2 FROM Func2())           AS f2
CROSS JOIN
  (SELECT Col3,Col4,Col5 FROM Func3()) AS f3
CROSS JOIN
  (SELECT Col6 FROM Func4())           AS f4
CROSS JOIN
  (SELECT Col7 FROM Func5())           AS f5


ou alors tu fais le tout en 3 requêtes.. plus simple du coup
Un select seul pour récupérer l'id user
Un select seul pour récupérer l'id city
L'Insert into.
Modifié par JENCAL (24 Nov 2015 - 12:31)
merci beaucoup pour ta réponse, je vais essayer.

par contre je vais en profité pour te poser une autre question, quand on veut faire une page PHP avec des titres du texte et images, est ce que je fait une table par page table x avec champs id, title, text, images ou je crée une table pour chaque éléments comme une table texte, une table title, une table images puis on récupère par les id correspondant.

et autre chose quand on insère du texte dans la base est ce qu on peut après l'avoir récupéré de la base, faire en PHP des mise en gras, des liens internes et ou autres...ou faut il préparé le texte directement avec les balises html correspondantes avant de l'enregistré dans la base.

jespere que sait assez clair sinon désoler.
désoler m

<?php
if(isset($_GET['submit']))
{
//print_r($_GET);

$user_first_name = $_GET['user_first_name'];


$user_name = $_GET['user_name'];


$villes = $_GET['villes'];

if((empty($_GET['user_first_name'])) AND empty($_GET['user_name'])){


// var_dump($_GET);

$message = '<p>veuillez remplir tous les champs</p>';


}else{


if($mysqli->query('INSERT INTO users(user_first_name, user_name) VALUES (" '.$user_first_name. ' ", " ' .$user_name . ' ") ')){


$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' ont ete enregistre.</p>';

if((empty($_GET['villes'])) ){


$message = '<p>veuillez remplir le champs</p>';

}else{

$users = ('SELECT user_id FROM users' );

$city = ('SELECT city_id FROM city' );




if($users AND $city){

$req = ('INSERT INTO user_searchs(user_id, city_id) VALUES (" '. $users . ' "," ' .$city. ' ")');

$message = '<p>vos informations ont ete enregistre.</p>';



}else{



$message = '<p>vos informations n ont pas ete enregistre.</p>';

}
}
}
}

}


?>ais cela ne fonctionne pas, je vais encore te solicité...
$users = ('SELECT user_id FROM users' );

$city = ('SELECT city_id FROM city' );


en même temps. $city va être un tableau là. il faut que tu mette un where ta city = ce que la personne à chercher. pareil pour user
Modifié par JENCAL (24 Nov 2015 - 13:40)
même avec le WHERE cela ne fonctionne pas.....

je te remet le code et merci encore pour t es réponses....

par contre je me demande si il fallait pas que je fasse une requette SELECT sur ma table city.

<?php
if(isset($_GET['submit']))
{
//print_r($_GET);

$user_first_name = $_GET['user_first_name'];


$user_name = $_GET['user_name'];


$city_name = $_GET['city_name'];

if((empty($_GET['user_first_name'])) AND empty($_GET['user_name'])){


// var_dump($_GET);

$message = '<p>veuillez remplir tous les champs</p>';


}else{


if($mysqli->query('INSERT INTO users(user_first_name, user_name) VALUES (" '.$user_first_name. ' ", " ' .$user_name . ' ") ')){


$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' ont ete enregistre.</p>';



}else{


$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' n ont pas ete enregistre.</p>';



}


if((empty($_GET['city_name'])) AND (empty($_GET['user_first_name'])) OR (empty($_GET['user_name'])) ){


$message = '<p>veuillez remplir le champs</p>';

}else{

$users = ('SELECT user_id FROM users WHERE id = " ' .$user_first_name. ' " OR " ' .$user_name. ' " ' );


$city = ('SELECT city_id FROM city WHERE id = " ' .$city_name. ' " ' );




if($users AND $city){



$req = ('INSERT INTO user_searchs(user_id, city_id) VALUES (" '. $users . ' ", " ' .$city. ' ")');


$message = '<p>vos informations ont ete enregistre.</p>';



}else{



$message = '<p>vos informations n ont pas ete enregistre.</p>';

}
}
}
}




?>
Hello,

"quand on insère du texte dans la base est ce qu on peut après l'avoir récupéré de la base, faire en PHP des mise en gras, des liens internes et ou autres"

la fonction str_replace permet d'insérer des balises dans un texte avant affichage,
exemple :
soit la chaîne suivante :
$origine = "Mettre un mot en gras";
on va ajouter les balises <strong> et </strong> avant et après "mot"
$resultat = str_replace('mot','<strong>mot</strong>',$origine);
la chaîne $resultat contiendra la chaîne $origine mais le mot "mot" sera en gras une fois affiché.
c'est un exemple simple, ai-je bien répondu à la question ?
Note : il y une version insensible à la casse, str_ireplace, et on peut aussi ajouter un 4ème argument à la fonction, un entier qui indiquera le nombre de fois où le remplacement sera effectué, voir le détail de ces fonctions et des exemples sur les sites de référence du PHP, par exemple : http://php.net/manual/fr/function.str-replace.php
Modifié par farang (24 Nov 2015 - 16:05)
merci pour t'as réponses,

si j'ai bien compris quand je vais préparé mon code pour la récupération je place en même temps la fonction...

je vais regarder dans le manuel....
dit moi farang si je peut me permettre de te tutoyer,

quand tu fait une relation entre deux table, table x id_1, champ2, champ3 ou se trouve le contenu et table y avec id_1, champ2, champ3, id_1(de la table x) quand je fait un enregistrement sur la table y l'id_1 reste a 0 est ce normal.

merci d'avance d'où mon problème d'avant.
parce que l'id 1 de la table Y tu dois l'enregistrer manuellement, il va pas incrémentation. Je sais pas si j'ai bien compris ta question. et s'il te plait, rédige le plus clairement tes questions. (surtout que tu double le nom d'un champs, donc ça doit péter ta requête (double id_1 dans table y)

"tu fait une relation entre deux table, table x id_1, champ2, champ3 ou se trouve le contenu et table y avec id_1, champ2, champ3, id_1(de la table x) "

tu peux l'écrire comme cela

TABLE X
- id_x (cle primaire)
- champ_x_1
- champ_x_2

TABLE Y
- id_y (cle primaire)
- champ_y_1
- champ_y_2
- id_x (cle secondaire) <- à remplir manuellement, il correspondra (logiquement) à l'enregistrement de la table x portant cette id_x

c'est bien plus compréhensible
Modifié par JENCAL (24 Nov 2015 - 16:26)
c' est ce que j'ai fait, mais a 0 a chaque enregistrement....

par contre je n'ai rien spécifier juste city_id (int).

j'ai essayer ce que tu m'as dit pour les select mais rien a faire regarde le code plus haut s'il te plait....
j'espère que cela sera assez lisible.

désoler pour le roman au moins tu auras toutes les infos.

table city:
city_id (int(11) primary key auto incremente)
city_name (varchar) 
city_text (text)


cette table a du contenu....

table users:
user_id (int(11) primary key auto incremente)
user_first_name (varchar) 
user_name (varchar)
city_id (int(11))


contenu après enregistrement....

table user_searchs:
user_id (int(11))
city_id(int(11))

je doit d'une part enregistrer les prenom et le nom dans la table users d'autre part récupéré l'id du champs "city_name du formulaire" pour enfin enregistrer les 2 id des deux tables dans la table user-searchs.

?php
require('inc/connection.php');

?>
<!doctype html>
<html>
<head>
		<title>acceuil</title>
			<link rel="stylesheet" type="text/css" href="css/style.css" />
</head>
<body>
<div class="content">
<center>

<h1>formulaire de recherche de villes</h1>


<?php
	if(isset($_GET['submit']))
		{
					//print_r($_GET);	
							
							$user_first_name = $_GET['user_first_name'];
					
							
											$user_name = $_GET['user_name'];
							
											
													$city_name = $_GET['city_name'];
													
							
		if((empty($_GET['user_first_name'])) AND empty($_GET['user_name'])){
		
		
					// var_dump($_GET);
					
									$message = '<p>veuillez remplir tous les champs</p>';
			
					
					}else{
			
				
			if($mysqli->query('INSERT INTO users(user_first_name, user_name) VALUES (" '.$user_first_name. ' ", " ' .$user_name . ' ") ')){
				
				
									$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' ont ete enregistre.</p>';
											
											
											
					}else{
						
						
									$message = '<p>votre prénom ' .$user_first_name.' et votre nom ' .$user_name . ' n ont pas ete enregistre.</p>';
						
						
						
			
						}
						
				}						
						
			if((empty($_GET['city_name']))){
						
											
											$message = '<p>veuillez remplir les champs</p>';
				
					}else{	
					
			if($user_first_name AND $user_name AND $city_name){
			
						
							$users = ('SELECT user_id FROM users WHERE  users = " ' .$user_first_name. ' " OR " ' .$user_name. ' " ' );
											
											
										$city = ('SELECT city_id FROM city WHERE  city = " ' .$city_name. ' " ' );
											
											
	
						
												$mysqli->query ('INSERT INTO user_searchs(user_id, city_id) VALUES (" '. $users . ' ", " ' .$city. ' " ');
		
			
														$message = '<p>vos informations ont ete enregistre.</p>';
						
				
						
						}else{
						
						
								
																$message = '<p>vos informations n ont pas ete enregistre.</p>';
				
				}
			}
		}						
?>

<?php if(isset($message)) echo $message; ?>

[/code[code=html]]<form action="index.php" method="GET">
<p>quel est votre prenom : <input  class="button" type="text" name="user_first_name" placeholder="votre prénom" /></p>
<p>quel est votre nom : <input  class="button" type="text" name="user_name" placeholder="votre nom" /></p>
<p>quel ville recherchez vous : <input  class="button" type="text" name="city_name" placeholder="votre ville" /></p>
<p><input type="submit" name="submit" value="recherche" /></p>

</form>
	</center>

			</div>

				</body>
				
					</html>	
Ton code est déjà plus clair, bien qu'avec cette indentation ça reste prise de tête à lire.
deja :

if((empty($_GET['user_first_name'])) AND empty($_GET['user_name']))


le AND il est préférable de l'écrire comme cela "&&"

if((empty($_GET['user_first_name'])) && empty($_GET['user_name']))


ensuite
if((empty($_GET['city_name'])))


pourquoi double parenthèse ?
if((

et pourquoi pas utilisé directement $city_name que tu as stocké au tout début ?
$city_name = $_GET['city_name'];


après
$users = ();

Smiley saoul là c'est pas bon du tout, je vois bien que tu essaye de faire une requête, mais là normalement ça te père une fatal error. var = () . ça n'existe pas. il faut faire une vrai requête select, qui te retourne un seul résultat.

il faut plutot faire comme cela :

$query = 'SELECT user_id FROM users WHERE  users = " ' .$user_first_name. ' " OR " ' .$user_name. ' " ' ;
$result = mysqli_query($conn, $query); // ta connexion et ta requête
$row = mysqli_fetch_assoc($result); // on fetch
$row['user_id'] <- içi tu as user ID, là c'est de tête, faut adapté à ton code.


voila, essaye d'améliorer tout ça.
désoler mais dans mon bouquin de cours c'est comme cela...car sait un devoir que je doit faire, voila.

pourquoi une connexion hors que je l'ais faite tous en haut, par contre t'as méthode je ne l'a connais pas du tous je dois absolument travaillé avec MySQLI pas MySQL, mais je pense que tu as raison je doit recupéré les valeurs avec fetch-array merci je vais voir.
boni75 a écrit :
désoler mais dans mon bouquin de cours c'est comme cela...car sait un devoir que je doit faire, voila.

pourquoi une connexion hors que je l'ais faite tous en haut, par contre t'as méthode je ne l'a connais pas du tous je dois absolument travaillé avec MySQLI pas MySQL, mais je pense que tu as raison je doit recupéré les valeurs avec fetch-array merci je vais voir.


Oui mais alors dans ton bouquin y'a pas tout qui est expliquer, c'est lu plus rapidemenet avec les &&, concernant le if double parenthèse, c'est inutile. et j'utilise pas MySQL mais bien Mysqli dans mes exemples

mysqli_query
mysqli_fetch_assoc


Oui la connexion est dans mon exemple, si tu la deja plus haut, tant mieux tu t'en occupe plus.
Modifié par JENCAL (25 Nov 2015 - 09:57)
Pages :