fonction url_custom_encode forum php ne fonctionne pas

Ce topic a été résolu
Natoune

Natoune Le 27 mars 2020 à 15:22 (Édité le 27 mars 2020 à 15:35)

Bonjour, je suis actuellement en train de regarder les tutos de PrimFX pour créer un forum (le Tuto #4) mais lorsque je mets la fonction personnalisé (donné par PrimFX) url_custom_encode et que je rafraichis la page, la page reste toute blanche alors qu'en utilisant le urlencode de base de php cela fonctionne...

Voici mon code:

forum_topic.php (pour le php)

<meta charset="utf-8" />
<?php session_start();
include '../include/menunavigation.php';
include 'includes/database.php';
include 'php/functions.php' ;
global $db;

// Récupération des topics
// $topics = $db->query('SELECT * FROM f_topics ORDER BY id DESC');

if(isset($_GET['categorie']) AND !empty($_GET['categorie']))
{
    $get_categorie = htmlspecialchars($_GET['categorie']);

    $categories = array();
    $req_categories = $db->query('SELECT * FROM f_categories');

    while ($c = $req_categories->fetch()) {
        array_push($categories, array($c['id'], url_custom_encode($c['nom'])));
    }

    var_dump($categories);

    if (in_array($get_categorie, $categories)) {
        var_dump("OK");
    }

    // $id_categorie = 

    if(isset($_GET['souscategorie']) AND !empty($_GET['souscategorie']))
    {
        $get_souscategorie = htmlspecialchars($_GET['souscategorie']);
        $id_souscat = $db->prepare('SELECT id FROM f_souscategories WHERE nom = ?');
        $id_souscat->execute(array($get_souscategorie));
    }

    $req = "SELECT * FROM f_topics 
            LEFT JOIN f_topics_categories ON f_topics.id = f_topics_categories.id_topic 
            LEFT JOIN f_categories ON f_topics_categories.id_categorie = f_categories.id 
            LEFT JOIN f_souscategories ON f_topics_categories.id_souscategorie = f_souscategories.id 
            WHERE f_categories.id = ?";

    if($get_souscategorie)
    {
        $req .= " AND f_souscategories.id = ?";
        $exec_array = array($id_categorie,$id_souscategorie);
    }
    else
    {
        $exec_array = array($id_categorie);
    }

    $topics = $db->prepare($req);

    $topics->execute($exec_array);
}
else
{
    ?>
    <head>
    <link rel="stylesheet" href="../include/menunavigation.css" />
    </head>
    <?php
    die('Erreur: Aucune catégorie sélectionné !');
}

require('views/forum_topic.view.php');
?>

forum_topic.view.php (pour le html)

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8" />
    <link rel="stylesheet" href="css/forum_topic.view.css" />
    <link rel="stylesheet" href="../include/menunavigation.css" />

    <title>Titre</title>

</head>
<body>

<table cellspacing="0" cellpadding="0" class="forum">
       <tr class="header">
          <th class="main">Sujet</th>
          <th class="sub-info w10">Messages</th>
          <th class="sub-info w20">Dernier message</th>
          <th class="sub-info w20">Création</th>
       </tr>
       <?php while($t = $topics->fetch()) { ?>
       <tr>
          <td class="main">
             <h4><a class="sujet" href=""><?= $t['sujet'] ?></a></h4>
          </td>
          <td class="sub-info">aucun, snif ;(</td>
          <td class="sub-info">00.00.0000 à 00h00<br />de admin</td>
          <td class="sub-info"><?= $t['date_heure_creation']; ?><br />par Pseudo</td>
       </tr>
       <?php } ?>
    </table>

</body>
</html>

fonctions.php: (Là ou se trouve ma fonction url_custom_encode())

<?php
function url_custom_encode($titre) {
       $titre = htmlspecialchars($titre);
       $find = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Œ', 'œ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Š', 'š', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', 'Ÿ', '?', '?', '?', '?', 'Ž', 'ž', '?', 'ƒ', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?');
         $replace = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?', '?');
         $titre = str_replace($find, $replace, $titre);
       $titre = strtolower($titre);
       $mots = preg_split('/[^A-Z^a-z^0-9]+/', $titre);
       $encoded = "";
       foreach($mots as $mot) {
          if(strlen($mot) >= 3 OR str_replace(['0','1','2','3','4','5','6','7','8','9'], '', $mot) != $mot) {
             $encoded .= $mot.'-';
          }
       }
       $encoded = substr($encoded, 0, -1);
       return $encoded;
    }

?>

Quelques images:

Avec urlencode(): Avec urlencode()

Avec url_custom_encode(): Avec url_custom_encode

Vous avez une idée ? Merci d'avance ^^

PrimFX

PrimFX Le 10 avril 2020 à 20:06

Hello @Natoune !

Désolé, il faut croire que ton topic était passé inaperçu 😅 Tu as bien fait de le UP pour ne pas qu'il parte aux oubliettes.

Vu la page blanche qui est affichée, j'ai l'impression qu'il y a une erreur PHP quelque part.

Est-ce que tu pourrais insérer le code suivant tout en haut de ton script PHP ? Il permet d'afficher toutes les erreurs PHP. Tu pourras ensuite rafraîchir ta page et regarder si une erreur plus explicite est affichée ;-)

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

Autre petit conseil pour trouver l'erreur plus facilement : vérifier le code source de la page. Si une erreur PHP survient par exemple dans un attribut HTML, alors l'erreur n'est pas visible directement à l'utilisateur et il faut aller la chercher dans le code source...

Tiens-nous au courant de ce que ça donne avec tout ça !

A+

Boris

Meilleure réponse
Natoune

Natoune Le 2 avril 2020 à 18:11 (Édité le 11 avril 2020 à 20:15)

Up !

PrimFX

PrimFX Le 10 avril 2020 à 20:06

Hello @Natoune !

Désolé, il faut croire que ton topic était passé inaperçu 😅 Tu as bien fait de le UP pour ne pas qu'il parte aux oubliettes.

Vu la page blanche qui est affichée, j'ai l'impression qu'il y a une erreur PHP quelque part.

Est-ce que tu pourrais insérer le code suivant tout en haut de ton script PHP ? Il permet d'afficher toutes les erreurs PHP. Tu pourras ensuite rafraîchir ta page et regarder si une erreur plus explicite est affichée ;-)

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

Autre petit conseil pour trouver l'erreur plus facilement : vérifier le code source de la page. Si une erreur PHP survient par exemple dans un attribut HTML, alors l'erreur n'est pas visible directement à l'utilisateur et il faut aller la chercher dans le code source...

Tiens-nous au courant de ce que ça donne avec tout ça !

A+

Boris

Meilleure réponse
Natoune

Natoune Le 11 avril 2020 à 20:14

Ok, merci de ta réponse 👍, j'ai inclut ces quelques lignes et je me suis aperçut que j'avait appelé le fichier fonctions.php dans le code alors que c'était functions.php dans mon ftp... Une petite erreur toute simple mais merci !

PrimFX

PrimFX Le 11 avril 2020 à 21:15

De rien ! Haha, ce sont souvent ces erreurs toutes bêtes qui font perdre le plus de temps 😅 Content que tu ais pu résoudre ce problème en tout cas !

idriss-pro

idriss-pro Le 18 avril 2020 à 18:27

@PrimFx merci aussi ça m'as beaucoup aidé

Beaudelaire

Beaudelaire Le 1 mai 2020 à 10:12

Bonjour @Natoune. J'aimerais te demander une aide. Au fait, moi aussi j'ai suivi le tuto et j'ai fait exactement comme primfx a fait c'est-à-dire le code de la page forum_topic.php qui affiche les topics . Maintenant mon souci est que j'ai du mal à insérer le code php du formulaire de recherche et celui de la pagination dans le code de la page forum_topic.php. C'est pour permettre aux utilisateurs de faire des recherches de topics et d'avoir plusieurs pages comme l'a fait primfx sur le forum. Si tu as pu le faire pour ton site, peux-tu m'aider pour à avoir le code ? Merci d'avance .

Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte