Partage
  • Partager sur Facebook
  • Partager sur Twitter

Site qui fonctionne en local mais pas en ligne

[PHP][XML][SQL]

Sujet résolu
    22 septembre 2017 à 21:17:44

    Bonjour,

    Pour un projet scolaire, je dois mettre en ligne un site de diffusion de flux RSS. Il fonctionne parfaitement en local (sur Firefox. C'est le MEILLEUR navigateur pour interpréter un Flux RSS !), mais l'iFrame que j'utilise pour afficher le flux RSS m'affiche une page blanche quand je le mets en ligne.

    Le site est visible en ligne à cette adresse: www.mesgarants.com

    Le code du flux est le suivant :

    <?php
      header('Content-Type: application/rss+xml');
      try
      {
        $bdd = new PDO('mysql:host=mon_nom_dhote;dbname=le_nom_de_ma_bdd', 'mon_identifiant', 'mon_mdp') or die("Error connecting to database: ".mysql_error());
      }catch(Exception $e){
        die('Erreur :'.$e->getMessage());
      }
      $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $articles = $bdd->query('SELECT * FROM 20minutes ORDER BY date_time_post DESC LIMIT 0,25');
      $lastBuildDate = $bdd->query('SELECT date_time_post FROM 20minutes ORDER BY date_time_post DESC LIMIT 0,1');
      $lastBuildDate = $lastBuildDate->fetch()['date_time_post'];
    ?>
    <?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0">
        <channel>
            <title>20minutes.fr</title>
            <description>Contenu conçu et proposé par 20Minutes.fr</description>
            <lastBuildDate><?= date(DATE_RSS, strtotime($lastBuildDate)) ?></lastBuildDate>
            <link>http://www.20Minutes.fr</link>
            <?php while($a = $articles->fetch()) { ?>
            <item>
                <title><?= $a['titre'] ?></title>
                <description><?= substr($a['contenu'], 0, 1000).'...' ?></description>
                <pubDate><?= date(DATE_RSS, strtotime($a['date_time_post'])) ?></pubDate>
                <link><?= $a['lien_article'] ?></link>
                <image>
                   <url><?= $a['lien_image'] ?></url>
                   <link><?= $a['lien_article'] ?></link>
                </image>
            </item>
            <?php } ?>
        </channel>
    </rss>


    Résultat en local :

    Résultat en local

    De plus, dans l'exercice, il nous est demandé entre autre de faire une bar de recherche, qui fonctionne également en local mais pas en ligne:

    Code du moteur de recherche:

    <?php require "includes/header.php"; ?>
    
    <?php
        $query = $_GET['query']; 
        // gets value sent over search form
         
        $min_length = 3;
        // you can set minimum length of the query if you want
         
        if(strlen($query) >= $min_length){ // if query length is more or equal minimum length then
             
            $query = htmlspecialchars($query); 
            // changes characters used in html to their equivalents, for example: < to &gt;
            $con = mysqli_connect("bidule", "machin", "chose", "truc");
    
            $query = mysqli_real_escape_string($con, $query);
            // makes sure nobody uses SQL injection
             
            $raw_results = mysqli_query($con,"SELECT titre, contenu FROM lemonde
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM 20minutes
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM leparisien
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM liberation
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM AlternativeEco
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM capital
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM challenge
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM gestionFortune
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM sport
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM sport24
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM sportMag
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM coteMaison
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM leJournalDeLaMaison
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%' 
                UNION
                SELECT titre, contenu FROM magDeco
                WHERE titre LIKE '%$query%' or contenu LIKE '%$query%'") or die(mysqli_errno($con));
                 
            // * means that it selects all fields, you can also write: `id`, `title`, `text`
            // articles is the name of our table
             
            // '%$query%' is what we're looking for, % means anything, for example if $query is Hello
            // it will match "hello", "Hello man", "gogohello", if you want exact match use `title`='$query'
            // or if you want to match just full word so "gogohello" is out use '% $query %' ...OR ... '$query %' ... OR ... '% $query'
             
            if(mysqli_num_rows($raw_results) > 0){ // if one or more rows are returned do following
                 
                while($results = mysqli_fetch_array($raw_results)){
                // $results = mysql_fetch_array($raw_results) puts data from database into array, while it's valid it does the loop
                 
                    echo "<div class='container'><h3>".$results['titre']."</h3><p>".$results['contenu']."</p></div>";
                    // posts results gotten from database(title and text) you can also show id ($results['id'])
                }
                 
            }
            else{ // if there is no matching rows do following
                echo "Aucun résultat";
            }
             
        }
        else{ // if query length is less than minimum
            echo "La taille de recherche minimum est de ".$min_length;
        }
    ?>
    </body>
    <foooter>
            <div class="navbar-inverse navbar-static-bottom footer">
                <div class="container">
                     <p class="navbar-text pull-right textfooter">© 2017 - Site Built By Francis,Pierre,Charles From SIO2 JV</p> <!-- pull-right ou pull-left permet de placer l'élément directement à droit ou a gauche" -->
                </div>
             </div>
    </foooter>
    </html> 

    J'ai d'abord pensé que cela venait de ma connexion à la BDD car la première fois que je l'ai mis en ligne, j'ai oublié de changé les infos de connexion (je suis resté en localhost) et les pages restaient blanche...

    Mais j'ai vérifié et revérifié, les informations entrées sont désormais exactes !

    J'ai également pensé que le faite que j'utilise du MySqli pour le moteur de recherche pouvait être la source du problème vu que je me connecte à la BDD de la façon suivante "$bdd = new PDO('mysql:host=etc...". Mais j'ai tenté de me connecter à la BDD avec du MySqli et le problème persiste de plus, je n'utilise pas de MySqli dans le moteur de recherche...

    Ce qui est étrange, c'est que l'interface d'enregistrement de l'utilisateur et de connexion fonctionne parfaitement !


    Si quelqu'un a des pistes de réflexion à me proposer, ce serait génial car là, je sèche complétement...

    Merci à tous ceux qui se donneront la peine de s'intéresser à mon problème !

    -
    Edité par Apollo Nox 24 septembre 2017 à 15:02:31

    • Partager sur Facebook
    • Partager sur Twitter
    Eat, code, sleep, what a wonderful lifestyle!
      22 septembre 2017 à 21:43:56

      Salut,

      faudrait rester cohérent utilise soit PDO ou Mysqli et pas de fonction mysql_ (mysql_error() qui n'a rien à fait là et le or die à côté de new PDO()),  mais ne les mélange pas. htmlspecialchars n'a rien à faire ici.

      Par tes requêtes, on voit qu'il y a une mauvaise conception. Tu crées autant de tables qu'il y a de journaux, pas bon. En allant sur cette page http://www.mesgarants.com/fluxrss/20minutes.php qui charge le flux, on a une belle erreur 500 donc vérifie tes logs. Je vois que tu utilises une version de PHP 7.0.22 en ligne donc mysql_error est une cause de ton erreur 500.

      Bref ce code doit être revu parce que je pense que les prochaines évolutions risquent d'être un cauchemar et essaie d'avoir dans ton environnement de dev une version d'au moins PHP 7

      -
      Edité par WillyKouassi 22 septembre 2017 à 22:00:16

      • Partager sur Facebook
      • Partager sur Twitter
      le bienfait n'est jamais perdu
        24 septembre 2017 à 14:52:59

        Je reconnais que je n'étais obligé de faire une table par Journal. C'est lourd, mais ça ne change en rien le fonctionnement du site. Et ce sera surement plus simple à traiter si l'on doit faire en sorte à ce que l'utilisateur puissent ajouter certains flux à ses favoris...

        J'ai tous remis en PDO mais le problème persistait.

        Pour éviter la page blanche de la mort, comme elle est appelée sur les forums anglo-saxon, j'ai lu qu'il fallait ajouter ces 3 lignes (ça aurait été intéressant de commencer par là...) :

        ini_set('display_errors', -1);
        ini_set('display_startup_errors', -1);
        error_reporting(E_ALL);

        dans un fichiers fichier PHP extérieur à celui que l'on veut debuger et l'appeler avec un require en début de page. Et là miracle des erreurs autres que "erreur 500" (qui veut dire tout et n'importe quoi au point que firefox ne le montre même pas!!) sont apparus.

        Le moteur de recherche ne fonctionnait pas car une fois que j'ai chargé la BDD sur le serveur OVH, toutes les majuscules présentes dans le nom des tables avaient été changées par des minuscules. Ce qui faisait que $raw_results = mysqli_query devait interpréter une valeur booléene qui était fausse. Il a donc fallut que je supprime toute les majuscules de mes requêtes SQL et la barre de recherche était finalement fonctionnelle en ligne.

        Enfin, pour les flux RSS, il semblerait que le serveur ne pouvait pas interpréter cette ligne:<?xml version="1.0" encoding="UTF-8"?>.

        Du XML dans un fichier  PHP, c'est un bug sur le serveur que j'utilise mais pas sur Wamp ou même la majorité des serveurs (manque de chance!). Il faillait donc la modifier de la sorte <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> pour l'obligé à interpréter le XML comme si c'était du PHP.

        Voilà.

        -
        Edité par Apollo Nox 24 septembre 2017 à 15:15:40

        • Partager sur Facebook
        • Partager sur Twitter
        Eat, code, sleep, what a wonderful lifestyle!
          24 septembre 2017 à 15:33:12

          Tu le sais au moins en prod on affiche pas les erreurs du serveur. Erreur 500 est une indication pour te dire va vérifier dans tes logs, il y a une pile d'infos concernant des erreurs. Donc non cette page n'est pas propre à FF.

          http://www.mesgarants.com/search.php?query=2017%27 , j'ai ajouté une simple apostrophe (%27) et tu vois la jolie erreur qui s'affiche? Tu donnes une bonne indication à des malins qui voudront te faire quelque chose.

          Content que t'ai réussi à corriger ton problème.

          • Partager sur Facebook
          • Partager sur Twitter
          le bienfait n'est jamais perdu
            24 septembre 2017 à 16:30:04

            Merci du conseil. J'ai enlevé l'affichage des erreurs... ;)
            • Partager sur Facebook
            • Partager sur Twitter
            Eat, code, sleep, what a wonderful lifestyle!

            Site qui fonctionne en local mais pas en ligne

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown