Vous n'êtes pas identifié(e).
Bonjour à tous,
j'ai cette diffculté je voudrais que lorsque je fais ma recherche et que j'obtient un resultat que ce resultat soit presenté sous forme de lien. je l'ai déjà essayé avec une autre reqête ça donne mais avec celle ci-dessous ça ne donné pas, j'ai cette erreur : Parse error: syntax error, unexpected ' <a href="recherche_etudi', expecting while (T_WHILE) in C:\Program Files\EasyPHP-12.0\www\my portable files\devoir3\recherche_etudiants.php on line 230.
voici le code:
<?php
// Si une recherche a été effectuée (bouton "Rechercher" cliqué) :
if (isset($_POST['recherche'])) {
// connexion au serveur MySQL
$base_id = mysql_connect("localhost", "script_php", "zh6tjPp6T56N4dbF")
or exit("<p>Impossible de se connecter au serveur MySQL : ".mysql_error()."</p>\n");
// sélection de la base
$selection = mysql_select_db("exercices_php", $base_id)
or exit("<p>Impossible de sélectionner la base : ".mysql_error()."</p>\n");
// Recherche des étudiants dans la base de données
// début de construction de la requête : par défaut, on sélectionne tous les étudiants
$requete = "SELECT etudiant.nom, etudiant.prenom FROM etudiant ";
$requete2 = "SELECT distinct (etudiant.nom), etudiant.prenom FROM etudiant,formation,pays ";
// éventuelle restriction de la recherche selon le nom de l'étudiant saisi
/*if (!empty($_POST['nom'])) {
$nom = mysql_real_escape_string(htmlspecialchars_decode($_POST['nom']));
//$formation=$_POST['formation'];
$requete .= "WHERE etudiant.nom = '$nom'";
}
// fin de construction de la requête : classement des résultats
// par ordre alphabétique des noms, puis des prénoms
$requete .= "ORDER BY nom, prenom ;";
// exécution de la requête sur la base de données
$etudiants = mysql_query($requete)
or exit("<p>La requête au serveur MySQL a échoué : ".mysql_error()."</p>\n");
// Affichage des étudiants trouvés
echo "<h2>Résultat</h2>\n";
$etudiant = mysql_fetch_array($etudiants);
// cas où la recherche n'a donné aucun résultat
if (!$etudiant)
echo "<p>Aucun étudiant ne correspond à votre recherche.</p>\n";
// autre cas : il y a au moins un étudiant à afficher
else
// écriture d'un paragraphe par étudiant trouvé
do
echo "<p>".htmlspecialchars(strtoupper($etudiant['nom']))." "
.htmlspecialchars($etudiant['prenom'])." </p>\n";
while ($etudiant = mysql_fetch_array($etudiants));*/
if ($_POST['formation'] and empty($_POST['nom']) and $_POST['pays'] and $_POST['année1'] and $_POST['année2']) {
$formation=$_POST['formation'];
$pays=$_POST['pays'];
$année1=$_POST['année1'];
$année2=$_POST['année2'];
$requete2.= "WHERE formation.id_formation = etudiant.id_formation AND pays.id_pays=etudiant.id_pays AND extract(year FROM etudiant.date_naissance) BETWEEN '$année1' and '$année2' AND pays.nom= '$pays' AND formation.nom = '$formation'";
}
// fin de construction de la requête : classement des résultats
// par ordre alphabétique des noms, puis des prénoms
$requete2 .= "ORDER BY etudiant.nom,etudiant.prenom ;";
// exécution de la requête sur la base de données
$etudiants2 = mysql_query($requete2)
or exit("<p>La requête au serveur MySQL a échoué : ".mysql_error()."</p>\n");
// Affichage des étudiants trouvés
echo "<h2>Résultat2</h2>\n";
$etudiant3 = mysql_fetch_array($etudiants2);
if (!$etudiant3)
echo "<p>Aucun étudiant ne correspond à votre recherche.</p>\n";
// autre cas : il y a au moins un étudiant à afficher
else
// écriture d'un paragraphe par étudiant trouvé
do
echo "<p>".htmlspecialchars(strtoupper($etudiant3['nom']))." "
.htmlspecialchars(strtoupper($etudiant3['prenom']))." </p>\n";
while ($etudiant3 = mysql_fetch_array($etudiants2));
<?php
// Si une recherche a été effectuée (bouton "Rechercher" cliqué) :
if (isset($_POST['recherche'])) {
// connexion au serveur MySQL
$base_id = mysql_connect("localhost", "script_php", "zh6tjPp6T56N4dbF")
or exit("<p>Impossible de se connecter au serveur MySQL : ".mysql_error()."</p>\n");
// sélection de la base
$selection = mysql_select_db("exercices_php", $base_id)
or exit("<p>Impossible de sélectionner la base : ".mysql_error()."</p>\n");
// Recherche des étudiants dans la base de données
// début de construction de la requête : par défaut, on sélectionne tous les étudiants
$requete = "SELECT etudiant.nom, etudiant.prenom FROM etudiant ";
$requete2 = "SELECT distinct (etudiant.nom), etudiant.prenom FROM etudiant,formation,pays ";
// éventuelle restriction de la recherche selon le nom de l'étudiant saisi
/*if (!empty($_POST['nom'])) {
$nom = mysql_real_escape_string(htmlspecialchars_decode($_POST['nom']));
//$formation=$_POST['formation'];
$requete .= "WHERE etudiant.nom = '$nom'";
}
// fin de construction de la requête : classement des résultats
// par ordre alphabétique des noms, puis des prénoms
$requete .= "ORDER BY nom, prenom ;";
// exécution de la requête sur la base de données
$etudiants = mysql_query($requete)
or exit("<p>La requête au serveur MySQL a échoué : ".mysql_error()."</p>\n");
// Affichage des étudiants trouvés
echo "<h2>Résultat</h2>\n";
$etudiant = mysql_fetch_array($etudiants);
// cas où la recherche n'a donné aucun résultat
if (!$etudiant)
echo "<p>Aucun étudiant ne correspond à votre recherche.</p>\n";
// autre cas : il y a au moins un étudiant à afficher
else
// écriture d'un paragraphe par étudiant trouvé
do
echo "<p>".htmlspecialchars(strtoupper($etudiant['nom']))." "
.htmlspecialchars($etudiant['prenom'])." </p>\n";
while ($etudiant = mysql_fetch_array($etudiants));*/
/*if ($_POST['formation'] and empty($_POST['nom']) and $_POST['pays'] and $_POST['année1'] and $_POST['année2']) {
$formation=$_POST['formation'];
$pays=$_POST['pays'];
$année1=$_POST['année1'];
$année2=$_POST['année2'];
$requete2.= "WHERE formation.id_formation = etudiant.id_formation AND pays.id_pays=etudiant.id_pays AND extract(year FROM etudiant.date_naissance) BETWEEN '$année1' and '$année2' AND pays.nom= '$pays' AND formation.nom = '$formation'";
}
// fin de construction de la requête : classement des résultats
// par ordre alphabétique des noms, puis des prénoms
$requete2 .= "ORDER BY etudiant.nom,etudiant.prenom ;";
// exécution de la requête sur la base de données
$etudiants2 = mysql_query($requete2)
or exit("<p>La requête au serveur MySQL a échoué : ".mysql_error()."</p>\n");
// Affichage des étudiants trouvés
echo "<h2>Résultat2</h2>\n";
$etudiant3 = mysql_fetch_array($etudiants2);
if (!$etudiant3)
echo "<p>Aucun étudiant ne correspond à votre recherche.</p>\n";
// autre cas : il y a au moins un étudiant à afficher
else
// écriture d'un paragraphe par étudiant trouvé
do
?>
[b]<a href="recherche_etudiants.php?<?php echo "<p>".htmlspecialchars(strtoupper($etudiant3['nom']))." "
.htmlspecialchars(strtoupper($etudiant3['prenom']))." </p>\n";?>"></a><br>[/b]
<?php
while ($etudiant3 = mysql_fetch_array($etudiants2));
}
?>
</body>
</html>
je ne sais pas si je m'y prend bien. quelqu'un peut-il m'aider?
Hors ligne
Bonjour,
Je pense qu'il doit manquer une fin de commentaire multiligne autour de la ligne 221, ce qui conduit a se retrouver avec un tag html (ou bbcode ?) comme instruction php, ce que php n'aime pas. C'est ce qui ressort de la coloration syntaxique en tout cas.
@+
ManicoW
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Ok j'ai fait une erreur en recopiant, mais mon erreur demeure. je n'arrive pas à afficher mon resultat sous forme de lien .
Hors ligne
le voilà allegé.
<?php
// Si une recherche a été effectuée (bouton "Rechercher" cliqué) :
if (isset($_POST['recherche'])) {
// connexion au serveur MySQL
$base_id = mysql_connect("localhost", "*********", "**********")
or exit("<p>Impossible de se connecter au serveur MySQL : ".mysql_error()."</p>\n");
// sélection de la base
$selection = mysql_select_db("exercices_php", $base_id)
or exit("<p>Impossible de sélectionner la base : ".mysql_error()."</p>\n");
// Recherche des étudiants dans la base de données
// début de construction de la requête : par défaut, on sélectionne tous les étudiants
$requete = "SELECT nom, prenom FROM etudiant ";
// éventuelle restriction de la recherche selon le nom de l'étudiant saisi
if (!empty($_POST['nom'])) {
$nom = mysql_real_escape_string($_POST['nom']);
$requete .= "WHERE nom = '$nom' ";
}
// fin de construction de la requête : classement des résultats
// par ordre alphabétique des noms, puis des prénoms
$requete .= "ORDER BY nom, prenom ;";
// exécution de la requête sur la base de données
$etudiants = mysql_query($requete)
or exit("<p>La requête au serveur MySQL a échoué : ".mysql_error()."</p>\n");
// Affichage des étudiants trouvés
echo "<h2>Résultat</h2>\n";
$etudiant = mysql_fetch_array($etudiants);
// cas où la recherche n'a donné aucun résultat
if (!$etudiant)
echo "<p>Aucun étudiant ne correspond à votre recherche.</p>\n";
// autre cas : il y a au moins un étudiant à afficher
else
// écriture d'un paragraphe par étudiant trouvé
do
?>
<a href="recherche_etudiants.php?<?php echo "<p>".htmlspecialchars(strtoupper($etudiant3['nom']))." "
.htmlspecialchars(strtoupper($etudiant3['prenom']))." </p>\n";?>"></a><br>
<?php
while ($etudiant = mysql_fetch_array($etudiants));
mysql_close($base_id);
}
?>
</body>
</html>
Hors ligne
Et le nouveau message d'erreur ?
En tout cas déjà il manque des { } pour encadrer le dernier bloc else, ce qui fait qu'il ne contient que le do (pour lequel il manque aussi les { } d'ailleurs)
la v2, c'est tabou, on en viendra tous a bout
Hors ligne
Ce n'est pas ça le problème si j'enlève le <a .......</a> ça marche très bien. le problème n'est pas au niveau des accolades surement au niveau de la syntaxe.
Hors ligne
Bonjour,
Il y a plein de choses à dire sur ce script.
Je vous invite tout d'abord à y apporter les corrections que Manicow vous a suggérées, elles sont importantes.
Ensuite j'y rajouterais ceci
1) Ligne 46: Evitez de mettre tes chaînes de caractères entre double quotes lorsqu'il y a absence de contenu dynamique, et adoptez ce principe par défaut en convention d'écriture. Ainsi echo "<h2>Résultat</h2>\n"; devient echo '<h2>Résultat</h2>';
2)
// écriture d'un paragraphe par étudiant trouvé
54. do
55. ?>
56. <a href="recherche_etudiants.php?<?php echo "<p>".htmlspecialchars(strtoupper($etudiant3['nom']))." "
57. .htmlspecialchars(strtoupper($etudiant3['prenom']))." </p>\n";?>"></a><br>
58. <?php
59. while ($etudiant = mysql_fetch_array($etudiants));
1) Evitez de faire une boucle sur un fetch_array ainsi mais plutôt sur $etudiant qui lui contient après le fetch toutes les lignes de votre resultset.
2) Ensuite l'écriture de votre lien sera plus aisé une fois la convention d'écriture que je vous ai suggéré au début de ma réponse.
3) Une URL s'écrit monfichier.php?id=3&page=5 par exemple. Vous noterez ici la déclaration des paramètres id et page, déclaration de paramètre que vous avez omise dans votre lien et qui par conséquent ne pourra pas fonctionner.
Voilà pour le moment.
++
Dernière modification par Jc (07-11-2012 13:58:54)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
et que representerait id et page. moi j'ai plutôt mis nom= à la plade de id= et j'ai cette erreur
Parse error: syntax error, unexpected ' ', expecting while (T_WHILE) in C:\Program Files\EasyPHP-12.0\www\my portable files\devoir3\recherche_etudiants_par_nom_v11.php on line 63
voilà le code:
Dernière modification par valmelissa (07-11-2012 14:36:04)
Hors ligne
Sauf erreur de ma part nom= n'était pas présent dans votre code précédent, ce qui change les choses.
Ensuite passez par une variable intérmédiaire reste plus lisible, et puis d'où sort $etudiant3 ???
Dernière modification par Jc (07-11-2012 15:18:16)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
En fait je réecris mon code ce qui fait que je change les variables, ce n'est pas un soucis. merci
Hors ligne
Si ce n'était pas un souci, sauf erreur de ma part vous ne seriez pas sur ce forum il me semble!
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
tu es le meilleur Jc Merci beaucoup
Dernière modification par valmelissa (07-11-2012 15:28:21)
Hors ligne
1) Ligne 46: Evitez de mettre tes chaînes de caractères entre double quotes lorsqu'il y a absence de contenu dynamique, et adoptez ce principe par défaut en convention d'écriture. Ainsi echo "<h2>Résultat</h2>\n"; devient echo '<h2>Résultat</h2>';
Saluton mon bon Jc,
Juste une demande de précision, est-ce que PHP interprète correctement \n entre quotes simples ?
J'ai comme un doute. Ce n'est pas fondamental pour l'affichage HTML, lequel se contre-fout des nl (cf nl2br), ils sont normalement là juste pour la lisibilité du source, encore que, voir se ballader des \n intempestifs dans l'affichage du navigateur (parce que non traduits en caractères de contrôle par le parser PHP), ça ferait désordre.
A vérifier, donc.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Concernant le \n je l'ai recopié, mais tu as raison mk il faut l'enlever.
Ce qui rejoint la raison de ma reconnexion pour rajouter la remarque suivante à ce post de valmelissa, la programmation ne tolère aucune approximation. rajoutez un ' au milieu de 10 000 lignes de code, et vous pouvez tout mettre à la poubelle. Donc la rigueur est toujours de mise quand on code, et plus tôt on commence, mieux c'est.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Je ferais plus attention
Hors ligne