Test Foreach qui plante

Résolu
kakesinfo Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   -
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   Statut Membre Dernière intervention   2
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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