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 :

Un foreach qui ne tient pas compte de toutes les variables


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Un foreach qui ne tient pas compte de toutes les variables
    Bonsoir à tous,

    Je suis devant un problème où je n'ai absolument aucune explication :

    J'ai un form tout simple :

    Code : 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
    <form name="maj_ldt" method="post" action="patient.php">
          <ul id="sortable">
        <?php
            $i=0;
    	$sql =  "SELECT * FROM neuro_event WHERE patient_id = '".$_SESSION['dmu']."' ORDER BY position ASC";
    	echo $sql;
    	$req = mysql_query($sql) or die(mysql_error());
    	while($d = mysql_fetch_assoc($req)){
    	  $i++;
    	?>
    	<li <?php echo 'id="exam_'.$i.'"'; ?> >
    	  <span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
          <?php $examen = explode("_",$d['content_type_id']); ?>
    	    <input type="hidden" name="category[<?php echo $i; ?>][id]" value="<?php echo $d["id"]; ?>"/>
    	    <input type="hidden" name="category[<?php echo $i; ?>][patient_id]" value="<?php echo $d["patient_id"]; ?>"/>
            <input type="text" name="category[<?php echo $i; ?>][event_date]" disabled="disabled" value="<?php echo $d["event_date"]; ?>"/>
            <input type="hidden" name="category[<?php echo $i; ?>][content_type_id]" value="<?php echo $d["content_type_id"]; ?>"/>
    	    <input type="hidden" class="positionInput" name="category[<?php echo $i; ?>][position]" value="<?php echo $d["position"]; ?>"/>
    	</li>
    	<?php
    	}
        ?>
          </ul>
        <input type="submit" value="Enregistrer"/>
        </form>
    Qui fait appel à la même page pour être traité avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if(!empty($_POST)){
        $cat = $_POST["category"];
        foreach( $cat as $c){
    	extract($c);
    	$sql = "UPDATE neuro_event SET patient_id='$patient_id', content_type_id = '$content_type_id', event_date = '$event_date', position=$position WHERE id=$id";
    	echo $sql;
    	//mysql_query($sql) or die(mysql_error());
        }
    }
    Le foreach ne reçoit pas un champ

    celui-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <input type="text" name="category[<?php echo $i; ?>][event_date]" disabled="disabled" value="<?php echo $d["event_date"]; ?>"/>
    J'ai cet avertissement :

    Notice: Undefined variable: event_date in C:\Program Files (x86)\EasyPHP-5.3.6.0\www\Neuro\patient.php on line 11
    Si je mets un simple var_dump, j'ai ceci :

    array
    'category' =>
    array
    2 =>
    array
    'id' => string '178' (length=3)
    'patient_id' => string '20010102FG02' (length=12)
    'content_type_id' => string 'irm_20010102FG02_178' (length=20)
    'position' => string '1' (length=1)
    1 =>
    array
    'id' => string '170' (length=3)
    'patient_id' => string '20010102FG02' (length=12)
    'content_type_id' => string 'irm_20010102FG02_170' (length=20)
    'position' => string '1' (length=1)
    J'ai vérifié avec Firebug, l'input event_date est généré sur la page HTML

    là, je sèche... auriez-vous une idée ?

    Merci d'avance.

    beegees

  2. #2
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Décembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Décembre 2008
    Messages : 106
    Points : 152
    Points
    152
    Par défaut
    utilise readonly="readonly" au lieu de disabled="disabled"

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lucas74 Voir le message
    utilise readonly="readonly" au lieu de disabled="disabled"
    ++ (testé et approuvé !)
    Je ne connaissais pas cette façon de faire. Je suis donc aller voir le manuel pour extract(), et j'ai vu les Avertissements :
    N'utilisez pas extract() sur des données inconnues, comme les données utilisateurs (i.e. $_GET, $_FILES, etc.). [...]
    Cette façon de faire n'est pas recommandée et est uniquement documentée ici pour bien comprendre le comportement. [...].
    Qui plus est, la requête n'est ABSOLUMENT PAS protégée contre les injections SQL ! -> mysql_real_escape_string()

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/03/2012, 11h11
  2. Réponses: 15
    Dernier message: 09/08/2009, 19h56
  3. Réponses: 9
    Dernier message: 18/03/2004, 12h20

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