while ou foreach, je comprend pas trop

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : while ou foreach, je comprend pas trop

Re: while ou foreach, je comprend pas trop

par juliette » 20 juin 2012, 17:55

Bon, merci a vous deux, tout est rentrer dans l'ordre, en fait, j'avais plusieurs soucis...
la config du serveur mais aussi la modélisation de la base de données, grace a vos poste, j'ai encore apris beaucoup, merci :D

Re: while ou foreach, je comprend pas trop

par Mazarini » 05 juin 2012, 14:06

Array <= je m'attendait à 'boucle'
bool(false) <= normal, tu es en fin de boucle donc dernier fetch return false
array(1) { [0]=> string(1) "2" } <= tu as 1 valeur dans le $tab est ce normal ?

je ne comprends pas la ligne :
$tab[] = $donnees['id_gp']['gp_id_circuit'];
normalement on a $donnees['id_gp'] et $donnees['gp_id_circuit']

Ajoute ces lignes en début de script :
ini_set('display_errors', 1); // fait l'affichage des erreurs à l'écran et pas uniquement dans la log
error_reporting(E_ALL | E_STRICT); // reporte toutes les erreurs

Re: while ou foreach, je comprend pas trop

par juliette » 05 juin 2012, 13:51

du coup, j'ai mis comme echo:
<?php echo $donnees['id_gp'];?>
et j'obtiens:
25
bool(false)
array(1) { [0]=> string(2) "25" }

mais je crois que j'ai pas bien compris les tableaux, je n'arrive pas a y mettre d'autre infos...
je vais de ce pas faire d'autre recherches, merci...

Re: while ou foreach, je comprend pas trop

par juliette » 05 juin 2012, 13:39

alors, je pense avoir quelque réponse:

le site est sur le serveur d'un copain qu'il a paramétrer lui même et je trouve dans le php ini:
error_append_string no value no value
error_log no value no value
error_prepend_string no value no value
error_reporting 32767 22527
exit_on_timeout Off Off

ce qui explique certainement le manque d'affichage que tu signale xTG, bizarrement je me suis souvent dit sur ce projet que mon pc fonctionner mal: je comprend mieux...

maintenant, j'en suis la:
-ma requête fonctionne parfaitement dans phpmyadmin
-j'ai fait un echo dans le while et il s'affiche bien
-pour les difference pdo et mysql xTG, je ne pense pas que ce soit ca, c'est une erreur suite a un teste mais je met bien $reponse->fetch, tu peux le voir dans mon 1er code php...

désormais ce code:
<?php
include('config.php');

try
{

    $bdd = new PDO('mysql:host='.$hote.';dbname='.$bdd, $utilisateur, $passe, $pdo_options);
       
}
    catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
    
    $reponse = $bdd->query('SELECT 
                                gp.id_gp          AS    id_gp,
                                gp.id_circuit     AS    gp_id_circuit,

                                ci.id_circuit     AS    id_circuit,
                                ci.circuit        AS    circuit

                            FROM grand_prix AS gp

                            JOIN circuit ci    ON   gp.id_circuit = ci.id_circuit
                           WHERE id_gp = 25');

    $tab = array();
    
    while($donnees =  $reponse->fetch())
    {
      //...
      $tab[] = $donnees['id_gp']['gp_id_circuit'];
      echo 'boucle';
    }
    
    
$reponse->closeCursor();

echo'<br />';
var_dump($donnees);
echo'<br />';
var_dump($tab);

?>
affiche:
Array
bool(false)
array(1) { [0]=> string(1) "2" }

voila en gros...

Re: while ou foreach, je comprend pas trop

par Mazarini » 05 juin 2012, 08:41

Bonjour,

Ajoute un echo dans la boucle pour vérifier que tu passe bien dedans.
Il faut tester ta requete directement dans phpmyadmin pour la mettre au point

Edit :
- il faudrait remplacer mysql_fetch_assoc($reponse) par $reponse->fetch()
- il faudrait aussi voir le report des erreurs dans php.ini ou ajouter :
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT);

Re: while ou foreach, je comprend pas trop

par xTG » 05 juin 2012, 08:35

Ah bah... Tu commences avec PDO, puis tu continues avec mysql_xxxx ...
M'étonnes vraiment que ça ne t'affiche pas d'erreur...

Re: while ou foreach, je comprend pas trop

par juliette » 04 juin 2012, 23:17

Je ne vois vraiment pas, ce qui m'arrive, ya rien a faire #-o

Re: while ou foreach, je comprend pas trop

par xTG » 04 juin 2012, 20:23

Pas de raison dans ce cas que $tab soit vide. ;)

Re: while ou foreach, je comprend pas trop

par juliette » 04 juin 2012, 19:31

dans le 1er code php de mon 1er post, la requête envois bien des informations et je n'i ai pas touché, donc je pense que oui !!!

Re: while ou foreach, je comprend pas trop

par xTG » 04 juin 2012, 19:16

Ta requête renvoie-t-elle quelque chose ? :roll:
Car si l'array est vide c'est que la boucle while ne se fait pas.

Re: while ou foreach, je comprend pas trop

par juliette » 04 juin 2012, 17:38

pas sur d'avoir compris mais j'en arrive la:
<?php
include('config.php');

