Functions erreur

Ce topic a été résolu
AntoZzz

AntoZzz Le 27 avril 2016 à 19:21 (Édité le 25 janvier 2019 à 17:50)

Bonjour,

J'ai voulu testé la création d'un forum en php mais je rencontre un problème sur la functions "url_custom_encode"

Cette function vient du tutoriel https://www.primfx.com/article/creer-forum-php-4-lister-les-topics-307 

Cela m'indique une erreur en php : 
Fatal error: Uncaught Error: Call to undefined function url_custom_encode() in C:\xampp\htdocs\forum\views\forum.view.php:14 Stack trace: #0 C:\xampp\htdocs\forum\index.php(6): require() #1 {main} thrown inC:\xampp\htdocs\forum\views\forum.view.php on line 14

Je n'arrive pas à comprendre l'erreur, 

ligne de 10 à 16
while($c = $categories->fetch()) {
            $subcat->execute(array($c['id']));
            $souscategories = '';
            while($sc = $subcat->fetch()) { 
               $souscategories .= '<a href="/forum/forum_topics.php?categorie='.url_custom_encode($c['nom']).'&souscategorie='.url_custom_encode($sc['nom']).'">'.$sc['nom'].'</a> | ';
            }
            $souscategories = substr($souscategories, 0, -3);


J'aimerais bien que quelqu'un m'éclaire dessus

Cordialement, AntoZzz
Florian

Florian Le 27 avril 2016 à 19:30 (Édité le 27 avril 2016 à 19:30)

Salut,

Es-que tu as bien appeler le fichier ?

Ou alors tu l'as appeler deux foix
AntoZzz

AntoZzz Le 27 avril 2016 à 19:38 (Édité le 27 avril 2016 à 19:51)

Bonjour,

Je l'es appelé qu'une fois et oui il est bien appelé
Justement, l'erreur ne vient pas de ça
require('php/functions.php'); /* Mes fonctions */
Cordialement, AntoZzz
Skewmos

Skewmos Le 27 avril 2016 à 20:34

bonsoir j'ai le meme problème mes fonction ne marche pas il me dit qu'elle ne sont pas définie alors que tout et en régle 
Florian

Florian Le 27 avril 2016 à 21:33

Humm

Dans ton fichier function je suppose que tu as fait comme ça

<?php function 1
function 2
?>

Si oui enlève le ?> car si y'a des espaces etc ça peux faire des bugs :x
sadidaq

sadidaq Le 28 avril 2016 à 12:03 (Édité le 28 avril 2016 à 23:21)

Bonjour,

J'ai le même soucis mais toujours pas de solutions... 
functions.php
 <?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;
}
?>

forum.view.php

 <meta charset="utf-8">
 <link href="css/style.css" rel="stylesheet" type="text/css" />
 <table class="forum">
   <tr class="header">
      <th class="main">Catégories</th>
      <th class="sub-info messages">Messages</th>
      <th class="sub-info dmessage">Dernier message</th>
   </tr>
   <?php
   while($c = $categories->fetch()) {
      $subcat->execute(array($c['id']));
      $souscategories = '';
      while($sc = $subcat->fetch()) { 
         $souscategories .= '<a href="/forum/forum_topic.php?categorie='.$c['nom'].'&souscategorie='.url_custom_encode($sc['nom']).'">'.$sc['nom'].'</a> | ';
      }
      $souscategories = substr($souscategories, 0, -3);
   ?>
   <tr>
      <td class="main">
         <h4><a href="/forum/forum_topic.php?categorie=<?= url_custom_encode($c['nom']) ?>"><?= $c['nom'] ?></a></h4>
         <p>
         <?= $souscategories ?>
         </p>
      </td>
      <td class="sub-info">4083495</td>
      <td class="sub-info">04.12.2015 à 14h52<br />de PrimFX</td>
   </tr>
   <?php } ?>
</table>
Ps : Finalement j'ai réussi a corriger l'erreur avec de l'aide !
AntoZzz

AntoZzz Le 30 avril 2016 à 11:57

Tu pourrais nous dire comment stp ? car je suis bloquer pour la suite
sadidaq

sadidaq Le 30 avril 2016 à 14:13 (Édité le 30 avril 2016 à 14:20)

Bonjour,

Alors tout d'abord j'ai donner un nom à ma classe comme ceci: 

url.php
 <?php
 class url {
  
     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;
  }
 }

j'ai mis un require sur forum.php  de cette function

