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 :

goto fait planter le script


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 407
    Par défaut goto fait planter le script
    Bonjour

    J'utilise des goto pour relancer un script s'il n'y a pas de résultats.
    Cela fonctionnait mais aujourd'hui alors que je ne me rappelle pas avoir fait une modif, la page plante. Si je supprime les goto le reste fonctionne. Je ne comprend pas ou est l'erreur. merci pour vos lumières.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    //affichage d'une vidéo aléatoire
    $req2 = "select master from films order by master desc limit 1";
    $res2 = mysql_query($req2) or die(mysql_error());
    while ($max2 = mysql_fetch_assoc($res2)) {
        $Nmax = $max2['master'];
    }
     
    cherche_N:
    if (empty($numfiche)) {
        $num = mt_rand(1, $Nmax);
        $num = round($num, -1);
    }
    else
        $num = $numfiche;
    //on ouvre le repertoire des videos
    $dossiernom = opendir('DB_videos');
     
    //on lit chaque dossier
    while ($dossier = readdir($dossiernom)) {
    //on ne traite pas les . et ..
        if (($dossier != '.') && ($dossier != '..') && ($dossier != '.DS_Store')) {
            // on ne garde que la partie M123
            preg_match('#^[A-Z][0-9]{2,}#i', $dossier, $matches);
     
    //si le N° de master du dossier est égal au N° de master de la fiche affectation du dossier video
            if ($matches[0] == 'M' . $num) {
                $dossiervideo = 'DB_videos/' . $dossier;
                $lienvideo = "./$dossiervideo";
            }
        }
    }
    if (is_dir($lienvideo)) {
        $sqlselectfilm = "SELECT *FROM films where master='$num'";
        $res3 = mysql_query($sqlselectfilm) or die(mysql_error());
        while ($film = mysql_fetch_assoc($res3)) {
            $idfilm = $film['idfilm'];
            $titre = $film['titre1'];
            $dir = opendir($dossiervideo);
            while ($file = readdir($dir)) {
                if ($file != "'.'" && $file != '..' && !is_dir($dossiervideo . '/' . $file)) {
                    $filehasard = $file;
                }
            }
            IF (strlen($titre) > 25){
                $points1 = "...";
            }
            $filmhasard = "<br><a href='affich-master.php?fiche=$idfilm' title='$titre'> M" . $num . "-" . substr($titre, 0, 25) . "$points1 </A> ";
        }
     
    }
    else
        goto cherche_N;
     
     
    derniermaster:
     
    // verification du plus grand N°
    //on ouvre le repertoire des videos
    $dossiernom2 = opendir('DB_videos');
     
    //on lit chaque dossier
    while ($lastdossier = readdir($dossiernom2)) {
    //on ne traite pas les . et ..
        if (($lastdossier != '.') && ($lastdossier != '..') && ($lastdossier != '.DS_Store')) {
            // on ne garde que la partie M123
            preg_match('#^[A-Z][0-9]{2,}#i', $lastdossier, $lefilm);
    //si le N° de master du dossier est égal au N° de master de la fiche affectation du dossier video
            if ($lefilm[0] == 'M' . $Nmax) {
                $dossiervideo2 = 'DB_videos/' . $lastdossier;
                $lienvideo2 = "./$dossiervideo2/";
            }
        }
    }
    if (is_dir($lienvideo2)) {
        $sqlselectfilm = "SELECT *FROM films where master='$Nmax'";
        $res3 = mysql_query($sqlselectfilm) or die(mysql_error());
        while ($film = mysql_fetch_assoc($res3)) {
            $idlastfilm = $film['idfilm'];
            $lasttitre = $film['titre1'];
            $dir = opendir($dossiervideo2);
            while ($lastfile = readdir($dir)) {
                if ($lastfile != "'.'" && $lastfile != '..' && !is_dir($dossiervideo . '/' . $lastfile)) {
                    $dernierfichier = $lastfile;
                }
            }
     
     
            IF (strlen($lasttitre) >= 25){
                $points2 = "...";
            }
            $dernierfilm = "<br><a href='affich-master.php?fiche=$idlastfilm'title='$lasttitre'> M" . $Nmax . "-" . substr($lasttitre, 1,25) . "$points2</A>";
        }
     
    }
    else {
        $Nmax = $Nmax - 1;
        goto derniermaster;
    }

  2. #2
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 334
    Par défaut
    du basic année 80
    merci pour la distraction matinale, c'est ma première fois (le php goto)
    goto et while ensemble

    -------------------
    ps: dsl de répondre à coté et bon courage pour ton problème.

    ------------------
    edit : sinon je vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else {
        $Nmax = $Nmax - 1;
        goto derniermaster;
    }
    ce qui me semple logique ( )

    mais ligne 50 j'ai juste
    on ne change pas un paramètre avant de remonter ? pas une boucle infinie ici ($numfiche non vide) ?

    suis pas fort en goto suis peut-être complètement à coté

    -------------------------------------
    edit :
    il aurait été plus simple de débuter par un
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * from film order BY rand() limit 1
    puis d'aller chercher le film

  3. #3
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    J'utilise des goto
    ( Un exercice de style ? )

  4. #4
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 407
    Par défaut
    bon je vois que les goto ça ne semble pas plaire.
    j'avais trouvé ça très pratique pour faire ce que je voulais.
    C'est implanté depuis php 5,3.
    Je veux vérifier dans une base à chaque fois si un film existe en cherchant un Num au hasard, et le plus grand numéro disponible.
    il y a certainement d'autres moyens d'y arriver expliquez moi.
    il y a une base avec des fiches mais toutes n'ont pas des fichiers vidéos en face.
    Je fais donc en gros pour le plus grand numéro:
    Je recherche dans la base le dernier numéro rentré, je vérifie si le film existe à ce numéro, sinon je reviens au début en diminuant mon chiffre recherché de 1.

  5. #5
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 373
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 373
    Billets dans le blog
    17
    Par défaut
    bon je vois que les goto ça ne semble pas plaire.


    C'est implanté depuis php 5,3.
    PHP aime bien mettre des bâtons dans les roues de ses développeurs, de temps en temps (magic-quotes, register_globals) ;-)

    il y a une base avec des fiches mais toutes n'ont pas des fichiers vidéos en face.
    Je fais donc en gros pour le plus grand numéro:
    Je recherche dans la base le dernier numéro rentré, je vérifie si le film existe à ce numéro, sinon je reviens au début en diminuant mon chiffre recherché de 1
    Tu récupères tes fiches classées par "numéro" décroissant, tu boucles sur le résultat, par chaque enregistrement tu vérifies si la vidéo existe, si oui tu stoppes la boucle (while).

    Mais j'ai un doute sur ce que tu veux réellement à cause de "vérifier dans une base à chaque fois si un film existe en cherchant un Num au hasard".

  6. #6
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 407
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Mais j'ai un doute sur ce que tu veux réellement à cause de "vérifier dans une base à chaque fois si un film existe en cherchant un Num au hasard".
    ben ça j'ai réussit avec des goto
    et j'ai un autre script qui vérifie le + grand N° rentré, mais là les goto ne le font pas
    sur mon MAMP
    je vais donc revoir ça.

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 334
    Par défaut
    Ajoute dans ta table films une colonne estPrésent(bool)
    Fait un script pour parcourir toute ta table films et remplir si film present ou non. (a utiliser qu'une fois)
    Ajoute ce champ dans les fiches édition-création du film.

    Pour ton script ici :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // pour film aleatoire
    SELECT * FROM film where present=1 ORDER BY rand() LIMIT 1
    // pour dernier
    SELECT * FROM film where present=1 ORDER BY max(id) DESC LIMIT 1

    + de boucles (goto) et + de boucle de controle sur disque dur

  8. #8
    Membre éclairé

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 407
    Par défaut
    je reviens avec mes goto, désolé.

    j'ai utilisé les conseils précédents pour le dernier fichier pas de soucis ça fonctionne.
    Mais pour le
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM film WHERE present=1 ORDER BY rand() LIMIT 1
    J'ai une erreur mysql
    Incorrect key file for table '/tmp/#sql_6a3_0.MYI'; try to repair it
    qui après avoir fouillé un peu cela semble être la conséquence d'un manque de place sur le disque pour créer la table temporaire.
    J'ai donc remis une couche avec mes goto
    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
    //affichage video au hasard
    retour:
    $num = mt_rand(1, $last);
        $num = round($num, -1);
    $sqlrand = "SELECT * FROM films WHERE master=$num";
    $result = mysql_query($sqlrand) OR DIE("ERREUR fichier rand " . mysql_error());
    $randarray=mysql_fetch_array($result);
    if($randarray['present']==1){
    }
     else {
        goto retour;
    }
     
    $idrand = $randarray['idfilm'];
    $rand = $randarray['master'];
    $titrerand = $randarray['titre1'];
    $nomrand = mysql_real_escape_string($randarray['nom_dossier']);
    En local sur MAMP ça fonctionne sur le serveur, ça a fonctionné une fois et depuis plus rien
    page blanche

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 334
    Par défaut
    Je te saute ta boucle avec plaisir, mais je doute que cela va résoudre ton problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //affichage video au hasard
    do {
        $num = mt_rand(1, $last);
        $num = round($num); // -1 ???? pas ca le plantage ??????
        $sqlrand = "SELECT * FROM films WHERE master=$num AND present=1";
        $result = mysql_query($sqlrand) OR DIE("ERREUR fichier rand " . mysql_error());
    } while (mysql_num_rows($result)<1);
    $randarray=mysql_fetch_array($result);

  10. #10
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 421
    Par défaut
    Citation Envoyé par rvm31 Voir le message
    je reviens avec mes goto, désolé.

    j'ai utilisé les conseils précédents pour le dernier fichier pas de soucis ça fonctionne.
    Mais pour le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM film WHERE present=1 ORDER BY rand() LIMIT 1
    J'ai une erreur mysql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Incorrect key file for table '/tmp/#sql_6a3_0.MYI'; try to repair it
    qui après avoir fouillé un peu cela semble être la conséquence d'un manque de place sur le disque pour créer la table temporaire
    Ta table est énorme ? Bah tu peux bien faire une recherche aléatoire autrement, par exemple en étoffant ta clause where de quelques AND dont la valeur serait pseudo aléatoire et éventuellement définis par une précédente requête, enfin un truc dans le genre (faudrait connaître les champs de ta table pour dire si c'est facilement réalisable).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/07/2010, 10h49
  2. include qui fait planter un script
    Par DiverSIG dans le forum Langage
    Réponses: 9
    Dernier message: 27/08/2009, 14h03
  3. [AJAX] Script qui fait planter IE6
    Par bassimgouzi dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 15/08/2008, 19h19
  4. Réponses: 12
    Dernier message: 16/03/2004, 14h21
  5. fonction qui en fait planter une autre
    Par ickis dans le forum C
    Réponses: 5
    Dernier message: 18/08/2003, 21h33

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