IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Array PHP email


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut Array PHP email
    Bonjour à tous,

    J'ai un souci au niveau de mon code et je ne comprends pas l'origine de ce problème. En effet, j'ai créé une fonction PHP contenant un tableau avec une liste des mots interdits. Il s'agit d'un système de question/réponse. Si un client saisit un mot interdit dans sa réponse, je vérifie que ce mot ou expression est dans mon tableau. Si le mot existe et est interdit j'envoie un émail à l'administrateur pour le signaler, sinon j'enregistre la réponse et je l'affiche. Même dans le cas ou le mot est interdit j'enregistre quand même la réponse et c'est juste au niveau de l'affichage que je remplace le mot par des étoiles (***). L'envoie de mail c'est pour informer l'administrateur qu'un mot interdit a été saisi et lui permettre de le modérer ou de le supprimer.

    Voici mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // fonction mots interdits:
    function motInterdit ($mot) {
            $mots = array(
                  'mot 1',
                  'mot 2',
                  'mot 3'
            );
            $mot_remplacement = '******';
            $data = str_ireplace($mots, $mot_remplacement, $mot);
            return $data;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    // requête d'insertion ici
    /*.........*/
     
    // select
    $q = array('lastId'=>$lastId);
    $sql = 'SELECT * FROM reponse WHERE reponse_id = :lastId';
    $req = $db->prepare($sql);
    $req->execute($q) or die(print_r($db->errorInfo()));
     
    foreach ($req->fetchAll() as $data):
           $tab = nl2br(htmlspecialchars($data));
           $resTab = motInterdit ($tab);
     
           if (is_array(resTab) && in_array($tab, $resTab)) {
                 // envoie de mail
                 mail($to, $subject, $message, $headers);
           }
    endforeach;
    Je pense que mon problème c'est au niveau de la vérification si le mot interdit existe dans mon tableau. Car je n'arrive pas à envoyer mon mail. Mais je n'ai pas de problème au niveau du traitement de mon mail car si je fais un test d’envoi de mail avec un mot correcte ça fonctionne.

    Merci pour votre aide !

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Attention à la faute de frappe : il manque un $ devant le 1er resTab ici : if (is_array(resTab) && in_array($tab, $resTab)) {.
    Activer la totalité des erreurs et des notices pendant les phases de développement est une bonne idée et pourrait t'aider à repérer ce genre d'erreurs
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Bonjour @Celira,

    Merci pour la remarque.
    Oui en effet c'est une erreur de frappe. Mais ce n'est pas ça mon problème.
    Le message d'erreur que j'ai est celui là et rien d'autres :

    Array
    (
    [0] => 00000
    [1] =>
    [2] =>
    )
    1

    Cdlt,

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ah, donc ce qui plante, c'est ta requête (vu que c'est le seul endroit où je vois un print_r dans ton bout de code)
    Ton abscence d'informations vient du fait que tu n'appelles pas la bonne fonction errorInfo :
    Si vous créez un objet PDOStatement avec la fonction PDO::prepare() ou la fonction PDO::query() et que vous invoquez une erreur sur le gestionnaire de requête, PDO::errorInfo() ne retournera pas l'erreur depuis le gestionnaire de requête. Vous devez appeler la fonction PDOStatement::errorInfo() pour retourner les informations sur l'erreur pour une opération exécutée sur un gestionnaire de requête particulier.
    Essaye donc avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->execute($q) or die(print_r($req->errorInfo()));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    @Celira,

    J'ai toujours la même erreur.

    Cdlt,

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    Re,

    Tout ce que j'ai comme erreur c'est ça après plusieurs debug :

    Array
    (
    [0] => HY000
    [1] => 206
    [2] => General SQL Server error: Check messages from the SQL Server [206] (severity 16) [(null)]

    [3] => -1
    [4] => 16
    )

    Cdlt,

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ah on avance : tu as bien un plantage dans l'exécution de ta requête.
    Je pense que le problème vient des paramètres passés à la requête : il manque le ":" devant le nom du paramètre $q = array(':lastId'=>$lastId);. Évidemment, il faut aussi qu'il y ait quelque chose de correct dans $lastId
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 161
    Par défaut
    L'erreur vient du fait que j'ai remplacé ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->execute($q) or die(print_r($req->errorInfo()));
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->execute($q) or die(print_r($db->errorInfo()));
    .

    Si je remets $db je n'ai plus le message d'erreur précédent mais j'ai celui là :
    Array
    (
    [0] => 00000
    [1] =>
    [2] =>
    )
    1

    Donc on revient à la phase initiale.

    Cdlt,

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Effectivement, mais ne pas afficher le message d'erreur, ce n'est pas franchement la même chose que corriger l'erreur

    Au départ, avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $q = array('lastId'=>$lastId);
    $sql = 'SELECT * FROM reponse WHERE reponse_id = :lastId';
    $req = $db->prepare($sql);
    $req->execute($q) or die(print_r($db->errorInfo()));
    tu avais deux problèmes : ça ne marchait pas et on n'avait pas le message d'erreur.

    Maintenant, avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $q = array('lastId'=>$lastId);
    $sql = 'SELECT * FROM reponse WHERE reponse_id = :lastId';
    $req = $db->prepare($sql);
    $req->execute($q) or die(print_r($req->errorInfo()));
    ça ne marche toujours pas, mais on a un message d'erreur qui dit (en gros) que ta requête ne peut s'exécuter.

    Donc, ensuite, on tente de corriger cette erreur. Pour cela, je te propose d'essayer ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $q = array(':lastId'=>$lastId);
    $sql = 'SELECT * FROM reponse WHERE reponse_id = :lastId';
    $req = $db->prepare($sql);
    $req->execute($q) or die(print_r($req->errorInfo()));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher données array php
    Par Patpillon dans le forum Langage
    Réponses: 2
    Dernier message: 30/07/2009, 09h21
  2. [Tableaux] Tableau (array) PHP/ foreach
    Par KOUTO dans le forum Langage
    Réponses: 2
    Dernier message: 01/06/2009, 00h54
  3. [MySQL] Boucle Array Php
    Par toulousain3117 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/05/2009, 00h13
  4. Augmenter un array php via js
    Par bastien dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 17/09/2008, 11h26
  5. [Tableaux] Recherche évoluée dans un array PHP
    Par fanfouer dans le forum Langage
    Réponses: 2
    Dernier message: 01/03/2008, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo