IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Création de l'index : problème avec le tuto "conception d'un site dynamique"


Sujet :

Langage PHP

  1. #1
    Hew
    Hew est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 142
    Points : 101
    Points
    101
    Par défaut Création de l'index : problème avec le tuto "conception d'un site dynamique"
    Bonjour !

    Je débute en php

    Voilà mon problème : je fais un test pour mon site en ce moment, et j'ai trois pages pour l'instant :
    - une page "accueil"
    - une page "ajouter un stage" qui contient un formulaire pour entrer des données
    - un script "traitement" qui traite les données du formulaire. si les champs ont bien été remplis, on peut revenir à la page d'accueil, sinon un message d'erreur s'affiche qui indique les champs qui ont été mal remplis.

    Après avoir lu le tutoriel de Pierre-Baptiste Naigon. Je me suis dit que j'allais générer mes pages de cette façon.

    J'ai donc créé une table "pages" dans ma BDD et dans le champ contenu, j'entre les chemins des pages "accueil" et "ajouter un stage".
    J'ai donc une table avec
    id_page = 1; contenu = ./gabarit/accueil.php
    id_page = 2; contenu = ./gabarit/formStageHtml.php

    Mon fichier "index.php" ressemble à ça :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    <?php
     
    	//Démarrage de la session
    	session_start();
     
    	// Active tout les warning. Utile en phase de développement
    	// En phase de production, remplacer E_ALL par 0
    	error_reporting(E_ALL);
     
    	// Inclus le fichier contenant les fonctions personalisées
    	include_once 'mes_fonctions.php';
     
    	// Fonction de connexion à la base de données
    	connexion_DB('supopexpat');
     
    	// Définit l'Id de la page d'accueil
    	$id_page_accueil = 1;
     
    	// Récupère l'id de la page courante passée par l'URL
    	// Si non défini, on considère que la page est la page d'accueil
    	if (isset($_GET['id_page'])) {
    		$_ENV['id_page'] = intval($_GET['id_page']);
    	} else {
    		$_ENV['id_page'] = $id_page_accueil;
    	}
     
    	// Extrait les informations correspondantes à la page en cours de la DB
    	extraction_infos_DB();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <!-- Insère les mots-clés extraits de la DB dans les meta -->
    <META NAME="keywords" lang="fr" CONTENT="<?php echo $_ENV['mots_cles']; ?>">
    <!-- Insère la description extraite de la DB dans les meta -->
    <META NAME="Description" CONTENT="<?php echo $_ENV['description']; ?>">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <!-- Insère le titre extrait de la DB dans la balise correspondante -->
    <title><?php echo 'SupopExpat : ' .$_ENV['titre']; ?></title>
    <link rel="stylesheet" type="text/css" href="design.css">
    </head>
    <body>
     
    	<div id="chemin_fer">
    		<?php
    			// Affiche le chemin de fer
    			echo 'Vous êtes ici : '.affiche_chemin_fer($_ENV['id_page']);
    		?>
    	</div>
     
    	<div id="bloc_central">
     
    		<div id="contenu">
    			<?php
    				require_once($_ENV['contenu'])
    			?>
    		</div>
    	</div>
     
            <?php deconnexion_DB(); ?>
    </body>
    </html>

    Je vais donc en chargeant index.php, afficher ma page d'accueil. Là je clique sur le lien "ajouter un stage" pour arriver sur le formulaire de stage.
    Code du formulaire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    <?php
    //Récupération des données pour créer un nouveau stage dans la base de données
     
    	echo'<p>
    			<h2> Création d\'un nouveau stage </h2>
    			Vous allez créer un nouveau stage à l\'étranger auquel vous pourrez ensuite associer votre expérience.
    		</p>';
     
     
    		if (!empty($_SESSION['msg_error']))
    		{
    		echo'<p>
    			<h3>Erreurs</h3>
    			<ul>'.$_SESSION['msg_error'].'</ul>			
    			</p>';
    		}
     
    		echo '<p>
    		<form action="../core/formStage.php" method="post">
    		<h4> Informations sur le Pays </h4>
    		<table border=0>
    			<tr>
    			<td>Pays : </td>
    			<td>
    			<select name="pays">
    				<option value="afriqueDuSud"> Afrique du Sud </option>
    				<option value="algerie"'; if($_SESSION['pays']==algerie) echo 'selected="selected"'; echo '> Algérie </option>
    				<option value="allemagne"'; if($_SESSION['pays']==allemagne) echo 'selected="selected"'; echo'> Allemagne </option>
    				<option value="argentine"'; if($_SESSION['pays']==argentine) echo 'selected="selected"'; echo'> Argentine </option>
    				<option value="australie"'; if($_SESSION['pays']==australie) echo 'selected="selected"'; echo'> Australie </option>
    				<option value="autriche"'; if($_SESSION['pays']==autriche) echo 'selected="selected"'; echo'> Autriche </option>
    				<option value="belgique"'; if($_SESSION['pays']==belgique) echo 'selected="selected"'; echo'> Belgique </option>
    				<option value="bresil"'; if($_SESSION['pays']==bresil) echo 'selected="selected"'; echo'> Bresil </option>
    				<option value="canada"'; if($_SESSION['pays']==canada) echo 'selected="selected"'; echo'> Canada </option>
    				<option value="chili"'; if($_SESSION['pays']==chili) echo 'selected="selected"'; echo'> Chili </option>
    				<option value="chine"'; if($_SESSION['pays']==chine) echo 'selected="selected"'; echo'> Chine </option>
    				<option value="danemark"'; if($_SESSION['pays']==danemark) echo 'selected="selected"'; echo'> Danemark </option>
    				<option value="espagne"'; if($_SESSION['pays']==espagne) echo 'selected="selected"'; echo'> Espagne </option>
    				<option value="etatsUnis"'; if($_SESSION['pays']==etatsUnis) echo 'selected="selected"'; echo'> Etats-Unis </option>
    				<option value="finlande"'; if($_SESSION['pays']==finlande) echo 'selected="selected"'; echo'> Finlande </option>
    				<option value="grece"'; if($_SESSION['pays']==grece) echo 'selected="selected"'; echo'> Grece </option>
    				<option value="inde"'; if($_SESSION['pays']==inde) echo 'selected="selected"'; echo'> Inde </option>
    				<option value="irlande"'; if($_SESSION['pays']==irlande) echo 'selected="selected"'; echo'> Irlande </option>
    				<option value="islande"'; if($_SESSION['pays']==islande) echo 'selected="selected"'; echo'> Islande </option>
    				<option value="israel"'; if($_SESSION['pays']==israel) echo 'selected="selected"'; echo'> Israel </option>
    				<option value="italie"'; if($_SESSION['pays']==italie) echo 'selected="selected"'; echo'> Italie </option>
    				<option value="japon"'; if($_SESSION['pays']==japon) echo 'selected="selected"'; echo'> Japon </option>
    				<option value="lettonie"'; if($_SESSION['pays']==lettonie) echo 'selected="selected"'; echo'> Lettonie </option>
    				<option value="liban"'; if($_SESSION['pays']==liban) echo 'selected="selected"'; echo'> Liban </option>
    				<option value="liechtenstein"'; if($_SESSION['pays']==liechtenstein) echo 'selected="selected"'; echo'> Liechtenstein </option>
    				<option value="lituanie"'; if($_SESSION['pays']==lituanie) echo 'selected="selected"'; echo'> Lituanie </option>
    				<option value="luxembourg"'; if($_SESSION['pays']==luxembourg) echo 'selected="selected"'; echo'> Luxembourg </option>
    				<option value="maroc"'; if($_SESSION['pays']==maroc) echo 'selected="selected"'; echo'> Maroc </option>
    				<option value="mexique"'; if($_SESSION['pays']==mexique) echo 'selected="selected"'; echo'> Mexique </option>
    				<option value="norvege"'; if($_SESSION['pays']==norvege) echo 'selected="selected"'; echo'> Norvege </option>
    				<option value="nouvelleZelande"'; if($_SESSION['pays']==nouvelleZelande) echo 'selected="selected"'; echo'> Nouvelle Zelande </option>
    				<option value="paysBas"'; if($_SESSION['pays']==paysBas) echo 'selected="selected"'; echo'> Pays-Bas </option>
    				<option value="perou"'; if($_SESSION['pays']==perou) echo 'selected="selected"'; echo'> Perou </option>
    				<option value="pologne"'; if($_SESSION['pays']==pologne) echo 'selected="selected"'; echo'> Pologne </option>
    				<option value="portugal"'; if($_SESSION['pays']==portugal) echo 'selected="selected"'; echo'> Portugal </option>
    				<option value="royaumeUni"'; if($_SESSION['pays']==royaumeUni) echo 'selected="selected"'; echo'> Royaume-Uni </option>
    				<option value="russie"'; if($_SESSION['pays']==russie) echo 'selected="selected"'; echo'> Russie </option>
    				<option value="singapour"'; if($_SESSION['pays']==singapour) echo 'selected="selected"'; echo'> Singapour </option>
    				<option value="suede"'; if($_SESSION['pays']==suede) echo 'selected="selected"'; echo'> Suede </option>
    				<option value="suisse"'; if($_SESSION['pays']==suisse) echo 'selected="selected"'; echo'> Suisse </option>
    				<option value="tunisie"'; if($_SESSION['pays']==tunisie) echo 'selected="selected"'; echo'> Tunisie </option>
    				<option value="turquie"'; if($_SESSION['pays']==turquie) echo 'selected="selected"'; echo'> Turquie </option>
    				<option value="ukraine"'; if($_SESSION['pays']==ukraine) echo 'selected="selected"'; echo'> Ukraine </option>
    			</select>
    			</td>
    			</tr>
    			
    			<tr>
    			<td>Ville : </td>
    			<td><input type="text" name="ville" value="'; echo $_SESSION['ville']; echo'"></td>
    			</tr>
    			
    			<tr>
    			<td>Langue : </td>
    			<td><input type="text" name="langue" value="'; echo $_SESSION['langue']; echo'"></td>
    			</tr>
    		</table>
    		
    		<h4> Informations sur le Stage </h4>
    		<table border=0>
    			<tr>
    			<td>Type de Stage : </td>
    			
    			<td><input type="radio" name="type" value="0"'; if($_SESSION['type']==0) echo 'checked="checked"'; echo'> Entreprise </br>
    				<input type="radio" name="type" value="1"'; if($_SESSION['type']==1) echo 'checked="checked"'; echo'> Labo </br>
    				<input type="radio" name="type" value="2"'; if($_SESSION['type']==2) echo 'checked="checked"'; echo'> Ouvrier </br>
    				<input type="radio" name="type" value="3"'; if($_SESSION['type']==3) echo 'checked="checked"'; echo'> Autre </br>
    			</td>
    			</tr>
    			<tr>
    			<td> Nom de l\'entité : </td>
    			<td><input type="text" name="nom" value="'; echo $_SESSION['nom']; echo'"></td>
    			</tr>
    			
    			<tr>
    			<td> Adresse (facultatif) : </td>
    			<td><textarea name="adresse" rows="8" cols="45" >'; echo $_SESSION['adresse']; echo'</textarea></td>
    			</tr>
    			
    			<tr>
    			<td> Description de l\'entité : </td>
    			<td><textarea name="description" rows="8" cols="45" >'; echo $_SESSION['description']; echo'</textarea></td>
    			</tr>
    		</table>
    		
    		<h4> Informations Complémentaires </h4>
    		<table border=0>	
    			<tr>
    			<td> Précautions particulières (visa, vaccin...) : </td>
    			<td><textarea name="precautions" rows="8" cols="45">'; echo $_SESSION['precautions']; echo'</textarea></td>
    			</tr>
    			
    			<tr>
    			<td> Remarques : </td>
    			<td><textarea name="remarques" rows="8" cols="45">'; echo $_SESSION['remarques']; echo'</textarea></td>
    			</tr>
    		</table>
    		
    		<input type="submit" value="Envoyer">
    		</form>
    		</p>';
    	?>

    Ce formulaire est traité par formStage.html, dont voici le code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
    // CONTROLE DES DONNEES ENTREES DANS DANS FORM_STAGE
     
    mysql_connect("localhost", "root", ""); // Connexion à MySQL
    mysql_select_db("supopExpat"); // Sélection de la base de données supopExpat
     
    $msg_error = '';
     
    if (empty($_POST['pays'])){
    	$msg_error .= '<li>Vous devez choisir un pays</li>';
    }
    if (empty($_POST['ville'])) {
    	$msg_error .= '<li>Vous devez saisir une ville</li>';
    }
    if (empty($_POST['nom'])) {
    	$msg_error .= '<li>Vous devez préciser le nom de l\'entité</li>';
    }
    if (empty($_POST['description'])) {
    	$msg_error .= '<li>Vous devez entrer la description de l\'entité</li>';
    }
     
     
    if (empty($msg_error)){
    	//traitement & enreigstrement
    		$pays = mysql_real_escape_string(htmlspecialchars($_POST['pays']));
    		$ville = mysql_real_escape_string(htmlspecialchars($_POST['ville'])); 
    		$langue = mysql_real_escape_string(htmlspecialchars($_POST['langue']));
    		$type = mysql_real_escape_string(htmlspecialchars($_POST['type']));
    		$nom = mysql_real_escape_string(htmlspecialchars($_POST['nom'])); 
    		$adresse = mysql_real_escape_string(htmlspecialchars($_POST['adresse']));
    		$description = mysql_real_escape_string(htmlspecialchars($_POST['description'])); 
    		$precautions = mysql_real_escape_string(htmlspecialchars($_POST['precautions']));
    		$remarques = mysql_real_escape_string(htmlspecialchars($_POST['remarques'])); // on crée les variables associées
     
    		mysql_query("INSERT INTO infosstages VALUES('', '$pays', '$ville', '$langue', '$type', '$nom', '$adresse', '$description', '$remuneration', '$hebergement', '$precautions', '$remarques')"); //on enregistre les données dans la table des stages
    		$_SESSION['msg_error'] = '';
     
    		echo '<p>Données enregistrées</p>';
    		echo '<p><a href="./index.php?id_page=1"> Retourner à la page d\'accueil </a></p>';
    }
     
    else{
    	$_SESSION['msg_error'] = $msg_error; //on crée une variable de session pour aller passer les données sur une autre page
    	$_SESSION['pays'] = $_POST['pays'];
    	$_SESSION['ville'] = $_POST['ville'];
    	$_SESSION['langue'] = $_POST['langue'];
    	$_SESSION['type'] = $_POST['type'];
    	$_SESSION['nom'] = $_POST['nom'];
    	$_SESSION['adresse'] = $_POST['adresse'];
    	$_SESSION['description'] = $_POST['description'];
    	$_SESSION['precautions'] = $_POST['precautions'];
    	$_SESSION['remarques'] = $_POST['remarques'];
     
    	header('Location: ../index.php?id_page=2'); //redirection vers la page formStageHtml.php
     
    }
     
    	mysql_close(); // déconnexion de la base de données
    ?>

    Ouf ! maintenant qu'on a tout le code on peut passer aux problèmes

    Donc mes problèmes :
    1. quand j'affiche le formulaire, il y a un problème avec les variables "pays" (dans le select). Je vois donc toujours affiché des "undefined constant chili on ligne xx"
    2. quand je charge le formulaire, il est préremplit avec les données d'une session précédente... (je passe les variables de formStage à formStageHtml avec des variables sessions).

    J'imagine que pour le 2, il faut qu'à un moment je vide mes variables de session, mais je ne sais pas trop où ni comment
    Quant au 1, je ne sais pas pourquoi c'est comme ça. Quand je testais mon formulaire simplement (sans l'appeler dans une page index), ça marchait très bien.

    Donc si vous pouvez m'aider à résoudre ce problème, soit en me disant ce qui ne va pas dans mon code, soit en m'expliquant d'autres façons de construire ma page index.php, ce serait vraiment super

    Merci,

    Cécile

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Pour le 1 il faut que tu entoures tes chaînes de caractères avec des guillemets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="algerie"'; if($_SESSION['pays']=='algerie') echo 'selected="selected"'; echo '> Algérie </option>
    Pour le 2, pour détruire les variables de session il suffit de faire un unset($_SESSION['ma_variable'])
    Il faut que tu le fasses une fois que tu n'en as plus besoin... Pourquoi pas une fois le formulaire affiché ?
    Par curiosité, pourquoi as-tu choisi de passer par des variables de session ? C'est pour éviter de surcharger ton gestionnaire de base de données ?

  3. #3
    Hew
    Hew est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 142
    Points : 101
    Points
    101
    Par défaut
    Merci pour ton aide !

    1. Effectivement en mettant les variables entre ' ' ça marche

    2. J'ai ensuite rajouté des unset($_SESSION['variable']) comme tu me disais, juste après avoir fait l'enregistrement dans la base de données, pour le cas où le formulaire est bien rempli.
    Par contre maintenant quand je charge le formulaire, j'ai un "undefined index" pour toutes mes variables.
    En enlevant le unset SESSION, et en donnant une valeur vide à la session ($_SESSION['variable'] = ' '; ), je n'ai plus ce problème, donc pour l'instant c'est comme ça que je fais.

    J'ai utilisé des variables de sessions parce que c'est le moyen le plus compréhensible que j'ai trouvé pour passer des valeurs d'un page à l'autre. J'ai vu qu'on pouvait faire autrement (via les url ? avec des champs hidden ??) mais pour moi aie aie aie ...
    Mais si un jour quelqu'un m'explique qu'il y a plus simple et plus performant, je prendrais


    EDIT : ah j'ai un autre problème !
    Au début je faisais mon session_start() au tout début de la page d'index.
    Mais j'ai remarqué que si je faisais comme ça, mes variables n'étaient pas passées d'une page à l'autre. Je pense que c'est parce que mon script de traitement du formulaire n'est pas chargé dans la page index.php. Il ne bénéficie donc pas du session_start()...
    Pour l'instant j'ai remis un session_start() sur la page du traitement et celle du formulaire et enlevé le session_start() de la page index. Mais je pense que ce n'est pas une bonne façon de faire. Il faudrait aussi charger mon script de traitement dans la page index, non ?
    Merci encore

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Plutôt que créer les variables de session à vide, tu peux tester si elles sont définies avec la fonction isset(), et ne les afficher que si elles le sont.

    Par ailleurs, en général (du moins c'est ce que je fais ), j'affiche les données pour consultation, avec un lien pour pouvoir les modifier (ou les supprimer), qui ne transmet que l'identifiant des données à modifier. Et avant affichage du formulaire, je récupère (de nouveau) les données de la base de données.

  5. #5
    Hew
    Hew est déconnecté
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 142
    Points : 101
    Points
    101
    Par défaut
    Ok donc tu écris une fois ou plus dans ta base de données, c'est ça ?
    Une première fois avant d'afficher les données pour modification/suppression et une autre fois si la donnée a été modifiée.

    C'est comme ça que je pensais faire au début, mais ça ne me paraissait pas top. Mais je vais y réfléchir, dans le fond ça serait plus pratique que les variables de sessions, et une étape de confirmation/relecture ne serait pas inutile vu toutes les données qu'il y aura à rentrer

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec un tuto pour apache2.conf
    Par kevinf dans le forum Apache
    Réponses: 3
    Dernier message: 04/10/2007, 18h57
  2. [débutant] Problème avec le tuto
    Par berceker united dans le forum iReport
    Réponses: 10
    Dernier message: 28/11/2006, 13h18
  3. [CeWolf] Problème avec le tuto officiel
    Par vallica dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 19/05/2006, 17h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo