SQL select where une partie du champ

Résolu/Fermé
Vleeks - Modifié par Vleeks le 17/12/2012 à 21:52
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 - 18 déc. 2012 à 17:54
Bonjour,
Etant débutant sur PHP et SQL, je me rabat sur le forum car je n'ai trouvé ma réponse nul part.

J'ai créé un formulaire avec une liste déroulante qui permet de choisir différentes personnes dans ce format :

<option>Jean Dujardin</option>

Cette information est stockée dans une variable appelée nom_form puis réutilisée directement dans un nouveaux formulaire (sur une nouvelle page), et c'est la que mon problème survient.

J'ai, dans une base de donnée, les gens ainsi que leurs informations qui sont inscrites. Elles sont stockées comme ceci :

Jean Dujardin Chemin des nouilles 1 039 793 48 48

(le nom, le prénom, l'adresse et le numéro de téléphone sont contenus dans des colonnes différentes).

Lorsque l'on arrive sur le deuxième formulaire, le nom est déjà mis et j'aimerais qu'ensuite le formulaire affiche le numéro de téléphone directement, donc en fonction du nom.

Hors, dans le premier formulaire, l'information nom + prénom est stockée dans une seule variable, alors que dans ma base, elles forment deux champs distincts.

ma requête SQL devrait être du type :

SELECT * FROM 'mabase' WHERE nom LIKE %"'.$_POST['nom_form'].'"%;

Mais je n'arrive pas à faire correspondre le nom avec celui contenu dans la variable.

Merci !

7 réponses

Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
17 déc. 2012 à 22:12
Pour faire passer plusieurs paramètres en ayant la possibilité de les dissociés par la suite, il faut, en sortant du formulaire, que la valeur de la variable soit structurée, par exemple, comme ceci:
Variable = "Jean|Dujardin"
Noter le caractère spécial, le pipe, entre le nom et le prénom.

Avant d'aller rechercher l'enregistrement correspondant dans la base de données, il vous suffit de splitter cette variable en ... plusieurs (ici deux). Vous aurez donc, par exemple, la variable LePrenom qui contiendra "Jean" et la variable LeNom qui contiendra "Dujardin".

Le principe du "split" en php est le suivant:
$Variable = "Jean|Dujardin";
$Separes = explode("|", $Variable);
- $Separes[0]; // contiendra "Jean"
- $Separes[1]; // contiendra "Dujardin"
1
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
18 déc. 2012 à 10:37
Bonjour Vleeks,

Le split marche bien : ok

Est-ce que ceci
$strSQL = sprintf("SELECT * FROM personnes WHERE nomPersonne = '%s' AND prenomPersonne='%s'",
	mysql_real_escape_string($splitInfo[0]),
	mysql_real_escape_string($splitInfo[1]));
affiche quelque chose ?
1
Oui, mais le problème est que je n'ai pas la possibilité de placer un "|" entre mes deux informations. Etant donné que je récupère l'information du premier formulaire sous forme de $_POST, j'ai donc essayé de split avec comme marque plus un "|" mais un simple espace " ", mais ca ne marche pas.

Avez-vous une autre solution, plutôt au niveau de la requête ?

Merci beaucoup
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
17 déc. 2012 à 23:03
Il faut concaténer le nom et le prenom avec le "pipe" AVANT que le formulaire ne l'envoie ..
Il faut utiliser un caractère que l'on ne retrouve ni dans un no ni dans un prénom : "Madame de Betancout" contient un espace !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ok donc j'ai concatené mon information comme Heliotte m'a conseillé :

<?php $nomrecup = $_POST['info_form'];
$splitInfo = explode("|", $nomrecup);
- $splitInfo[0];
- $splitInfo[1]; ?>


J'aimerais donc, qu'à partir du nom ($splitInfo[0], ma base de donnée arrive à me ressortir différentes informations :

<?php
mysql_connect("localhost", "root", "") or die (mysql_error ());

mysql_select_db("ma_base") or die(mysql_error());

$strSQL = "SELECT * FROM personnes WHERE nomPersonne = ".$splitInfo[0]." ";

$rs = mysql_query($strSQL);

while($row = mysql_fetch_array($rs)) {

?>

<option><?php echo $row['Adresse1'];?></option>

<option><?php echo $row['Adresse2'];?></option>

J'ai ensuite fermé la base, mais rien ne s'affiche dans ma liste déroulante...

sachant que dans ma requête, nomPersonne ne contient que le nom de la personne, le prénom est stocké dans "prenomPersonne", mais je n'en ai pas besoin ici.

Le split marche bien, j'ai fait un echo pour voir si l'information avait bien été splitée.

Merci beaucoup !
0
salut

MERCI !
Ça fonctionne à merveilles, j'ai juste modifié la requête afin que la recherche ne se base que sur le nom, et pas sur le prénom, car si l'utilisateur fait une erreur dans son formulaire (un espace mal placé), tout tombe en ruine.

Je vous souhaite d'excellentes fêtes et encore merci !

Vleeks
0
Heliotte Messages postés 1491 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 28 janvier 2013 92
18 déc. 2012 à 17:54
Bonsoir Vleeks,

Heureux de vous avoir rendu service, Heliotte

ps: Bonne fête de fin d'année à vous aussi

			\\|//
			{0,0}
0