Récupératio de données

Mammouth du PHP | 19672 Messages

26 sept. 2010, 15:39

J'ai un doute : là, on sait ce que ça affiche avec le problème des apostrophes : mais as-tu, au moins par curiosité, fait afficher la source de la page générée pour vérifier ce qu'il y avait réellement dans cette partie du code ? sinon, essaye donc ça et reviens avec le résultat.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

26 sept. 2010, 16:42

J'ai un doute : là, on sait ce que ça affiche avec le problème des apostrophes : mais as-tu, au moins par curiosité, fait afficher la source de la page générée pour vérifier ce qu'il y avait réellement dans cette partie du code ? sinon, essaye donc ça et reviens avec le résultat.
Dans le script de la page rechauteurs, au départil y a la liste et elle est correct au niveau apostrophe
<option value="Francine d'Amour">Francine d'Amour</option>
Par la suite lorsque l'auteur est choisi
<option value="Francine d'Amour">Francine d'Amour</option>
<select name="titre" id="titre">
<option value="Les jardins de l'enfer">Les jardins de l'enfer</option>
<option value="Les jardins de l'enfer">Les jardins de l'enfer</option>
</select>
<br /><input type="submit" name="ok" id="ok" value="Choisir" />

</fieldset>
Par la suite, dans scipt resultats.php
<option value="Francine d'Amour" selected="selected">Francine d'Amour</option>
</select>
<select name="titre" id="titre">
<option value="Les jardins de l'enfer">Les jardins de l'enfer</option>
<option value="Les jardins de l'enfer">Les jardins de l'enfer</option>
</select>
<br /><input type="submit" name="ok" id="ok" value="Choisir" />

</fieldset>

<h2> Formulaire pour réserver un livre</h2>
<form action='/BIBLIOTHEQUE/rechauteurs.php' method='post' name='Form'>
<table width='100%' border='0' cellspacing='1' cellpadding='1'>
<tr><td colspan='2'><span class='txterror'>Les champs marqué d'un * sont obligatoires</span></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Titre du livre* :</span></td><td><input type='text' style='width:200 ;' name='f_10' value='Les jardins de l'enfer' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Nom de l'auteur* :</span></td><td><input type='text' style='width:200 ;' name='f_11' value='Francine d'Amour' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Votre nom de famille* :</span></td><td><input type='text' style='width:200 ;' name='f_1' value='' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Votre prénom* :</span></td><td><input type='text' style='width:200 ;' name='f_2' value='' size='24' border='0'></td></tr>

<tr><td align='right' width='30%'><span class='txtform'>Votre courriel* :</span></td><td><input type='text' style='width:200 ;' name='f_3' value='' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Votre numéro de téléphone* :</span></td><td><input type='text' style='width:200 ;' name='f_4' value='' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'><span class='txtform'>Votre numéro de membre :</span></td><td><input type='text' style='width:200 ;' name='f_5' value='' size='24' border='0'></td></tr>
<tr><td align='right' width='30%'></td><td><input type='submit' name='fait' value='Envoyer la réservation' border='0'></td></tr>
</table>
</form>

Les mots après l'apostrophe sont en rouge (ici dans le code php ils sont en bleu). Il y a donc quelque chose qui se passe, mais moi je ne comprend vraiment pas quoi.
J'espère que cela te donnera des pistes.

Toujours merci.

Alain

Mammouth du PHP | 19672 Messages

26 sept. 2010, 20:22

C'est bien ce que je pensais, ne cherche pas plus loin et observe : les valeurs des attributs de tes balises HTML sont encadrés d'apostrophes au lieu de guillemets. Du coup si une des valeurs comporte une apostrophe, c'est interprété par le navigateur comme la fin de la valeur d'attribut, et la suite est reprise comme un nouvel attribut.

En clair, pour le HTML, utilise des " au lieu de '.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

28 sept. 2010, 13:05

Et voila, les scripts fonctionnent.

Premier script rechauteurs.php
<?php
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
/* Variables de connexion : ajustez ces paramètres selon votre propre environnement */
$serveur = "localhost";
$admin   = "ville_alain";
$mdp     = "guylaine";
$base    = "ville_bibliotheque";
/* On récupère si elle existe la valeur de l'auteur envoyé par le formulaire */
$aut = isset($_POST['auteurs'])?$_POST['auteurs']:null;
$envoi = isset($_POST['fait']);
if ($envoi != false ) { 
include('resultats.php');
 }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Sélectionner un titre selon l'auteur choisie</title>