try
{

    $bdd = new PDO('mysql:host='.$hote.';dbname='.$nom_bd, $utilisateur, $passe, $pdo_options);
       
}
    catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
    $tab = array();
    $reponse = $bdd->query('SELECT 
                                gp.id_gp          AS    id_gp,
                                gp.id_circuit     AS    gp_id_circuit,


                                ci.id_circuit     AS    id_circuit,
                                ci.circuit        AS    circuit

                            FROM grand_prix AS gp

                            LEFT OUTER JOIN circuit ci    ON   gp.id_circuit = ci.id_circuit
                           ');

    
    
    while($donnees =  mysql_fetch_assoc($reponse))
    {
      //...
      $tab[] = $donnees['id_gp'];
      // ...
    }
$reponse->closeCursor();

var_dump($tab);
?>
bien sur ca ne marche pas, var_dump me donne: array(0) { }

Re: while ou foreach, je comprend pas trop

par juliette » 04 juin 2012, 16:55

désolé mais je ne suis pas trop, connais tu un tuto ressemblant à cas ?

Re: while ou foreach, je comprend pas trop

par xTG » 04 juin 2012, 16:00

En effet tu cernes bien le problème, la portée des variables.
Si tu veux récupérer une donnée de $data il faut la récupérer dans la boucle.
A noter que le while va itérer X fois, donc il stockera à chaque fois la valeur courante.
Donc si tu souhaites ne pas avoir uniquement la dernière itération il faut stocker les valeurs dans un tableau.
$monTableau = array();
while($data = ...){
  //...
  $monTableau[] = $data['valeur'];
  // ...
}
var_dump($monTableau);

while ou foreach, je comprend pas trop

par juliette » 04 juin 2012, 15:01

voila, j'ai un formulaire pour enregistrer dans une table el1 des liens vers des vidéos de grand prix,
j'ai une bdd qui a plusieurs tables dont el1, grand_prix et circuit:
--
-- Structure de la table `grand_prix`
--

CREATE TABLE IF NOT EXISTS `grand_prix` (
  `id_gp` int(11) NOT NULL AUTO_INCREMENT,
  `member_id` int(11) NOT NULL,
  `id_pays` int(11) NOT NULL,
  `id_ville` int(11) NOT NULL,
  `id_circuit` int(11) NOT NULL,
  PRIMARY KEY (`id_gp`),
  KEY `fk_grand_prix_members` (`member_id`),
  KEY `fk_grand_prix_pays1` (`id_pays`),
  KEY `fk_grand_prix_ville1` (`id_ville`),
  KEY `fk_grand_prix_circuit1` (`id_circuit`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;

--
-- Structure de la table `circuit`
--

CREATE TABLE IF NOT EXISTS `circuit` (
  `id_circuit` int(11) NOT NULL AUTO_INCREMENT,
  `circuit` varchar(45) NOT NULL,
  PRIMARY KEY (`id_circuit`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
j'ai fait une tentative de jointure, je pense qu'elle fonctionne mais j'affiche avec un while et je crois commencer a comprendre qu'il faut un foreach !!
voici mon code avec 2 ou 3 explications:
<form action="el1_exec.php" method="post">
    <fieldset>
        <legend>Uploade</legend>


       <div>
            <label>Grand Prix</label>
            <div>
                <select name="id_gp"> 
                    <?php
                    try
                    {
                     // connexion bdd

                     }
                    catch(Exception $e)
                    {
                        die('Erreur : '.$e->getMessage());
                    }
                    
                    // jointure pour mes 2 tables: grand prix (gp) et circuit (ci)
                    $reponse = $bdd->query('SELECT 
                                                gp.id_gp          AS    id_gp,
                                                gp.id_circuit     AS    gp_id_circuit,


                                                ci.id_circuit     AS    id_circuit,
                                                ci.circuit        AS    circuit

                                            FROM grand_prix AS gp

                                            LEFT OUTER JOIN circuit ci    ON   gp.id_circuit = ci.id_circuit
                                           ');


                    while ($donnees = $reponse->fetch())

                    {
                    ?>
                        <!-- select html pour avoir l'id du grand prix comme valeur pour la bdd
                             en affichant le nom du circuit, ca ca marche bien -->
                        <option value="<?php echo $donnees['id_gp']; ?>" name="id_gp">
                            <!-- ici j'ai bien le nom du circuit dans donc je pense que la jointure fonctionne bien -->
                            <?php echo stripcslashes($donnees['circuit']); ?>
                        </option>
                    <?php
                    }
                    $reponse->closeCursor();
                    
                    // tentative de récupération de l'id_circuit mais ne fnctionne pas !!!!
                    // je pense que c'est parce que je ne suis pas dans la boucle
                    // j'ai voulu déclarer $circuit pour l'input citué plus bas.
                    $circuit = $donnees['id_circuit'];


                    ?>

                </select>
            </div>
        </div> 

        <div>
            <label>Essai 1</label>
            <div>                      
                <!-- l'input suivant ne fonctionne pas non plus et je n'enregistre pas l'id du circuit en bdd 
                     encore une fois je pense que la raison est la boucle -->
                <input type="hidden" name="id_circuit" value="<?php echo $circuit ?>"/>
                <input type="submit" class="btn btn-inverse" name="envoyer"  value="Envoyer" />
            </div>
        </div>                        
    </fieldset>
</form>
et je veux enregistrer dans cette table:
--
-- Structure de la table `el1`
--

CREATE TABLE IF NOT EXISTS `el1` (
  `id_el1` int(11) NOT NULL AUTO_INCREMENT,
  `lien` varchar(255) COLLATE utf8_bin DEFAULT NULL,
  `id_gp` int(11) NOT NULL,
  `id_circuit` int(11) NOT NULL,
  `member_id` int(11) NOT NULL,
  PRIMARY KEY (`id_el1`),
  KEY `fk_el1_grand_prix1` (`id_gp`),
  KEY `fk_el1_members1` (`member_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=18 ;
je pense donc que mon soucis est la boucle, j'ai lu sur le site du zéro mais j’avoue que j'ai un peut de mal a comprendre la mise en place de la boucle foreach, si quelqu'un peut m'aidé a mieux comprendre, je l'en remercie d'avance...
merci, a plus.