<?php
require('php/config.php'); /* Contient la connexion à la $bdd */
require('php/url.php');
$categories = $bdd->query('SELECT * FROM f_categories ORDER BY nom');
$subcat = $bdd->prepare('SELECT * FROM f_souscategorie WHERE id_categorie = ? ORDER BY nom');
require('views/forum_view.php');
?>
puis je me suis occuper de l'instanciation de ma classe dans forum.view.php en ajoutant les lignes de commandes suivant : 
$url = new url();
$url->url_custome_encode()

<meta charset="utf-8">
 <link href="css/style.css" rel="stylesheet" type="text/css" />
 <table class="forum">
   <tr class="header">
      <th class="main">Catégories</th>
      <th class="sub-info messages">Messages</th>
      <th class="sub-info dmessage">Dernier message</th>
   </tr>
   <?php
   while($c = $categories->fetch()) {
      $subcat->execute(array($c['id']));
      $souscategories = '';
      while($sc = $subcat->fetch()) { 
         $url = new url();
         $souscategories .= '<a href="/forum/forum_topic.php?categorie='.$url->url_custom_encode($c['nom']).'&souscategorie='.$url->url_custom_encode($sc['nom']).'">'.$sc['nom'].'</a> | ';
      }
      $souscategories = substr($souscategories, 0, -3);
   ?>
   <tr>
      <td class="main">
         <h4><a href="/forum/forum_topic.php?categorie=<?= $url->url_custom_encode($c['nom']) ?>"><?= $c['nom'] ?></a></h4>
         <p>
         <?= $souscategories ?>
         </p>
      </td>
      <td class="sub-info">4083495</td>
      <td class="sub-info">04.12.2015 à 14h52<br />de PrimFX</td>
   </tr>
   <?php } ?>
</table>

j'ai aussi ajouter cela dans la page forum_topic.php

<?php
require('php/config.php');
require('php/url.php');
$url = new url()
;
if(isset($_GET['categorie']) AND !empty($_GET['categorie'])) {
   $get_categorie = htmlspecialchars($_GET['categorie']);
   $categories = array();
   $req_categories = $bdd->query('SELECT * FROM f_categories');
   while($c = $req_categories->fetch()) {
      array_push($categories, array($c['id'],$url->url_custom_encode($c['nom'])));
   }
   foreach($categories as $cat) {
      if(in_array($get_categorie, $cat)) {
         $id_categorie = intval($cat[0]);
      }
   }
   if(@$id_categorie) {
      if(isset($_GET['souscategorie']) AND !empty($_GET['souscategorie'])) {
         $get_souscategorie = htmlspecialchars($_GET['souscategorie']);
         $souscategories = array();
         $req_souscategories = $bdd->prepare('SELECT * FROM f_souscategorie WHERE id_categorie = ?');
         $req_souscategories->execute(array($id_categorie));
         while($c = $req_souscategories->fetch()) {
            array_push($souscategories, array($c['id'],$url->url_custom_encode($c['nom'])));
         }
         foreach($souscategories as $cat) {
            if(in_array($get_souscategorie, $cat)) {
               $id_souscategorie = intval($cat[0]);
            }
         } 
      }
      $req = "SELECT *, f_topics.id topic_base_id 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_souscategorie ON f_topics_categories.id_souscategorie = f_souscategorie.id
            LEFT JOIN membres ON f_topics.id_createur = membres.id
            WHERE f_categories.id = ?";
       if(@$id_souscategorie) {
           $req .= " AND f_souscategorie.id = ?";
           $exec_array = array($id_categorie,$id_souscategorie);
       } else {
           $exec_array = array($id_categorie);
       }
       $req .= " ORDER BY f_topics.id DESC";
         
       $topics = $bdd->prepare($req);
       $topics->execute($exec_array);
   } else {
      die('Erreur: Catégorie introuvable...');
   }
} else {
   die('Erreur: Aucune catégorie sélectionnée...');
}
require('views/forum_topic_view.php');
?>

Florian

Florian Le 30 avril 2016 à 14:36 (Édité le 30 avril 2016 à 14:40)

En faite c'est que vous mettez tout simplement des esapces entre <?php et la première function faut JAMAIS d'espace

Voila pourquoi la plupart des gens ( dont moi ) met leurs function comme ça

<?php function blabla(){ return true } 
en gros je ferme jamais mon fichier function inutile de le fermer PHP gère ceci :P 

debut de ma function il n'y a pas d'espaces entre <?php et function seulement des commentaire mais sont pas pris en compte http://prntscr.com/aynz2a la fin http://prntscr.com/aynz4p tu peux mettre autant d'espaces que tu veux il seront supprimer 


Voila pourquoi pour toi @sadidaq ça fonctionne, car tu as mis une class en haut donc y'a plus d'espace inutile 
AntoZzz

AntoZzz Le 30 avril 2016 à 20:54

Yop,

Merci sadidaq, super bien expliquer
Je t'adore xD

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