</head>
<body style="font-family: verdana, helvetica, sans-serif; font-size: 100%">
<h3>Chercher un auteur et un titre</h3>
<?php
/* Connexion et stocker l'auteur choisi dans une variable*/
$connexion = mysql_pconnect($serveur, $admin, $mdp);
if($connexion != false){
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT DISTINCT`auteurs`".
    " FROM `nds_bib_`".
    " ORDER BY `auteurs`";
    $selected_auteur = mysql_query($sql1);
	$auteurs = array();
    /* On active un compteur pour les auteurs */
    $nb_auteurs = 0;
    if($selected_auteur != false)
    { 
        while($ligne = mysql_fetch_assoc($selected_auteur))
        {
            array_push($auteurs, $ligne['auteurs']);

            /* On incrémente le compteur */
            $nb_auteurs++;
        }	
    }
    ?>
	<?php 
	/* Création du formaulaire contenant la liste des auteurs*/
	?>
	<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgauteur">
	<fieldset style="border: 3px double #333399">
	<select name="auteurs" id="auteurs" onchange="document.forms['chgauteur'].submit();">
	<option value="-1">- - - Choisissez un auteurs - - -</option>
    <?php
    for($i = 0; $i < $nb_auteurs; $i++)
    {
		?>
		<option value="<?php echo($auteurs[$i]); ?>"<?php echo((isset($aut) && $aut == $auteurs[$i])?" selected=\"selected\"":null); ?>><?php echo($auteurs[$i]); ?></option>
		<?php
    }
    ?>
	</select>
    <?php
    mysql_free_result($selected_auteur);
    /* On vérifie si l'on a envoyé un auteur */
    if(isset($aut) )
    {
		 /* Si oui, on cré une liste de titre correspondand à l'auteur choisi */
		$sql2 = "SELECT auteurs , titre ".
                "FROM nds_bib_ ".
                "WHERE auteurs = '". mysql_real_escape_string($aut) ."' ".
                "ORDER BY titre";		
       if($connexion != false)
		{
            $selected_titre = mysql_query($sql2, $connexion);
            /* Un  compteur pour les auteurs */
            $nd = 0;
            /* Création de  deux tableaux pour les auteurs et les titres */
            $nom_auteur = array();
            $nom_titre = array();
            /* On va mettre les auteur et les titres dans les deux tableaux */
            while($ligne_titre = mysql_fetch_assoc($selected_titre))
            {
               array_push($nom_auteur, $ligne_titre['auteurs']);
               array_push($nom_titre, $ligne_titre['titre']);
                $nd++;
            }
			    /* Maintenant on peut construire la liste déroulante des titres */
            ?>
			<select name="titre" id="titre">
            <?php  
            for($d = 0; $d<$nd; $d++)
            {
                ?>
				<option value="<?php echo($nom_titre[$d]); ?>"<?php echo((isset($titre_selectionne) && $titre_selectionne == $nom_titre[$d])?" selected=\"selected\"":null); ?>><?php echo ($nom_titre[$d]) ; ?></option>
				<?php
            }
			?>
			</select>
			<?php
        }
        /*Sinon, on Initialiser la variable $selected_titre à NULL; */
        mysql_free_result($selected_titre);
		
    }
	/* On construit le formulaire contenant le titre et l'auteur choisi */
	?>
	<br /><input type="submit" name="ok" id="ok" value="Choisir" />
	</fieldset>
	</form>
	<?php
	if(isset($_POST['ok']) && isset($_POST['auteurs']) && $_POST['auteurs'] != "")
	{
		$auteur_selectionne = $_POST['auteurs'];
		$titre_selectionne = $_POST['titre'];
		include('reservation.php');
	}
	?>
	<?php
    /* Terminer, on ferme la connexion */
    mysql_close($connexion);
}
else
{
    /* Sinon on vérifie les paramètre de connexion
    */
	?>
	<p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p>
	<?php
}
?>
</body>
</html>
Le deuxième srcipts reservation.php
<?php
$auteur_selectionne = $_POST['auteurs'];
$titre_selectionne = $_POST['titre'];

?>
<html>
</head>
<body>
	<table width="100%" border="0" cellspacing="1" cellpadding="1">
		<tr><td><tt><?echo nl2br(stripslashes($message));?></tt></td></tr>
			<tr><td>&nbsp;</td></tr>
		<tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
		<tr><td>&nbsp;</td></tr>
			</table>

