8797 sujets

Développement web côté serveur, CMS

Bonjour,

Je suis actuellement en train de travailler sur mon PFE. Une des étapes consistera à remplir une base de donnée en récupérant les informations d'une autre page qui elle est statique.

Pour parser la page statique j'utilise un parseur qui se nomme Simple HTML Dom. J'ai bien réussi à récupérer les nœuds qui m'intéressait et en faire une requête SQL monstrueuse mais quand j'insère cette requête dans phpmyadmin une erreur survient à laquelle je n'avais pas pensé.

J'ai un champ description que je dois remplir avec certaines informations mais ces informations contiennent bien souvent des apostrophes qui termine prématurément ma chaine de caractère si je puis dire et ainsi sort du paramètre de la requête SQL faisant ainsi tout caboter.

Je ne sais pas si vous comprenez bien, je vous met le code php pour mieux vous illustrez mon problème :

INSERT INTO `annexe`.`balises`
(`id_balises`, `nom`, `description`, `contenu`, `exemple`, `groupe`, `language`, `regle_contenu`, `schema`) VALUES
<?php 
    include('../simple_html_dom.php');
    $html = file_get_html('http://www.nicolasgilis.be/tfe/annexev1/');
    foreach($html->find('table.balise') as $balise)
    {
        $nom_balise = $balise->find('caption'); 
        $schema = $balise->find('td.schema');
        $dtd = $balise->find('td.dtd');
        $desc = '';
        foreach($balise->find('td.description') as $description)
        {
            $desc.=$description;
        }
        $groupeAttrs = ' ';
        foreach($balise->find('th.groupe-attribut') as $groupeAttr)
        {
            $groupeAttrs .= ' ' . $groupeAttr;
        }
        $attrIsolesNom = ' ';
        foreach($balise->find('th.attribut, td.type-nomme-valeur, td.propriete, td.description-attribut') as $attrIsoleNom)
        {
            $attrIsolesNom .= ' ' . $attrIsoleNom ;
        }
        ?>
         ('', '<?php echo $nom_balise[0];?>', '<?php echo $desc ?>', '', '', '', 'xhtml', '<?php echo $dtd[0] ?>', '<?php echo $schema[0] ?>'),
        <?php
}
?>


Par exemple quand je récupère les informations de la balise body (c'est une annexe que je fais en fait) j’obtiens ceci :

('', 'Balise : body', 'body englobe le corps du document et regroupe ainsi le contenu de la page (l'information) et sa structure. ', '', '', '', 'xhtml', '', '')

Ici la requête est « cassée » au niveau de l’apostrophe du mot information.

La question est la suivante, y a-t-il une façon de contourner ce problème sans devoir réécrire tout à la main ?

Merci d'avance
Modifié par Gili (24 Dec 2011 - 13:57)
Extension mysql -> mysl_real_escape_string()
Extension mysqli -> real_escape_string()
Extension PDO -> quote()

-> php.net ou google.
Waaaw, t'es trop fort mon gars merci beaucoup (en même temps je n'en attendais pas moins de toi ! Smiley langue )

Merci en tout cas, et promis la prochaine fois j'éplucherai encore mieux la doc.

Bonne fêtes Smiley smile