8719 sujets

Développement web côté serveur, CMS

Bonjour,
J'ai un problème !

Lorsque je donne aux variables les valeurs suivantes :

$mot = "3 Lyon 5 Ville crayon";
$terms = explode(" ", $mot);


le résultat de la recherche s'affiche.

Par contre si je fais :

$_GET['recherche'] = $_GET['champ1'].' '.$_GET['champ2'].' '.$_GET['champ3'].' '.$_GET['champ4'].' '.$_GET['champ5']; 
$mot = explode(" ", $_GET['recherche']);


le résultat ne s'affiche pas ! (idem en POST)

Dans les deux cas le echo affiche bien les variables :

echo $mot[0]." ".$mot[1]." ".$mot[2]." ".$mot[3]." ".$mot[4];


Une idée, merci.
Modifié par DMichel (25 May 2015 - 12:17)
Salut,

A première vue le stockage de tes variables récupérées de $_GET n'est pas bon. Tu ne peux pas créer (ou modifier) la variable $_GET (à part à l'envoi des headers de ta page nouvellement chargée)

Il faudrait du coup que tu stockes tes $_GET dans une variable utilisable et modifiable...
[b]$mot_str[/b] = $_GET['champ1'].' '.$_GET['champ2'].' '.$_GET['champ3'].' '.$_GET['champ4'].' '.$_GET['champ5']; 
$mot = explode(" ", [b]$mot_str[/b]);

Est-ce mieux ?
Modifié par MatthieuR (25 May 2015 - 13:54)
MatthieuR a écrit :
Salut,

A première vue le stockage de tes variables récupérées de $_GET n'est pas bon. Tu ne peux pas créer (ou modifier) la variable $_GET (à part à l'envoi des headers de ta page nouvellement chargée)

Il faudrait du coup que tu stockes tes $_GET dans une variable utilisable et modifiable...
[b]$mot_str[/b] = $_GET['champ1'].' '.$_GET['champ2'].' '.$_GET['champ3'].' '.$_GET['champ4'].' '.$_GET['champ5']; 
$mot = explode(" ", [b]$mot_str[/b]);

Est-ce mieux ?


Ben non, malheureusement.

Il s'affiche dans le echo
echo $mot[0]." ".$mot[1]." ".$mot[2]." ".$mot[3]." ".$mot[4];


Et toujours echo + select affichent le résultat avec :

$mot_str = "3 Lyon 5 Ville crayon";
$mot = explode(" ", $mot_str);

Essaie de poster plus de code : ton formulaire HTML et ton traitement en PHP.

Ta concaténation suivie d'un explode est complètement illogique, il doit y avoir une manière bien plus simple de faire ce que tu veux mais sans savoir ce que tu cherches à faire exactement, on ne peut rien faire à part tâtonner.
lamext a écrit :
Essaie de poster plus de code : ton formulaire HTML et ton traitement en PHP.

Ta concaténation suivie d'un explode est complètement illogique, il doit y avoir une manière bien plus simple de faire ce que tu veux mais sans savoir ce que tu cherches à faire exactement, on ne peut rien faire à part tâtonner.


Pour comprendre le plus facilement pour des yeux "neufs" il faut savoir que si je fais ça en dur dans la page search.php


$mot_str =  "3 Paris 5 capitale monuments";
$mot = explode(" ", $mot_str);

le résultat de la recherche s'affiche.

Le formulaire :

<form action="search.php" method="POST" >
<p>
<label>Jours</label> <br />
 <INPUT type="radio" name="champ1" value="1"> 1 <br />
 <INPUT type="radio" name="champ1" value="2"> 2<br />
 <INPUT type="radio" name="champ1" value="3"> 3<br />
 <INPUT type="radio" name="champ1" value="4"> 4<br />
 <INPUT type="radio" name="champ1" value="5"> 5<br />
 </p>
<br />
<p>
<label>
Département : </label>
<br />
    <SELECT size=1 name=champ2>
    <OPTION value="departement">Paris</OPTION>
