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 :

Incrémentation et boucle du script [PHP 7]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Incrémentation et boucle du script
    Bonjour,

    j'ai un script qui parse des pages qui fonctionne très bien, le seul problème c'est que je voudrais automatiser le script pour incrémenter l'url et le numéro de page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $html = new simple_html_dom();
    $html->load_file('https://fqdn/'.$i.'/?sort_by=rating&items_per_page=60');
    je n'arrive pas à exécuter le script pour incrémenter le $i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $total_execute = 91;
    while ($i <= $total_execute) {
     
    $html = new simple_html_dom();
    $html->load_file('https://fqdn/'.$i.'/?sort_by=rating&items_per_page=60');
    ...
    Déroulement de mon script
    ...
        $i++;
    }
    Mais je n'ai uniquement que les 60 premières.
    Savez vous comment je pourrai le boucler jusqu'à mon $total_execute ?
    Merci

  2. #2
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Je ne sais pas ce que renvoie comment fonctionne la classe simple_html_dom mais en gros tu veux concaténer le résultat, non ? Là à chaque boucle, $html est écrasé...

    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
    $total_execute = 91;
    $i = 0; // oubli de copier ou il n'est pas de le code original ?
    $all_html = ''; // chaîne vide au départ
     
    while ($i <= $total_execute) {
     
        $html = new simple_html_dom();
        $html->load_file('https://fqdn/'.$i.'/?sort_by=rating&items_per_page=60');
     
        // Déroulement de mon script
     
        $all_html .= $html->getText(); // ou getHtml() ou concat() ou je sais pas quelle autre méthode de simple_html_dom()
        $i++;
    }
     
    // ici $all_html contient toutes les pages

    Si tu peux publier le code de simple_html_dom ou mettre un lien vers une doc, je pourrais donner une réponse plus assurée =)
    Sinon j'ajouterais qu'une boucle for traditionnelle a une sémantique plus forte pour une itération sur un certain nombre d'éléments (for($i = 0 ; $i <= $total_execute ; $i++)), mais ça devrait bien marcher avec while aussi.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    J'ai également testé avec la boucle for mais sans succès.

    https://simplehtmldom.sourceforge.io/ simple_html_dom
    En gros il faudrait qu'à chaque tour j'incrémente mon numéro de page pour parser celle-ci mais ca ne fonctionne pas de cette façon apparemment.

  4. #4
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Ton incrémentation me semble correcte (tu peux vérifier en faisant un echo "$i "; dans la boucle par exemple.
    Le code que je t'ai proposé me paraît bon, alors. Juste remplacer $html->getText(); par $html->plaintext;.

    Si tu veux reprendre le html dans le parser pour traiter le DOM, tu peux toujours faire $dom = str_get_html($all_html); après la boucle.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    J'ai également fait le echo "$i "; dans la boucle, au début il m'affiche mon numéro de page: 2 et tout à la fin du parse 61 et je comprends pas d'ou sort le nombre.
    Mon code complet :


    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    <?php
     
    require_once 'simple_html_dom.php';
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; /* on définie les options d'erreurs que l'on souhaite */
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=Acteurs;charset=utf8", '', '', $pdo_options);
     
    $total_execute = 91;
     
    for($i = 2 ; $i <= $total_execute ; $i++){
     
    $url = 'https://fqdn/'.$i'./?sort_by=rating&items_per_page=98';
     
    $html = new simple_html_dom();
    $html->load_file($url);
     
     
    	function remplace_les_mois($phrase){
     
    		$origine = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November","December");
    		$remplace = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre");
     
    		$newphrase = str_replace($origine, $remplace, $phrase);
    		return $newphrase;
    	}
     
     
    	function remplace_les_cheveux($phrase){
     
    		$origine = array("Bald", "Brown", "Bleached", "Blond", "Black", "Grey", "Red");
    		$remplace = array("Chauve", "Brune", "Blanc", "Blonde", "Noir", "Gris", "Rousse");
     
    		$newveuch = str_replace($origine, $remplace, $phrase);
    		return $newveuch;
    	}
     
    	function remplace_nationalite($phrase){
     
    		$origine = array("Argentinian", "Australian", "Austrian", " Belarussian", " Belgian", "Brazilian ", "Canadian", "Costa Rican", "Czech", "Danish", "Estonian", "Finnish", "French", "German", "American", " Hungarian", "Indonesian", "Japanese");
    		$remplace = array("Argentine", "Australienne", "Autrichienne", "Biélorusse", "Belge", "Brésilienne", "Canadienne", "Costaricaine", "Tchèque", "Danoise", "Estonienne", "Finlandaise", "Française", "Allemande", "Américaine", "Hongroise", "Indonésienne", "Japonaise");
     
    		$newnation = str_replace($origine, $remplace, $phrase);
    		return $newnation;
    	}
    	//} 
    		$i=0;
    		foreach($html->find('.models-list-item') as $article) {
     
    			$item['nom'] = $html->find('p.title', $i)->plaintext;
    			$item['date de naissance'] = $html->find('ul.model-info-list', $i)->children(0)->plaintext;
    			$item['Lieu de naissance'] = $html->find('ul.model-info-list', $i)->children(1)->plaintext;
    			$item['De'] = $html->find('ul.model-info-list', $i)->children(2)->plaintext;
    			$item['Genre'] = $html->find('ul.model-info-list', $i)->children(3)->plaintext;
    			$item['Nationalité'] = $html->find('ul.model-info-list', $i)->children(4)->plaintext;
    			$item['Cheveux'] = $html->find('ul.model-info-list', $i)->children(5)->plaintext;
    			$item['infos'] = $html->find('ul.model-info-list', $i)->children(6)->plaintext;
    			$item['photos']= $html->find('img.thumb', $i)->src;
    			$item['id'] = $html->find('a.thumb-model-link', $i)->href;
    			$articles[] = $item;
    			$i++;
     
    			$id_nom = substr($item['id'], 13);
     
    			$id_actrice = substr($item['id'], 8, 4);
    			echo $id_actrice.'</b>';
     
    			echo '<b>'.$item['nom'].'</b><br />';
    			$nom = $item['nom'];
     
    			$texte = htmlspecialchars($item['date de naissance']);
    			$date = str_replace('Birthday', 'Date de Naissance', $texte);
    			$new_date = remplace_les_mois($date);
    			echo $new_date.'<br />';
     
     
    			$texte2 = htmlspecialchars($item['Lieu de naissance']);
    			$ville = str_replace('Birthplace', 'Ville de Naissance', $texte2);
    			echo $ville.'<br />';
     
     
    			$texte3 = htmlspecialchars($item['De']);
    			$active = str_replace('Years Active', 'Active de', $texte3);
    			$actives = str_replace('-', 'à', $active);
    			echo $actives.'<br />';
     
     
    			$texte4 = htmlspecialchars($item['Genre']);
    			$Ethnicity = str_replace('Ethnicity', 'Ethnicité', $texte4);
    			echo $Ethnicity.'<br />';
     
     
    			$texte5 = htmlspecialchars($item['Nationalité']);
    			$Nationalite = str_replace('Nationality/Heritage', 'Nationalité', $texte5);
    			$newnationalite = remplace_nationalite($Nationalite);
    			echo $newnationalite.'<br />';
     
     
    			$texte6 = htmlspecialchars($item['Cheveux']);
    			$Couleurs = str_replace('Hair Color', 'Couleurs de cheveux', $texte6);
    			$newcouleurs = remplace_les_cheveux($Couleurs);
    			echo $newcouleurs.'<br />';
     
     
    			$texte7 = htmlspecialchars($item['infos']);
    			$films = str_replace('Films:', '', $texte7);
     
    			$film = 'Films: <a href="http://fqdn/search/?q='.$id_nom.'">'.$films.'</a><br />';
     
    			$photos = '<img src='.$item['photos'].' alt="'.$item['nom'].'"><br /><br />';
     
     
    			$requete = $bdd->prepare('INSERT INTO `Actrices`(`id_actrice`, `nom`, `date_de_naissance`,`de`, `ville`, `genre`, `nationalite`, `cheveux`, `infos`, `photos`) VALUES (:id_actrice, :nom, :date_de_naissance, :de, :ville, :genre, :nationalite, :cheveux, :infos, :photos)');
    	        $requete->execute(array(':id_actrice'=>$id_actrice, ':nom'=>$nom, ':date_de_naissance'=>$new_date, ':de'=>$actives, ':ville'=>$ville , ':genre'=>$Ethnicity, ':nationalite'=>$newnationalite, ':cheveux'=>$Couleurs, ':infos'=>$film, ':photos'=>$photos));
     
    		}
    }
     
    ?>

  6. #6
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Tes function, tu veux pas les déclarer en dehors de la boucle (avant), ça fait pas très propre dedans...

    Sinon tu fais un $i = 0; en plein dans la boucle avant le foreach, forcément que ça peut pas s'incrémenter ^^
    Je ne comprends même pas comment l'exécution sort de la boucle...
    Renomme l'un des deux $i ($page et $listItemIndex seraient des noms plus sémantiques).

    Pense aussi au temps d'exécution du script, il manque peut être un set_time_limit(0); (https://www.php.net/manual/fr/functi...time-limit.php) en début de script.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    les fonctions doivent être définies en dehors de toute boucle (for, foreach,...).

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut,

    faut vraiment organiser ton code autrement.
    Il y a une erreur là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $url = 'https://fqdn/'.$i'./?sort_by=rating&items_per_page=98';

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    je me suis permis de reprendre ton code, en espérant ne pas avoir oublié un truc
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?php
     
    require_once 'simple_html_dom.php';
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; /* on définie les options d'erreurs que l'on souhaite */
    $pdo = new PDO("mysql:host=127.0.0.1;dbname=Acteurs;charset=utf8", '', '', $pdo_options);
     
    $total_execute = 91;
     
    // échappement des caractères dangereux
    $hsc = function($p): string { return htmlspecialchars((string)$p, ENT_QUOTES, 'utf-8'); };
     
    $mois = [
        'Birthday' => 'Date de Naissance',
        'January' => 'Janvier',
        'February' => 'Février',
        'March' => 'Mars',
        'April' => 'Avril',
        'May' => 'Mai',
        'June' => 'Juin',
        'July' => 'Juillet',
        'August' => 'Août',
        'September' => 'Septembre',
        'October' => 'Octobre',
        'November' => 'Novembre',
        'December' => 'Décembre'
    ];
     
    $cheveux = [
        'Hair Color' => 'Couleurs de cheveux',
        'Bald' => 'Chauve',
        'Brown' => 'Brune',
        'Bleached' => 'Blanc',
        'Blond' => 'Blonde',
        'Black' => 'Noir',
        'Grey' => 'Gris',
        'Red' => 'Rouge'
    ];
     
    $nationalites = [
        'Nationality/Heritage' => 'Nationalité',
        'Argentinian' => 'Argentine',
        'Australian' => 'Australienne',
        'Austrian' => 'Autrichienne',
        'Belarussian' => 'Biélorusse',
        'Belgian' => 'Belge',
        'Brazilian ' => 'Brésilienne',
        'Canadian' => 'Canadienne',
        'Costa Rican' => 'Costaricaine',
        'Czech' => 'Tchèque',
        'Danish' => 'Danoise',
        'Estonian' => 'Estonienne',
        'Finnish' => 'Finlandaise',
        'French' => 'Française',
        'German' => 'Allemande',
        'American' => 'Américaine',
        'Hungarian' => 'Hongroise',
        'Indonesian' => 'Indonésienne',
        'Japanese' => 'Japonaise'
    ];
     
    for ($i = 2 ; $i <= $total_execute ; ++$i) {
     
        $url = "https://fqdn/{$i}/?sort_by=rating&items_per_page=98";
     
        $html = new simple_html_dom();
        $html->load_file($url);
     
        foreach($html->find('.models-list-item') as $article) {
     
            $item['nom'] = $html->find('p.title', $i)->plaintext;
            $item['date de naissance'] = $html->find('ul.model-info-list', $i)->children(0)->plaintext;
            $item['Lieu de naissance'] = $html->find('ul.model-info-list', $i)->children(1)->plaintext;
            $item['De'] = $html->find('ul.model-info-list', $i)->children(2)->plaintext;
            $item['Genre'] = $html->find('ul.model-info-list', $i)->children(3)->plaintext;
            $item['Nationalité'] = $html->find('ul.model-info-list', $i)->children(4)->plaintext;
            $item['Cheveux'] = $html->find('ul.model-info-list', $i)->children(5)->plaintext;
            $item['infos'] = $html->find('ul.model-info-list', $i)->children(6)->plaintext;
            $item['photos']= $html->find('img.thumb', $i)->src;
            $item['id'] = $html->find('a.thumb-model-link', $i)->href;
            $articles[] = $item;
            $i++;
     
            $id_nom = substr($item['id'], 13);
     
            $id_actrice = substr($item['id'], 8, 4);
            echo $hsc($id_actrice).'</b>';
     
            echo '<b>'.$hsc($item['nom']).'</b><br />';
            $nom = $item['nom'];
     
            $new_date = strtr($item['date de naissance'], $mois);
            echo $hsc($new_date).'<br>';
     
            $ville = strtr($item['Lieu de naissance'], ['Birthplace' => 'Ville de Naissance']);
            echo $hsc($ville).'<br>';
     
            $actives = strtr($item['De'], ['Years Active' => 'Active de', '-' => 'à']);
            echo $hsc($actives).'<br>';
     
            $Ethnicity = strtr($item['Genre'], ['Ethnicity' => 'Ethnicité']);
            echo $hsc($Ethnicity).'<br>';
     
            $newnationalite = strtr($item['Nationalité'], $nationalites);
            echo $hsc($newnationalite).'<br>';
     
            $newcouleurs = strtr($item['Cheveux'], $cheveux);
            echo $hsc($newcouleurs).'<br>';
     
            $film   = 'Films: <a href="http://fqdn/search/?q='.$id_nom.'">'.str_replace('Films:', '', $item['infos']).'</a><br>';
            $photos = '<img src="'.$item['photos'].'" alt="'.$item['nom'].'"><br><br>';
     
            $stmt = $pdo->prepare('INSERT INTO `Actrices`(`id_actrice`, `nom`, `date_de_naissance`,`de`, `ville`, `genre`, `nationalite`, `cheveux`, `infos`, `photos`) VALUES (:id_actrice, :nom, :date_de_naissance, :de, :ville, :genre, :nationalite, :cheveux, :infos, :photos)');
            $stmt->execute([
                ':id_actrice' => $id_actrice,
                ':nom' => $nom,
                ':date_de_naissance' => $new_date,
                ':de' => $actives,
                ':ville' => $ville ,
                ':genre' => $Ethnicity,
                ':nationalite' => $newnationalite,
                ':cheveux' => $newcouleurs,
                ':infos' => $film,
                ':photos' => $photos
            ]);
        }
    }

  10. #10
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Pas mal la refacto ^^
    Caché parce que je me suis rendu compte que c'est bien ce qui est fait. Mais je laisse pour la postérité...



    Attention, cependant, htmlspecialchars() et toute autre fonction d'échappement HTML ne devrait être utilisés que dans le context d'affichage HTML. En bref, avant de faire un echo htmlspecialchars($saisie_utilisateur); et non avant l'insertion dans la table.

    Avant l'insertion dans une table on peut faire des mysqli::real_escape_string, ou préparer la requête (ne pas oublier PDO::ATTR_EMULATE_PREPARES à false lors de la création de l'objet Pdo).

    C'est le consensus actuel :
    https://stackoverflow.com/questions/...input-with-php
    https://stackoverflow.com/questions/...jection-in-php
    https://stackoverflow.com/questions/...chars-function
    https://stackoverflow.com/questions/...nstead-of-upon

    En soit c'est pas mal de le faire avant, mais il y a un risque de double échappement et surtout cette fonction ne protège pas le SQL mais le HTML.
    En bref, faut l'utiliser pour empêcher les failles XSS et non les injections SQL.


    Mais $i contrôle la boucle externe mais est incrémentée dans la boucle interne ce qui pose toujours problème ^^

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    je me suis permis de reprendre ton code, en espérant ne pas avoir oublié un truc
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?php
     
    require_once 'simple_html_dom.php';
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; /* on définie les options d'erreurs que l'on souhaite */
    $pdo = new PDO("mysql:host=127.0.0.1;dbname=Acteurs;charset=utf8", '', '', $pdo_options);
     
    $total_execute = 91;
     
    // échappement des caractères dangereux
    $hsc = function($p): string { return htmlspecialchars((string)$p, ENT_QUOTES, 'utf-8'); };
     
    $mois = [
        'Birthday' => 'Date de Naissance',
        'January' => 'Janvier',
        'February' => 'Février',
        'March' => 'Mars',
        'April' => 'Avril',
        'May' => 'Mai',
        'June' => 'Juin',
        'July' => 'Juillet',
        'August' => 'Août',
        'September' => 'Septembre',
        'October' => 'Octobre',
        'November' => 'Novembre',
        'December' => 'Décembre'
    ];
     
    $cheveux = [
        'Hair Color' => 'Couleurs de cheveux',
        'Bald' => 'Chauve',
        'Brown' => 'Brune',
        'Bleached' => 'Blanc',
        'Blond' => 'Blonde',
        'Black' => 'Noir',
        'Grey' => 'Gris',
        'Red' => 'Rouge'
    ];
     
    $nationalites = [
        'Nationality/Heritage' => 'Nationalité',
        'Argentinian' => 'Argentine',
        'Australian' => 'Australienne',
        'Austrian' => 'Autrichienne',
        'Belarussian' => 'Biélorusse',
        'Belgian' => 'Belge',
        'Brazilian ' => 'Brésilienne',
        'Canadian' => 'Canadienne',
        'Costa Rican' => 'Costaricaine',
        'Czech' => 'Tchèque',
        'Danish' => 'Danoise',
        'Estonian' => 'Estonienne',
        'Finnish' => 'Finlandaise',
        'French' => 'Française',
        'German' => 'Allemande',
        'American' => 'Américaine',
        'Hungarian' => 'Hongroise',
        'Indonesian' => 'Indonésienne',
        'Japanese' => 'Japonaise'
    ];
     
    for ($i = 2 ; $i <= $total_execute ; ++$i) {
     
        $url = "https://fqdn/{$i}/?sort_by=rating&items_per_page=98";
     
        $html = new simple_html_dom();
        $html->load_file($url);
     
        foreach($html->find('.models-list-item') as $article) {
     
            $item['nom'] = $html->find('p.title', $i)->plaintext;
            $item['date de naissance'] = $html->find('ul.model-info-list', $i)->children(0)->plaintext;
            $item['Lieu de naissance'] = $html->find('ul.model-info-list', $i)->children(1)->plaintext;
            $item['De'] = $html->find('ul.model-info-list', $i)->children(2)->plaintext;
            $item['Genre'] = $html->find('ul.model-info-list', $i)->children(3)->plaintext;
            $item['Nationalité'] = $html->find('ul.model-info-list', $i)->children(4)->plaintext;
            $item['Cheveux'] = $html->find('ul.model-info-list', $i)->children(5)->plaintext;
            $item['infos'] = $html->find('ul.model-info-list', $i)->children(6)->plaintext;
            $item['photos']= $html->find('img.thumb', $i)->src;
            $item['id'] = $html->find('a.thumb-model-link', $i)->href;
            $articles[] = $item;
            $i++;
     
            $id_nom = substr($item['id'], 13);
     
            $id_actrice = substr($item['id'], 8, 4);
            echo $hsc($id_actrice).'</b>';
     
            echo '<b>'.$hsc($item['nom']).'</b><br />';
            $nom = $item['nom'];
     
            $new_date = strtr($item['date de naissance'], $mois);
            echo $hsc($new_date).'<br>';
     
            $ville = strtr($item['Lieu de naissance'], ['Birthplace' => 'Ville de Naissance']);
            echo $hsc($ville).'<br>';
     
            $actives = strtr($item['De'], ['Years Active' => 'Active de', '-' => 'à']);
            echo $hsc($actives).'<br>';
     
            $Ethnicity = strtr($item['Genre'], ['Ethnicity' => 'Ethnicité']);
            echo $hsc($Ethnicity).'<br>';
     
            $newnationalite = strtr($item['Nationalité'], $nationalites);
            echo $hsc($newnationalite).'<br>';
     
            $newcouleurs = strtr($item['Cheveux'], $cheveux);
            echo $hsc($newcouleurs).'<br>';
     
            $film   = 'Films: <a href="http://fqdn/search/?q='.$id_nom.'">'.str_replace('Films:', '', $item['infos']).'</a><br>';
            $photos = '<img src="'.$item['photos'].'" alt="'.$item['nom'].'"><br><br>';
     
            $stmt = $pdo->prepare('INSERT INTO `Actrices`(`id_actrice`, `nom`, `date_de_naissance`,`de`, `ville`, `genre`, `nationalite`, `cheveux`, `infos`, `photos`) VALUES (:id_actrice, :nom, :date_de_naissance, :de, :ville, :genre, :nationalite, :cheveux, :infos, :photos)');
            $stmt->execute([
                ':id_actrice' => $id_actrice,
                ':nom' => $nom,
                ':date_de_naissance' => $new_date,
                ':de' => $actives,
                ':ville' => $ville ,
                ':genre' => $Ethnicity,
                ':nationalite' => $newnationalite,
                ':cheveux' => $newcouleurs,
                ':infos' => $film,
                ':photos' => $photos
            ]);
        }
    }
    Wow un grand merci c'est super sympa
    Merci à tous, ça fait plaisir de voir cette entraide en tout cas
    Je viens de tester mais il me fait que 96 enregistrements

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    y'a quand même un truc que je ne comprends pas : c'est ton utilisation de $i, pourquoi c'est toi qui l'incrémente ?

    Tu m'a répondu juste au dessus.
    Donc dans la boucle externe remplace $i par $j et garde le $i pour ton usage interne et mets à jour $url en conséquence

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    y'a quand même un truc que je ne comprends pas : c'est ton utilisation de $i, pourquoi c'est toi qui l'incrémente ?

    Tu m'a répondu juste au dessus.
    Donc dans la boucle externe remplace $i par $j et garde le $i pour ton usage interne et mets à jour $url en conséquence
    Je viens de faire ça, de rajouter mon $i = 0; pour les find et ça fonctionne nickel
    Un grand merci

    Je suis pas dev, mais j'aurai besoin d'aller plus loin dans le parse de page, genre de suivre les liens des H1 de chaque titre et de récupérer les éléments de sa page, puis de revenir sur la page initiale et de recommencer.

  14. #14
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Points : 232
    Points
    232
    Par défaut
    Pour ça, je t'invite à lire la documentation et un peu chercher par toi-même. Si au bout d'un moment, tu bloques sur quelque chose, de revenir ici pour un peu d'aides ^^
    On ne peut pas le faire à ta place non plus =p

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

Discussions similaires

  1. [Batch] Incrémentation variable sur un script
    Par Tiffany2015 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/07/2015, 11h23
  2. incrémentation par boucle
    Par Timi493 dans le forum Excel
    Réponses: 2
    Dernier message: 22/06/2015, 09h27
  3. précision de l'incrément dans boucle for
    Par ewaca dans le forum C#
    Réponses: 4
    Dernier message: 15/02/2014, 19h20
  4. [XL-2010] Incrémenter une boucle
    Par idhmida dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2014, 17h07
  5. Piloter Simulink en boucle avec script
    Par nico974_0 dans le forum Simulink
    Réponses: 9
    Dernier message: 26/07/2012, 14h21

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