Récupération de données

Résolu/Fermé
Nikolbc66 Messages postés 17 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 12 mars 2015 - 4 mars 2015 à 11:17
Nikolbc66 Messages postés 17 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 12 mars 2015 - 4 mars 2015 à 13:53
Bonjour,
Bonjour à tous,
Je suis actuellement en train de développer un site Web sur la linguistique et, j'ai quelques petits problèmes dans mon code. Je joins, à ma demande, un fichier de mon site avec des questions. Merci pour vos futures réponses...
Voici le fichier en question :
<div class="dict_retour2"> <!-- affichages des exemples choisis -->
Vers contenant ce mot, poème(s) ou pièce(s)<a href="css/style_appl.css"></a>
de théâtre analysé(s) par les programmes du projet :<br/><br/>
<table class="center">
<tr>
<td>
<form name="all" action="#" method="get">
<div><input type="hidden" name="navigation" value="diereses" />
<input type="hidden" name="dieresesexemples" value="<?php echo $_SESSION['mot'];?>" />
<input type="hidden" name="exempleMot" value="<?php echo $_GET['exempleMot']; ?>" /></div>
<input type="checkbox" <?php
//Cette partie du code rend la check box 'toutes les références' exclusive, en association avec
//les codes php contenu dans les <input> suivants.
if((!$_GET['16s'] || !$_GET['17s'] || !$_GET['18s'] || !$_GET['19s'] || !$_GET['20s']) && $_GET['all']) {
echo 'checked';
} ?> name="all" value="toutes les références" onclick="redirectAll()" />toutes les références
</form>
</td>
<td>
<form name="siecle" action="#" method="get">
<div><input type="hidden" name="navigation" value="diereses" />
<input type="hidden" name="dieresesexemples" value="<?php echo $_SESSION['mot'];?>" />
<input type="hidden" name="exempleMot" value="<?php echo $_GET['exempleMot']; ?>" /></div>
<input type="checkbox" name="16s" value="16" <?php if($_GET['16s'] && !$_GET['all']) echo 'checked'; ?> onclick="redirectSiecle()" />16e siècle
<input type="checkbox" name="17s" value="17" <?php if($_GET['17s'] && !$_GET['all']) echo 'checked'; ?> onclick="redirectSiecle()" />17e siècle
<input type="checkbox" name="18s" value="18" <?php if($_GET['18s'] && !$_GET['all']) echo 'checked'; ?> onclick="redirectSiecle()" />18e siècle
<input type="checkbox" name="19s" value="19" <?php if($_GET['19s'] && !$_GET['all']) echo 'checked'; ?> onclick="redirectSiecle()" />19e siècle
<input type="checkbox" name="20s" value="20" <?php if($_GET['20s'] && !$_GET['all']) echo 'checked'; ?> onclick="redirectSiecle()" />20e siècle
</form></td>
</tr>
<tr>
<td colspan="2">
<form name="auteurs" action="#" method="get">
<input type="hidden" name="navigation" value="diereses" />
<input type="hidden" name="dieresesexemples" value="<?php echo $_SESSION['mot'];?>" />
<input type="hidden" name="exempleMot" value="<?php echo $_GET['exempleMot']; ?>" />
<select name="auteurs" onchange="redirectAuteur();">
<option value = "">sélectionner un auteur</option>
<?php
//On remplit la combo box avec les auteurs existants dans la base de données.
$table = mysql_query("SELECT DISTINCT corpus_auteurs.NOM FROM malherbe.corpus_auteurs order by CODE", $sgbd);
while ($resultat = mysql_fetch_array($table, MYSQL_NUM)) {
$selected = (isset ($_GET['auteurs']) and $_GET['auteurs'] == $resultat[0])?'selected="selected"':'';
echo '<option value= "'.$resultat[0].'" '.$selected.'>' .$resultat[0] ;
echo '</option>';
}
//On libre la mémoire de la requête permettant l'affichage des auteurs dans la combo box.
mysql_free_result($table);
?>
</select>
</form></td></tr>
</table>
<?php
//Affichage des vers conditionné à la recherche par siècle, par auteur ou
//au fait de demander l'affichage de toutes les références
if(isset ($_GET['16s']) || isset ($_GET['17s']) || isset ($_GET['18s']) || isset ($_GET['19s']) || isset ($_GET['20s']) || isset($_GET['all']) || isset($auteur)) { ?>
<br/>
<fieldset><legend>avec diérèse</legend>
<?php
//Si la recherche d'exemples de vers ne donne pas de résultats avec les filtres
//utilisés, on affiche une division sans css particulière.
//L'ouverture de cette balise se faisant dans du PHP, on la referme dans
//du PHP également, pour éviter tout message d'erreur.
if ($nb2 == 0) echo '<div class="div_vers">';
//Si la recherche renvoit des résultats, on affiche une division avec une css
//associée, qui va permettre d'afficher un ascenceur pour visualiser les exemples
//de vers.
else echo '<div class="div_vers">'?>
<table class="d_table_vers">
<?php
//Si pas de résultats, on affiche ce message :
if ($nb2==0) echo '<b>Pas de résultats</b>';
else
//Sinon, on affiche les exemples de vers.
while ($result = mysql_fetch_object($resultat2)) {
$nom_auteur = $result->NOM_AUTEUR;
$titre_oeuvre = $result->TITRE_POEME;
$num_vers_rel = 1;//$result->NUM_REL;
$num_vers = $result->NUM_ABS;
$vers = $result->VERS;
$z_date = $result->DATE_RECUEIL;
?>
<tr>
<td class="poemes_DI">
<?php $exemple = $_GET['exempleMot'];
//Expression régulière permettant de sélectionner le mot dans l'exemple de vers,
//et de l'afficher en rouge.
echo(preg_replace("/(\P{L}{1})($exemple)(\P{L}{1})/iu", "$1<span class=\"d_mot\">$2</span>$3", $vers)); ?>
</td>
<?php //On se connecte à la base
$base_lien = mysql_connect ('www.crisco.unicaen.fr', '#####', '#####');
mysql_select_db ('malherbe', $base_lien) ;
$requete_lien = "SELECT poemes_LM_vers.ID_POEME, poemes_LM_vers.ID_RECUEIL, poemes_LM_vers.NUM_ABS, corpus_ref.NOM_AUTEUR, corpus_ref.TITRE_POEME FROM malherbe.poemes_LM_vers INNER JOIN malherbe.corpus_ref ON poemes_LM_vers.ID_POEME = corpus_ref.ID_POEME WHERE corpus_ref.NOM_AUTEUR ='".$nom_auteur."' AND corpus_ref.TITRE_POEME ='".$titre_oeuvre."' AND poemes_LM_vers.NUM_ABS ='".$num_vers."' ORDER BY poemes_LM_vers.ID_RECUEIL ASC";
$resultat_lien = mysql_query($requete_lien) or die('Erreur SQL !<br />'.$requete_lien.'<br /><a href=\"javascript:history.go(-1)\">BACK</a>'.mysql_error());
$nb_lien = mysql_num_rows($resultat_lien);
$resultat_lien = str_replace("\'","''",$resultat_lien_replace);} /* => CECI NE FONCTIONNE PAS, POURQUOI ? SI JE RECUPERE LES DONNEES DIRECTEMENT, MYSQL ME DIT QU'IL Y A UNE ERREUR DANS MA REQUETE CAR IL Y A DES "'" DANS LES CHAMPS RECUPERES : "Erreur SQL !
SELECT poemes_LM_vers.ID_POEME, poemes_LM_vers.ID_RECUEIL, poemes_LM_vers.NUM_ABS, corpus_ref.NOM_AUTEUR, corpus_ref.TITRE_POEME FROM malherbe.poemes_LM_vers INNER JOIN malherbe.corpus_ref ON poemes_LM_vers.ID_POEME = corpus_ref.ID_POEME WHERE corpus_ref.NOM_AUTEUR ='Théodore de Banville' AND corpus_ref.TITRE_POEME ='OCCIDENTALE QUATRIÈME - LA TRISTESSE D'OSCAR' AND poemes_LM_vers.NUM_ABS ='71' ORDER BY poemes_LM_vers.ID_RECUEIL ASC
BACKYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OSCAR' AND poemes_LM_vers.NUM_ABS ='71' ORDER BY poemes_LM_vers.ID_RECUEIL ASC' at line 1"
POUR MON EGALITE, CA NE PASSE PAS... */
if($nb_lien != 0) {($row_lien = mysql_fetch_array($resultat_lien_replace));
?>
<td class="d_ref"><a href="index.php?navigation=textesauteurs&auteur=<?php echo $row_lien['ID_RECUEIL']; ?>&code_text=<?php echo $row_lien['ID_POEME']; ?>_6"><?php echo $nom_auteur; ?>, <em><?php echo $titre_oeuvre; ?></em>, <?php if ($num_vers != 0)echo $num_vers; else echo $num_vers_rel; ?>, <?php echo $z_date; ?></a> <!-- => POURQUOI L'ID_POEME ET L'ID_RECUEIL QUE JE RECUPERE NE CONCORDENT-ILS PAS AVEC CEUX RECUPERES PLUS HAUT ? CE QUI FAIT QUE MES LIENS N'AMENE PAS L'UTILISATEUR OU IL DEVRAIT. POURTANT, MA RECHERCHE EST BASEE SUR LES VARIABLES "$nom_auteur", "$titre_oeuvre" ET "$num_vers". -->
</td>
</tr>
<?php }
echo('</table></div></fieldset>');
}
mysql_close ($base_lien);
?>
<br/>
<?php
/*$requeteTest = "SELECT ve.NUM_ABS, ve.NUM_REL, ve.VERS, au.NOM, oe.TITRE FROM poemes_DI ve
JOIN corpus_auteurs au on ve.CODE_NOM = au.CODE
JOIN d_oeuvres oe on ve.CODE_OEUVRE = oe.CODE
WHERE ve.MOT = (LOWER('".$_GET['exempleMot']."')) COLLATE utf8_bin and ve.FILTRE ='s'";

/


/*$requeteTest = "SELECT ve.NUM_ABS, ve.VERS, au.NOM, oe.TITRE FROM malherbe.poemes_DI ve
JOIN malherbe.corpus_auteurs au on ve.ID_AUTEUR = au.CODE
JOIN malherbe.d_oeuvres oe on ve.ID_RECUEIL = oe.CODE
WHERE ve.MOT = (LOWER('".$_GET['exempleMot']."')) COLLATE utf8_bin and ve.FILTRE ='s'";

/


$requeteTest = "SELECT ve.NUM_ABS, ve.VERS, cr.NOM_AUTEUR, cr.TITRE_POEME FROM malherbe.poemes_DI ve
JOIN malherbe.corpus_ref cr ON ve.ID_POEME = cr.ID_POEME
WHERE ve.MOT = (LOWER('".$_GET['exempleMot']."')) COLLATE utf8_bin and ve.FILTRE ='s'";
$resultatTest = mysql_query($requeteTest, $sgbd);
$nbTest=mysql_num_rows($resultatTest);
if ($nbTest > 0){
if(isset ($_GET['16s']) || isset ($_GET['17s']) || isset ($_GET['18s']) || isset ($_GET['19s']) || isset ($_GET['20s']) || isset($_GET['all']) || isset($auteur)) {
echo '<fieldset><legend>sans diérèse</legend>';
//Si la recherche d'exemples de vers ne donne pas de résultats avec les filtres
//utilisés, on affiche une division sans css particulière.
//L'ouverture de cette balise se faisant dans du PHP, on la referme dans
//du PHP également, pour éviter tout message d'erreur.
if ($nb22 == 0) echo '<div class="div_vers">';
//Si la recherche renvoit des résultats, on affiche une division avec une css
//associée, qui va permettre d'afficher un ascenceur pour visualiser les exemples
//de vers.
else echo '<div class="div_vers">'?>
<table class="d_table_vers">
<?php
//Si pas de résultats, on affiche ce message :
if ($nb22==0) echo '<b>Pas de résultats</b>';
else
//Sinon, on affiche les exemples de vers.
while ($result = mysql_fetch_object($resultat22)) {
$nom_auteur = $result->NOM_AUTEUR;
$titre_oeuvre = $result->TITRE_POEME;
$num_vers_rel = 1;//$result->NUM_REL;
$num_vers = $result->NUM_ABS;
$vers = $result->VERS;
$z_date = $result->DATE_RECUEIL;
?>
<tr>
<td class="poemes_DI">
<?php $exemple = $_GET['exempleMot'];
//Expression régulière permettant de sélectionner le mot dans l'exemple de vers,
//et de l'afficher en rouge.
echo(preg_replace("/(\P{L}{0,1})($exemple)(\P{L}{0,1})/iu", "$1<span class=\"d_mot\">$2</span>$3", $vers)); ?>
</td>
<td class="d_ref"><a href="#"><?php echo $nom_auteur; ?>, <em><?php echo $titre_oeuvre; ?></em>, <?php if ($num_vers != 0)echo $num_vers; else echo $num_vers_rel; ?>, <?php echo $z_date; ?></a>
</td>
</tr>
<?php }?>
</table>
</div>
</fieldset>
<br/>
<?php
}
}
?>
</div>
</div>
<!-- try
{
$bdd_lien = new PDO('mysql:host=www.crisco.unicaen.fr;dbname=malherbe;charset=utf8', 'crisco_consult', 'gHA6pbxg', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)););
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
$req_lien = $bdd_lien->prepare("SELECT poemes_LM_vers.ID_POEME, poemes_LM_vers.ID_RECUEIL, poemes_LM_vers.NUM_ABS, corpus_ref.NOM_AUTEUR, corpus_ref.TITRE_POEME FROM malherbe.poemes_LM_vers INNER JOIN malherbe.corpus_ref ON poemes_LM_vers.ID_POEME = corpus_ref.ID_POEME WHERE corpus_ref.NOM_AUTEUR ='".$nom_auteur."' AND corpus_ref.TITRE_POEME ='".$titre_oeuvre."' AND poemes_LM_vers.NUM_ABS ='".$num_vers."' ORDER BY poemes_LM_vers.ID_RECUEIL ASC");
$req_lien->execute(array($_GET['$nom_auteur'], $_GET['$titre_oeuvre'], $_GET['NUM_ABS']));
$nb_lien = mysql_num_rows($req_lien);
if($nb_lien != 0) {$donnees = $req_lien->fetch();}
$req_lien->closeCursor();
?>
-->
Je débute dans le développement et J'espère que quelqu'un pourra m'apporter une réponse à mes soucis.

1 réponse

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
4 mars 2015 à 11:31
Bonjour,

1 - Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


Le souci se trouve donc (au dessus de la ligne où tu as mis ton commentaire...)
$requete_lien = "SELECT poemes_LM_vers.ID_POEME, poemes_LM_vers.ID_RECUEIL, poemes_LM_vers.NUM_ABS, corpus_ref.NOM_AUTEUR, corpus_ref.TITRE_POEME FROM malherbe.poemes_LM_vers INNER JOIN malherbe.corpus_ref ON poemes_LM_vers.ID_POEME = corpus_ref.ID_POEME WHERE corpus_ref.NOM_AUTEUR ='".$nom_auteur."' AND corpus_ref.TITRE_POEME ='".$titre_oeuvre."' AND poemes_LM_vers.NUM_ABS ='".$num_vers."' ORDER BY poemes_LM_vers.ID_RECUEIL ASC";
$resultat_lien = mysql_query($requete_lien) or die('Erreur SQL !<br />'.$requete_lien.'<br /><a href=\"javascript:history.go(-1)\">BACK</a>'.mysql_error());



Je te conseille les choses suivantes :
1 - Faire des retours à la ligne dans ta requête pour qu'elle soit plus lisible
2 - Utiliser l'instruction addslaches pour échapper les quotes dans tes variables
Ce qui donnerait quelque chose du genre :


$requete_lien = "SELECT poemes_LM_vers.ID_POEME
                             , poemes_LM_vers.ID_RECUEIL
                             , poemes_LM_vers.NUM_ABS
                             , corpus_ref.NOM_AUTEUR
                             , corpus_ref.TITRE_POEME
 FROM malherbe.poemes_LM_vers 
INNER JOIN malherbe.corpus_ref ON poemes_LM_vers.ID_POEME = corpus_ref.ID_POEME 
WHERE corpus_ref.NOM_AUTEUR ='".addslashes($nom_auteur)."' 
  AND corpus_ref.TITRE_POEME ='".addslashes($titre_oeuvre)."' 
  AND poemes_LM_vers.NUM_ABS ='".$num_vers."' 
ORDER BY poemes_LM_vers.ID_RECUEIL ASC";
$resultat_lien = mysql_query($requete_lien) or die('<pre>Erreur SQL !<br />'.$requete_lien.'<br /><a href=\"javascript:history.go(-1)\">BACK</a>'.mysql_error()."</pre>");


0
Nikolbc66 Messages postés 17 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 12 mars 2015
4 mars 2015 à 11:55
Oui, je ferai plus attention à la coloration syntaxique, à l'avenir, quand je posterai un morceau de code : merci pour le lien d'information. Je ne connaissais pas la fonction "addslashes" et j'essayais de résoudre mon problème avec les expressions régulières mais, c'est beaucoup plus simple comme ça. Merci pour ton coup de main. Je vais tester ça de suite.
0
Nikolbc66 Messages postés 17 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 12 mars 2015
4 mars 2015 à 11:57
Merci d'avoir supprimé mon doublon, aussi : je n'arrivais pas à remettre la main dessus. ; )
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
4 mars 2015 à 12:07
Pas de pb. ;-)

PS: Dans l'optique de rendre tes requêtes encore plus lisible, penses aussi à utiliser des ALIAS pour tes noms de table. (par contre, essaye de mettre des choses en rapport avec le nom de la table.. du genre.. des initiales... et évites les T1 T2 .....)
Par exemple :
SELECT PLV.ID_POEME
       , PLV.ID_RECUEIL
       , PLV.NUM_ABS
       , CR.NOM_AUTEUR
       , CR.TITRE_POEME
 FROM malherbe.poemes_LM_vers  PLV
INNER JOIN malherbe.corpus_ref  CR ON PLV.ID_POEME = CR.ID_POEME 
WHERE CR.NOM_AUTEUR ='".addslashes($nom_auteur)."' 
  AND CR.TITRE_POEME ='".addslashes($titre_oeuvre)."' 
  AND PLV.NUM_ABS ='".$num_vers."' 
ORDER BY PLV.ID_RECUEIL ASC
0
Nikolbc66 Messages postés 17 Date d'inscription mercredi 4 mars 2015 Statut Membre Dernière intervention 12 mars 2015 > jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024
4 mars 2015 à 12:59
Merci pour tous ces petits conseils et pour ton aide. Il est vrai que je débute dans le développement et que je n'ai pas encore certaines habitudes : mais, avec le temps, ça va venir... : )
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié par jordane45 le 4/03/2015 à 13:03
PS:
EDIT [erreur de message]


Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0