.../...
    </SELECT>
</p>
 
<p>
<label>Nombre de personnes</label><br />
 
<INPUT type="text" name="champ3" size="5" value="" >
 
</p>
 
<p>
<label>Monuments<INPUT type="radio" name="champ4" value="monuments" ></label>
<label>Restaurants<INPUT type="radio" name="champ4" value="restaurants" ></label>
<label>Magasins<INPUT type="radio" name="champ4" value="magasins" ></label>
 
<label>Spectacles<INPUT type="radio" name="champ5" value="spectacles" ></label>
</p>
 
 <p>
<INPUT border=0 src="images/bt_search.png"  type="image" >
</p>
</form>



puis la récup des GET ou POST (idem pas d'affichage résultats)


$mot_str = $_POST['champ1'].' '.$_POST['champ2'].' '.$_POST['champ3'].' '.$_POST['champ4'].' '.$_POST['champ5']; 
$mot = explode(" ", $mot_str);


Traitement php SELECT :

$query = "SELECT * FROM tourisme WHERE  ";


$query .= " etoile = '".$mot[0]."' AND presentation LIKE \"%$mot[4]%\" AND presentation LIKE \"%$mot[3]%\" AND departement = '".$mot[1]."' AND monuments = '".$mot[2]."'  ";

$result1 = $mysqli->query($query) or die ('Erreur '.$query.' '.$mysqli->error); 

Modifié par DMichel (25 May 2015 - 17:18)
Modérateur
Salut,

En lisant la première fois ce sujet, je me doutais bien de ma réponse finale.

Je ne vois pas l'intérêt d'explode(). Je pense que tu devrais te pencher sur les données reçues et les filtrer. Smiley cligne

Au passage, label n'est pas "jour", mais les label des champs sont les chiffres.
Modifié par niuxe (25 May 2015 - 17:28)
Effectivement, je me demandais à quoi pouvait servir ton explode() après une concaténation alors que tu as les données déjà dans un tableau ($_POST)...

Je commencerais par nommer les champs de ton formulaire avec des noms descriptifs
Par exemple :

<label for="departement">
<select size=1 name=departement id="departement">
    <option value="paris">Paris</option> <!-- en passant ton value n'était pas correct ! -->
</select>
...
<label for="monuments">Monuments</label>
<input type="radio" name="monuments" id="monuments" value=""><!-- le value doit être vide si aucune valeur n'a été saisie ou que nous ne venons pas d'un formulaire soumis -->

Utilise également des for dans tes labels qui font référence aux ids des inputs ou selects.

Ensuite tu pourras récupérer tes données directement comme ça
$departement = $_POST['departement']

Quand tu arrives sur search.php (après la soumission de ton formulaire) que vaut var_dump($_POST) ? TU peux coller le résultat ici ?

Pour finir (mais je pense que t'as encore un peu de boulot pour bien maîtriser les formulaires) tu peux faire ta requête comme ça

//par exemple si tu récupères ces valeurs
$_POST = array(
  'jour' => 1,
  'presentation_1' => 'test',
  'presentation_2' => 'lorem',
  'departement' => 'paris',
  'monuments' => 'tour eiffel'
);

$query = "SELECT * FROM tourisme";

$query .= " WHERE etoile = '" . $_POST['jour'] . "' AND presentation LIKE '%" . $_POST['presentation_1'] . "%' AND presentation LIKE '%" . $_POST['presentation_2'] . "%' AND departement = '" . $_POST['departement'] . "' AND monuments = '" . $_POST['monuments'] . "'";

$result1 = $mysqli->query($query) or die ('Erreur '.$query.' '.$mysqli->error);  

Que donne var_dump($result) ?
Bonsoir,
Après 40 000 minutes... de labeur !

Il ne s'agissait QUE de LIKE '%".$terms[3]."%' à la place de LIKE \"%$terms[3]%\" et aussi sur les entiers dans le SELECT.
Va comprendre Charles.

Merci à tous
Modifié par DMichel (25 May 2015 - 23:27)