8722 sujets

Développement web côté serveur, CMS

Bonjour !
J'ai suivi un tutoriel pour faire ce que je voulais, mais j'ai une erreur de syntaxe apparemment, et suis perdu à la moitié du parcours (le tuto ne va pas plus loin).

Voici ce que je voudrais faire : Insérer une barre de recherche dans mon site web, qui recherche un certain champ (le nom) dans ma base de données, qui affiche comme quoi il y a un ou plusieurs résultats, cliquer sur l'un d'entre eux (ou sur le seul) et qu'ensuite cela affiche les différentes informations (donc plusieurs champs dans ma bdd) sous forme de tableau.

Dit comme ça, ça fait une sacré demande ! Smiley eek

Voici là ou j'en suis :
J'ai deux pages : une en html avec le menu et la barre rechercher dont voici le code (tronqué) :
<div id="search">
<li><form method="post" action="index.php?rechercher=a" name="rechercher"><input type="search" placeholder="Rechercher une entreprise par son nom" name="rechercher" size="40"></li>
<input type="submit" name="rechercher" value="Rechercher" />
</div>


Et une deuxième en php dont voici mon avancé pour l'instant :
////////////////////////////////
//Gestion rechercher
////////////////////////////////
if(isset($_GET['rechercher']) && $_GET['rechercher'] != NULL){
	
	$search1 = ($_POST['rechercher']);
	
	$search = mysqli_query($cnx, "SELECT nom FROM taxe_d_apprentissage WHERE nom LIKE %$search1%") or die (mysqli_error());
	
	$verif = mysqli_num_rows($search);
	
	if($verif != 0){
		$out="<h3>Résultats de votre recherche<h3>
		<p>Nous avons trouvé"; echo $verif;
		if($verif > 1){
			echo 'résultats';}
		else{
			echo 'résultat';}
		$out="dans notre base de données.<br><br>";
	
	while($données1 = mysqli_fetch_array($search)){
		echo $données1['nom'];}
	[b]else[/b]{
		$out="<h3>Pas de résultat(s)</h3>
		<p>Nous n'avons trouvé aucun résultat pour votre requête "; echo $_POST['rechercher'];}
		
		
	}
		
}


Donc comme vous l'avez remarqué, c'est loin d'être fini Smiley biggol , mais deux problèmes se posent à moi :
Parse error: syntax error, unexpected 'else' (T_ELSE)
c'est celui que j'ai mis en gras dans le code php.
Et ensuite, bah je sais plus par où poursuivre Smiley confused

Si quelqu'un à une idée, qu'il s'exprime !
Modifié par Hematie (22 Jun 2017 - 11:41)
Salut Smiley smile

Euh... depuis quand on met un else dans un while ??????
C'est pas possible Smiley smile
Donc là il manque la condition if avant le else Smiley smile
pchlj a écrit :
Salut Smiley smile

Euh... depuis quand on met un else dans un while ??????
C'est pas possible Smiley smile
Donc là il manque la condition if avant le else Smiley smile


En effet tu as raison, grosse incohérence de ma part Smiley biggol

J'ai essayé de corriger ça, voici ce que ça donne (vers la fin du code du coup) :
////////////////////////////////
//Gestion rechercher
////////////////////////////////
if(isset($_GET['rechercher']) && $_GET['rechercher'] != NULL){
	
	$search1 = ($_POST['rechercher']);
	
	$search = mysqli_query($cnx, "SELECT nom FROM taxe_d_apprentissage WHERE nom LIKE %$search1%") or die (mysqli_error());
	
	$verif = mysqli_num_rows($search);
	
	if($verif != 0){
		$out="<h3>Résultats de votre recherche<h3>
		<p>Nous avons trouvé"; echo $verif;
		if($verif > 1){
			echo 'résultats';}
		elseif($verif <= 0){
			echo 'résultat';}
			$out="dans notre base de données.<br><br>";
		[b]else[/b]{
			$out="<h3>Pas de résultat(s)</h3>
			<p>Nous n'avons trouvé aucun résultat pour votre requête "; echo $_POST['rechercher'];}
	
	while($données1 = mysqli_fetch_array($search)){
		echo $données1['nom'];}
	
		
		
	}
		
}


Mais j'ai toujours :
Parse error: syntax error, unexpected 'else' (T_ELSE)
(celui que j'ai essayé de mettre en gras)

Ai-je encore commis une incohérence ? D'après mes souvenirs de mes cours, on peux bien faire un while, puis un if, ensuite un elseif et pour finir un else, non ?
Modérateur
Bonjour,

En fait le else n'est pas dans le while (celui-ci est fermé à la ligne précédente juste après l'echo).

Par contre avant le else il faut ajouter une accolade fermante et en supprimer une à la fin.


C'est pourquoi il est recommandé de suivre ce style d'écriture (ou quelque-chose qui s'en approche fortement) par exemple:

if (...) {
'blablabla';
}/* On ferme à la ligne, pas à la suite de la dernière instruction */

if (...) {
'blablablabla';
} else {/* cet ensemble seul sur une ligne est facilement identifiable */
 'blibliblibli';
}
ou encore
if (...)
{/* l'acolade ouvrante passe à la ligne */
'blablabla';
}

C'est tout de même mieux que
if($var!==$machin){foreach($bidule as $truc){execute_all_you_can();}}


N'oubliez pas que ça ne vous coutera rien à aérer et indenter votre code. C'est autant indispensable pour le debugage que pour la maintenabilité, croyez-moi, j'en ai fais les frais.

Moralité, c'est en codant comme un cochon qu'on se rend compte qu'on n'est pas bon !
Les mauvais codent avec les pieds ! Smiley langue


Note: je rédigeai ce message lorsque l'auteur du sujet à modifié son code. Je suis partis sur le premier code posté.
Modifié par Greg_Lumiere (22 Jun 2017 - 11:55)
Modérateur
Oui mais le else doit suivre la fermeture (}) du if ou du else if.

Il faut mieux mettre en page ton code ainsi le problème t'apparaitra:


if($verif > 1) {
    echo 'résultats';
}
elseif($verif <= 0) {
    echo 'résultat';
}
$out="dans notre base de données.<br><br>";
else {
    $out="<h3>Pas de résultat(s)</h3><p>Nous n'avons trouvé aucun résultat pour votre requête ";
    echo $_POST['rechercher'];
}
Merci à vous, j'ai trouvé mon erreur et l'ai corrigé.

Cependant, maintenant que la fonction rechercher fonctionne, je recherche un nom d'entreprise dans ma base de donnée (qui existe et est bien orthographié), clique sur rechercher, et obtient cette erreur :
 Warning: mysqli_error() expects exactly 1 parameter, 0 given

Je comprends à peu près ce qu'il me dit, la ligne qui ne lui plait pas est la suivante :
$search = mysqli_query($cnx, "SELECT nom FROM taxe_d_apprentissage WHERE nom LIKE %$search1%") or die (mysqli_error());


EDIT : j'ai trouvé pour l'erreur ci dessus. Il manquait une variable dans mon mysqli_error.

J'ai maintenant ce message qui s'affiche lorsque je veux rechercher une entreprise :
Erreur de syntaxe pr?s de '%Rechercher%' ? la ligne 1


Ligne 1 ? Qu'est ce qu'il me raconte ?
Bon pour les accents, c'est pas le problème le plus important pour l'instant...
Modifié par Hematie (23 Jun 2017 - 10:51)