Test Foreach qui plante

Résolu/Fermé
kakesinfo Messages postés 34 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 9 novembre 2015 - Modifié par kakesinfo le 10/02/2015 à 20:25
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 8 avril 2015 à 20:19
Bonjour, J'aimerai savoir si c possible de detecter si le Foreach plante est donc rediriger vers une autre page ? Vous pourrai voir si dessous un test de ma part qui ne fonctionne pas :). Merci de votre reponse.

        try{

            foreach ($db->getPDO()->query('SELECT * FROM  musiques WHERE slug LIKE "' . $r . '%" OR slug LIKE "%' . $r . '" OR slug LIKE "%' . $r . '"') as $data) {

                //$player->addPoints($data->points);
                //header('Location:music/' . rand(1, 23));
                die('Sa marche !');

            }

        } catch(Exception $e){

          die('Sa marche pas!');
          //header('Location:/');

        }


A voir également:

2 réponses

kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
12 févr. 2015 à 16:21
essaye de sortir la rqt sql dans une var :
try{
$datas = $db->getPDO()->query('SELECT * FROM musiques WHERE slug LIKE "' . $r . '%" OR slug LIKE "%' . $r . '" OR slug LIKE "%' . $r . '"');
foreach ($datas as $data) {

//$player->addPoints($data->points);
//header('Location:music/' . rand(1, 23));
die('Sa marche !');

}

} catch(Exception $e){

die('Sa marche pas!');
//header('Location:/');

}

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 févr. 2015 à 16:47
Bonjour,

+1 pour la réponse proposée par notre amis sautilleur ^^

J'ajouterai qu'en plus... sorts également la requête de son execution... cela permet d'en faire un debug en cas de besoin et de la tester en direct dans la BDD pour s'assurer qu'elle est bonne...

Voici à quoi cela pourrait ressembler.

Par contre.... à quoi correspond ta fonction getPDO() ?


try{

//n'hésites pas à faire des retours à la ligne
// cela rend la requête plus lisible.
$sql = 'SELECT * 
          FROM  musiques 
          WHERE slug LIKE "' . $r . '%" 
                 OR slug LIKE "%' . $r . '" 
                 OR slug LIKE "%' . $r . '" ';

 $db->prepare($sql);
 $db->execute($sql);

/* Récupération de toutes les lignes d'un jeu de résultats */
$datas = $db->fetchAll();

foreach ($datas as $data) {
  //$player->addPoints($data->points);
  //header('Location:music/' . rand(1, 23));
  die('Sa marche !');
 }

 } catch(Exception $e){
      die('Ca ne marche pas!');
      //header('Location:/');
  }

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
Modifié par jordane45 le 12/02/2015 à 16:49
Sans oublier que ton WHERE .. pourrait s'écrire en une seule ligne non ?
 WHERE slug LIKE "%' . $r . '%" ';


Au lieu de
 WHERE slug LIKE "' . $r . '%" 
                 OR slug LIKE "%' . $r . '" 
                 OR slug LIKE "%' . $r . '" ';
0
kakesinfo Messages postés 34 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 9 novembre 2015
Modifié par jordane45 le 8/04/2015 à 20:19
Merci a tous d'avoir répondu et donc voici le code final qui marche:
<?php

    require 'config.php';
    require 'players.php';
    require 'database.php';
    require 'others.php';

    $db = new Database(DB, HOST, USERNAME, PASSWORD);
    $other = new Others();

    if(isset($_GET['m']) && isset($_GET['r'])) {

        $player = new Player($_COOKIE["MF_Pseudo"], $_COOKIE["MF_Points"], $_COOKIE['MF_Ip'], $_COOKIE['MF_Lives']);

        $caractere = array(" ", "\t", "\n", "\r", "\0", "\x0B", "\xA0", "+");
        $m = $_GET['m'];
        $r = strtolower($_GET['r']);
        $r = str_replace($caractere, array(), $r);

        $req = $db->getPDO()->query('SELECT * FROM  musiques WHERE id='.$m);
        $data = $req->fetch(PDO::FETCH_ASSOC);

        if(!is_null($data['points'])){

            echo '1';

            if($other->contains($data['slug'], $r)){

                $player->addPoints($data['points']);
                $player->addLives(1);
                header('Location:music/' . mt_rand(1, 23));
                echo '1-1';

            }else{

                $player->removeLives(1);
                header('Location:music/' . mt_rand(1, 23));
                echo '1-2';

            }

        }else{

            header('Location:music/' . mt_rand(1, 23));
            echo '2';

        }

    }


EDIT : Ajout du langage dans les balises de code.
Explications disponibles ici :
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
8 avril 2015 à 20:19
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
0