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 :

portée des variables


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut portée des variables
    Bonsoir,

    oui un problème de débutant !

    Je crée une variable que je compte utiliser plus tard dans la même fonction mais la variable n'a pas gardé sa valeur. Comment fait faire ?

    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
     
    if (isset($_POST['submitModif']))
    {
    	$result = checkData();
     
    	if (isset($result['check'])) 
    	{
    		saveData($result,$id);
    	}
    	else
    	{
    		if ($result['empty']) echo "un champ est vide, veuillez corriger<br/>";
    		else echo '<p>Des erreurs se sont produites, veuillez les corriger.</p>';
     
    		displayForm($result);
    	}
    }
    else
    {
    	if (isset($_POST['event']))
    	{
    		$id=$result = getData(intval($_POST['event']));
     
    		displayForm($result);
    	}
    	else
    	{
    		echo 'Une erreur s\'est produite.';var_dump($_POST);
    	}	
    }
    Ligne 22, je crée la variable $id que je passe ligne 8 à la fonction saveData mais la valeur de $id n'est plus là... Comment la maintenir ? J'ai essayé de la déclarer en global, mais ça marche pas.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    As-tu oublié que le code s'execute de haut en bas ?

    Sans avoir plus d'informations sur l'organisation de tes formulaires c'est difficile de te répondre sur la bonne manière de traiter ça.
    Visiblement tu as deux formulaires, un avec "submitModif" et un autre avec "event" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    OK ça s'exécute de haut en bas mais comme $id est produite dans le else alors que son utilisation est dans le if, il est clair qu'elle ne sera pas utilisée lors de la même itération d'où la nécessité de la maintenir.
    Je n'ai pas donné de détail du code pour ne pas alourdir la présentation, mais oui il y a 2 formulaires.
    Le premier qui produit $_POST['event'] est dans le fichier select-event.php (c'est le select qui produit $_POST['event']) :
    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
    <?php	global $bdd;
     
    	$sql = '
    		SELECT *
    		FROM calendar_event
    		ORDER BY event_date
    	';
     
    	$sql = $bdd->prepare($sql);
    	$sql->execute();
     
    	$result = $sql->fetchAll(PDO::FETCH_ASSOC);//var_dump($result);?>
    		<form id="form-add-event" method="post" action="modif-event.php">
    	<p>
    		<label for="event">Événement : </label>
    		<select id="event" name="event" >
    		<?php
    	for ($i = 0; $i < count($result); $i++)
    	{?>
    		<option value="<?php echo $result[$i]['event_id'];?>">
    		<?php echo $result[$i]['event_date'].' - '.$result[$i]['event_time'].' --- '.$result[$i]['event_name'];?>
    		</option>
    	<?php } ?>		
    			</select></p>
    	<p><input type="submit" name="submitChoice" value="Choisir l'événement"/></p>
    	</form>

    et le second qui produit la variable $_POST['submitModif'] est dans la fonction displayForm appelée ligne 24 (ici c'est le fichier modif-event.php) :
    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
    <?php
    function displayForm($result = array())
    {//echo "addevent 231<br/>";
    	$datepicker = isset($result['datepicker']) ? $result['datepicker'] : '';
     
    	$hour = isset($result['hour']) ? $result['hour'] : '';
    	$minute = isset($result['minute']) ? $result['minute'] : '';
     
    	$result['event_name'] = isset($result['event_name']) ? $result['event_name'] : '';
    	$result['event_comment'] = isset($result['event_comment']) ? $result['event_comment'] : '';	
    ?>	
    	<form id="form-add-event" method="post" action="<?php //echo $_SERVER['PHP_SELF'];?>">
    		<p>Date de début : <input type="text" id="datepickerdeb" name="datepickerdeb" value="<?php if (isset($result['datepickerdeb_form'])) echo $result['datepickerdeb_form'];?>"/></p>
    		<p>Date de fin : <input type="text" id="datepickerfin" name="datepickerfin" value="<?php if (isset($result['datepickerfin_form'])) echo $result['datepickerfin_form'];?>"/></p>
    	<p>
    		<label for="hour">Heure : </label>
    		<select name="hour">
    		<?php for ($i=0;$i<24;$i++) {
    			echo '<option value="'.$i.'"'; if ($hour==$i) {echo ' selected="selected"';}; echo '>' .$i.'</option>';
    		}
    		?>
    		</select>
     
    		<label for="minute">Minute : </label>
    		<select name="minute" value="<?php echo $minute;?>">
    		<?php for ($i=0;$i<60;$i++) {
    			echo '<option value="'.$i.'"'; if ($minute==$i) {echo ' selected="selected"';}; echo '>' .$i.'</option>';
    		}
    		?>
    		</select><br/>		
    		ou l'événement dure toute la journée :<input type="radio" id="allday" name="allday" size="1" <?php if (isset($_POST["allday"])) { if ($_POST["allday"] == "on") { echo "checked"; } };?> />
     
    	</p>
    	<p><label for="name">Nom : </label><input type="text" id="name" name="name" value="<?php echo $result['event_name']?>" /></p>
    	<p><label for="comment">commentaire : </label><textarea id="comment" name="comment2" cols="30" rows="5"><?php echo $result['event_comment']?></textarea></p>
    	<p><input type="submit" name="submitModif" value="Ajouter l'événement"/></p>
    	<p><INPUT TYPE='button' value='Annuler' onclick="location.href='http://localhost/cal/index.php'"</p>
    	</form>
    <?php }
     
    ?>
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,

    encore un monstre du docteur FrankenlaurentSc...

    Il faut faire preuve de plus de rigueur et de logique.

    Et vouloir toujours factoriser au maximum le code n'est pas forcément la meilleure méthode, ni la plus simple.

    Commence par traiter les formulaires SÉPARÉMENT.
    ENSUITE seulement, tu verras ce qu'il est possible de factoriser, et dans QUEL ORDRE traiter les données.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    il est clair que
    Non il n'est pas clair du tout que ...

    La logique veut évidemment que si l'action B a besoin de données produites par l'action A, on traite d'abord l'action A puis l'action B, on ne fait pas un retour de boucle de B vers A.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		<?php
    	for ($i = 0; $i < count($result); $i++)
    	{?>
    		<option value="<?php echo $result[$i]['event_id'];?>">
    		<?php echo $result[$i]['event_date'].' - '.$result[$i]['event_time'].' --- '.$result[$i]['event_name'];?>
    		</option>
    	<?php } ?>
    Ca fait belle lurette qu'on utilise plutôt la syntaxe foreach() ici...


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	$result = checkData();
     
    ...
     
    	$id=$result = getData(intval($_POST['event']));
     
    ...

    Je pense aussi qu'utiliser $result à toutes les sauces ne peut que générer de la confusion...

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    OK ça s'exécute de haut en bas mais comme $id est produite dans le else alors que son utilisation est dans le if, il est clair qu'elle ne sera pas utilisée lors de la même itération d'où la nécessité de la maintenir.
    Et donc, as-tu un bout de code quelque part qui maintient cette valeur ?

    La première chose qui m'a été dite quand on m'a initié à PHP : "PHP n'a pas de mémoire !"
    Dans ton code, si ça passe par le else pour valoriser $id, ça ne peut pas ensuite repasser par le script en ayant conservé la valeur de $id. Sauf peut-être si tu require le fichier plusieurs fois (donc pas require_once) mais c'est bizarre comme manière de faire !

    Je crois comprendre que, puisque tu considères deux valeurs de $_POST, tu repasses du côté de l'utilisateur, non ? Un petit <input type="hidden" pourrait être utile, par exemple, pour conserver la valeur de $id entre le premier passage du code par else et le second par if.

    Mais pas sûr d'avoir compris ton code.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 385
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour vos retours mais pas possibilité de les prendre en compte avant mardi soir ou mercredi...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/02/2005, 09h05
  2. [FLASH MX] Portée des variables ???
    Par mic79 dans le forum Flash
    Réponses: 2
    Dernier message: 08/02/2005, 10h21
  3. Portée des variables vbscript vers ASP
    Par Immobilis dans le forum ASP
    Réponses: 3
    Dernier message: 03/11/2004, 10h14
  4. [XSL]Problème de portée des variables
    Par djulesp dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/09/2004, 10h34
  5. [Portée] portée des variables
    Par parksto dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2004, 21h05

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