Php require, include et fonction
chabinot
Messages postés
322
Date d'inscription
Statut
Membre
Dernière intervention
-
Reivax962 Messages postés 3672 Date d'inscription Statut Membre Dernière intervention -
Reivax962 Messages postés 3672 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai créé des fonctions comme suit:
1 - Source fonctions.php
2 - Source register.php
Quand j'appelle le source views/register.view.php par la fonction get_register(),
il ne marche pas très bien, source register.view.php:
surtout à la ligne <?php include 'partials/_errors.php'; ?>
Si je remplace get_register() par include __DIR__ . '/views/register.view.php;
Cela marche, il me renvoie bien les erreurs que j'attends.
Merci de m'expliquer ce mystère !!
Cordialement
J'ai créé des fonctions comme suit:
1 - Source fonctions.php
<?php function get_constant() { require __DIR__ . '/includes/constants.php'; } function get_functions() { require __DIR__ . '/includes/functions.php'; } function get_index() { require __DIR__ . '/views/index.view.php'; } function get_register() { include __DIR__ . '/views/register.view.php'; } function get_header() { include __DIR__ . '/partials/header.php'; } function get_menu() { include __DIR__ . '/partials/menu.php'; } function get_footer() { include __DIR__ . '/partials/footer.php'; } function get_error() { include __DIR__ . '/partials/errors.php'; }
2 - Source register.php
<?php // Autoloading require __DIR__ . '/vendor/autoload.php'; // Accès à la base de données $bdd = new Database(); // Chargement divers fichiers get_constant(); get_functions(); // Traitement du formulaire soumis if (isset($_POST['register'])) { // Tous les champs ont été remplis ? if (not_empty(['name', 'pseudo', 'email', 'password', 'password_confirm'])) { $errors = []; extract($_POST); if (mb_strlen($name) < 3) { $errors[] = 'Nom trop court (minimum 3 caractères)'; } if (mb_strlen($pseudo) < 3) { $errors[] = 'Pseudonyme trop court (minimum 3 caractères)'; } if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Adresse courriel invalide'; } if (mb_strlen($password) < 6) { $errors[] = 'Mot de passe trop court (minimum 6 caractères)'; } else { if ($password != $password_confirm) { $errors[] = 'Les deux mots de passe ne concordent pas'; } } if ($bdd->is_already_in_use('pseudo', $pseudo, 'users')) { $errors = 'Pseudonyme déjà utilisé'; } if ($bdd->is_already_in_use('email', $email, 'users')) { $errors = 'Adresse courriel déjà utilisée'; } if (count($errors) == 0) { // Envoi d'un courriel d'activation $to = $email; $subject = WEBSITE_NAME . " - ACTIVATION DE COMPTE"; $token = sha1($pseudo . $email . $password); ob_start(); require __DIR__ . '/templates/emails/activation.tmpl.php'; $content = ob_get_clean(); $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; mail($to, $subject, $content, $headers); // Informer l'utilisateur de vérifier sa boîte de réception echo 'Un couurriel d\'activation de votre compte vous a été envoyé'; // Redirection vers sa page de profil } } else { $errors[] = 'Veuillez remplir tous les champs.'; } } // Titre $title = 'Inscription'; // Page register.view.php get_register();
Quand j'appelle le source views/register.view.php par la fonction get_register(),
il ne marche pas très bien, source register.view.php:
<?php get_header(); ?> <div id="main-content"> <div class="container-fluid"> <h1>Devenez dès à présent membre</h1> <?php include 'partials/_errors.php'; ?> <form method="post" class="well col-md-6"> <!-- Name field --> <div class="form-group"> <label class="control-label" for="name">Nom <span>*</span></label> <input type="text" class="form-control" id="name" name="name" placeholder="Votre nom"> </div> <!-- Pseudo field --> <div class="form-group"> <label class="control-label" for="pseudo">Pseudo <span>*</span></label> <input type="text" class="form-control" id="pseudo" name="pseudo" placeholder="Votre pseudo"> </div> <!-- Email field --> <div class="form-group"> <label class="control-label" for="email">Adresse Courriel <span>*</span></label> <input type="email" class="form-control" id="email" name="email" placeholder="email@domaine.com"> </div> <!-- Password field --> <div class="form-group"> <label class="control-label" for="password">Mot de passe <span>*</span></label> <input type="password" class="form-control" id="password" name="password" placeholder="Votre mot de passe"> </div> <!-- Password confirmation field --> <div class="form-group"> <label class="control-label" for="password_confirm">Confirmer votre mot de passe <span>*</span></label> <input type="password" class="form-control" id="password_confirm" name="password_confirm"> </div> <!-- Bouton enregistrer --> <input type="submit" class="btn btn-primary" name="register" value="Inscription"> </form> </div><!-- /.container --> </div> <?php get_footer(); ?>
surtout à la ligne <?php include 'partials/_errors.php'; ?>
Si je remplace get_register() par include __DIR__ . '/views/register.view.php;
Cela marche, il me renvoie bien les erreurs que j'attends.
Merci de m'expliquer ce mystère !!
Cordialement
A voir également:
- Php require, include et fonction
- Fonction si et - Guide
- Easy php - Télécharger - Divers Web & Internet
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Expert php pinterest - Télécharger - Langages
5 réponses
Bonjour
fonction.php et register.php sont-ils dans le même répertoire ?
Si ce n'est pas le cas, la valeur de __DIR__ est différente dans les deux fichiers, et c'est donc normal que get_register() (qui utilise le __DIR__ de fonction.php), ne donne pas le même résultat que l'utilisation directe de __DIR__ dans register.php.
fonction.php et register.php sont-ils dans le même répertoire ?
Si ce n'est pas le cas, la valeur de __DIR__ est différente dans les deux fichiers, et c'est donc normal que get_register() (qui utilise le __DIR__ de fonction.php), ne donne pas le même résultat que l'utilisation directe de __DIR__ dans register.php.
C'est bien le get_register() appelé à la fin de register.php qui te pose un problème ?
Y a-t-il un message d'erreur ? Lequel ?
Il y a bien quelque part un include ou un require de fonctions.php dans ton register.php ? On ne le voit pas et s'il n'y est pas, c'est normal que get_register ne soit pas défini.
Y a-t-il un message d'erreur ? Lequel ?
Il y a bien quelque part un include ou un require de fonctions.php dans ton register.php ? On ne le voit pas et s'il n'y est pas, c'est normal que get_register ne soit pas défini.
Bonjour,
Attention avec l'utilisation des include et require au sein de fonctions.
Les variables qui peuvent y être définies ne seront disponibles que dans la fonction qui réalise l'include !
Regarde bien les exemples dans la doc : https://www.php.net/manual/en/function.include.php
Xavier
Attention avec l'utilisation des include et require au sein de fonctions.
Les variables qui peuvent y être définies ne seront disponibles que dans la fonction qui réalise l'include !
Regarde bien les exemples dans la doc : https://www.php.net/manual/en/function.include.php
Xavier
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour à tous,
J'ai abandonné de mettre include et require dans des fonctions.
Je les mets dorénavant au niveau des sources.
Donc ce problème est résolu. Une autre petite question, j'ai un fichier functions.php comme suit :
J'aimerais le remplacer par une classe Functions.
Auriez-vous une idée ?
Cordialement
J'ai abandonné de mettre include et require dans des fonctions.
Je les mets dorénavant au niveau des sources.
Donc ce problème est résolu. Une autre petite question, j'ai un fichier functions.php comme suit :
<?php if (!function_exists('not_empty')) { function not_empty($fields = []) : bool { if (count($fields) != 0) { foreach ($fields as $key => $field) { if (empty($_POST[$field]) || trim($_POST[$field]) == '') { return false; } } return true; } } } if (!function_exists('set_flash')) { function set_flash($message, $type = 'info') { $_SESSION['notification']['message'] = $message; $_SESSION['notification']['type'] = $type; } } if (!function_exists('redirect')) { function redirect($page) { header('Location: ' . $page); exit(); } }
J'aimerais le remplacer par une classe Functions.
Auriez-vous une idée ?
Cordialement
Bonjour,
Le mieux à mon avis est d'utiliser une classe avec des fonctions statiques.
Et ensuite, tu l'appelles comme ça : Functions::not_empty()
Xavier
Le mieux à mon avis est d'utiliser une classe avec des fonctions statiques.
<?php class Functions { public static function not_empty($fields = []) : bool { if (count($fields) != 0) { foreach ($fields as $key => $field) { if (empty($_POST[$field]) || trim($_POST[$field]) == '') { return false; } } return true; } } } ?>
Et ensuite, tu l'appelles comme ça : Functions::not_empty()
Xavier