<h2> Formulaire pour réserver un livre</h2>
<form action="<? echo $PHP_SELF ?>" method="post" name="Form">
<table width="100%" border="0" cellspacing="1" cellpadding="1">
<tr><td colspan="2'="><span class="txterror">Les champs marqué d'un * sont obligatoires</span></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Titre du livre* :</span></td><td><input type="text" style="width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;" name="f_10" value="<?echo ($titre_selectionne);?>" size="0"></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Auteur du livre* :</span></td><td><input type="text" style="width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;" name="f_11" value="<?echo ($auteur_selectionne);?>" size="0"></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Votre nom de famille* :</span></td><td><input type="text" style="width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;" name="f_1" value="<?echo stripslashes($f_1);?>" size="24" border="0"></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Votre prénom* :</span></td><td><input type="text" style="width:200 <?if($errf_2==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>" name="f_2" value="<?echo stripslashes($f_2);?>" size="24" border="0"></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Votre courriel* :</span></td><td><input type="text" style="width:200 <?if($errf_3==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;" name="f_3" value="<?echo stripslashes($f_3);?>" size="24" border="0"></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Votre numéro de téléphone* :</span></td><td><input type="text" style="width:200 <?if($errf_4==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;" name="f_4" value="<?echo stripslashes($f_4);?>" size="24" border="0"></td></tr>
<tr><td align="right" width="30%"><span class="txtform">Votre numéro de membre :</span></td><td><input type="text" style="width:200 <?if($errf_5==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;" name="f_5" value="<?echo stripslashes($f_5);?>" size="24" border="0"></td></tr>
<tr><td align="right" width='30%'></td><td><input type="submit" name="fait" value="Envoyer la réservation" border="0"></td></tr>
</table>
</form>

</body>
et le troisième resultats.php
<? 
if(isset($_POST['fait']))  
	{
		$f_6="Votre message  nous a bien été transmis, et nous vous en remercions.";
		$f_7="Nous allons y donner suite dans les meilleurs délais.";
		// Création du message
		$titre="Message de votre site";
		$tete="From:[email protected]\n";
		$corps.="Titre du livre : ".$f_10."\n";
		$corps.="Nom de auteur : ".$f_11."\n";
		$corps."Votre nom de famille : ".$f_1."\n";
		$corps.="Votre prénom : ".$f_2."\n";
		$corps.="Votre courriel : ".$f_3."\n";
		$corps.="Votre numéro de téléphone : ".$f_4."\n";
		$corps.="Votre numéro de membre : ".$f_5."\n";
		$message.=" ".$f_6."\n";
		$message.=" ".$f_7."\n";
		$to= "[email protected]";
		mail($to,$titre,$corps,$tete);
?>		<table width="100%" border="0" cellspacing="1" cellpadding="1">
		<tr><td><tt><?echo nl2br(stripslashes($message));?></tt></td></tr>
			<tr><td>&nbsp;</td></tr>
		<tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
		<tr><td>&nbsp;</td></tr>
			</table>
<?php	
 }	
?>
	

<? 
if(isset($_POST['fait']))  
    {
        $f_6="Votre message  nous a bien été transmis, et nous vous en remercions.";
        $f_7="Nous allons y donner suite dans les meilleurs délais.";
        // Création du message
        $titre="Message de votre site";
        $tete="From:[email protected]\n";
        $corps.="Titre du livre : ".$f_10."\n";
        $corps.="Nom de auteur : ".$f_11."\n";
        $corps."Votre nom de famille : ".$f_1."\n";
        $corps.="Votre prénom : ".$f_2."\n";
        $corps.="Votre courriel : ".$f_3."\n";
        $corps.="Votre numéro de téléphone : ".$f_4."\n";
        $corps.="Votre numéro de membre : ".$f_5."\n";
        $message.=" ".$f_6."\n";
        $message.=" ".$f_7."\n";
        $to= "[email protected]";
        mail($to,$titre,$corps,$tete);
?>        <table width="100%" border="0" cellspacing="1" cellpadding="1">
        <tr><td><tt><?echo nl2br(stripslashes($message));?></tt></td></tr>
            <tr><td>&nbsp;</td></tr>
        <tr><td><tt><?echo nl2br(stripslashes($corps));?></tt></td></tr>
        <tr><td>&nbsp;</td></tr>
            </table>
<?php    
 }    
?>
    ]
Je te remercie beaucoup Cyrano pour ton aide et ta patience. Sans cela, je n'y serait pas parvenu.

Avant de mettre régler sur le sujet, crois tu qu'il serait mieux d'améliorer le scipt, afin qu'il soit utile à d'autre?

Alain

Mammouth du PHP | 19672 Messages

28 sept. 2010, 13:12

Tu peux mettre le [Résolu], d'autres le trouveront et s'ils ont la même patience pour en suivre le déroulement, ils trouveront la solution aussi ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: