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

Langage PHP Discussion :

Test de vérification lors d'un envoi.


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut Test de vérification lors d'un envoi.
    Bonsoir,
    Je fais un test d'envoi pour la création d'un forum, ça à l'air de fonction pour la première variable (titre), mais pas la deuxième (contenu).
    Voici mon code:
    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
    20
     
    <?php
    session_start(); 
     
    if (empty($_POST['titre'] AND strlen(trim($_POST['titre'])) > 0 AND empty($_POST['contenu'] AND strlen(trim($_POST['contenu'])) > 0 )))
    	{
    	 header('location: billets_forum.php' );
    	}
    else
    	{
    require "#require/connet_bdd.php"; //Connexion à la base de données
     
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO billets (titre, date_creation, contenu) VALUES(?, NOW(), ?)');
    $req->execute(array($_POST['titre'], $_POST['contenu']));  
     
    // Redirection du visiteur vers la page du forum
    header('Location: forum.php');
    }
    ?>
    Je me suis inspiré de ce code que j'avais fais pour l'envoi de message dans un chat, il permettait de vérifier si le formulaire n'étais pas vide et qu'il n'y a pas de caractère invisible tel les espaces.

    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
    20
    21
     
    <?php
    session_start(); 
     
    if (empty($_POST['message'] AND strlen(trim($_POST['message'])) > 0 ))
    	{
    	 header('location: chatbox.php' );
    	}
     
    else
    	{
    	require "#require/connet_bdd.php"; //Connexion à la base de données
     
    	// Insertion du message à l'aide d'une requête préparée
    	$req = $bdd->prepare('INSERT INTO minichat (pseudo, date_post, message) VALUES(?, NOW(), ?)');
    	$req->execute(array($_SESSION['pseudo'], $_POST['message']));  
     
    	// Redirection du visiteur vers la page du chatbox
    	header('Location: chatbox.php');
    	}
    ?>
    Je pensais peut être à tort que je pouvais doubler la condition, mais hélas non.
    Votre aide serais la bienvenue, merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'opérateur "normal" pour ET en PHP c'est && pas AND.
    Et tes parenthèses sont placées n'importe comment.
    Et si tu veux tester qu'une variable n'est pas vide c'est !empty() qu'il faut pas empty()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['titre'], $_POST['contenu']) && strlen(trim($_POST['titre'])) > 0 &&  strlen(trim($_POST['contenu'])) > 0)

  3. #3
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sabotage Voir le message
    L'opérateur "normal" pour ET en PHP c'est && pas AND.
    Et tes parenthèses sont placées n'importe comment.
    Et si tu veux tester qu'une variable n'est pas vide c'est !empty() qu'il faut pas empty()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_POST['titre'], $_POST['contenu']) && strlen(trim($_POST['titre'])) > 0 &&  strlen(trim($_POST['contenu'])) > 0)
    Merci pour ta réponse, mais si je décode le code
    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
    20
    21
     
    <?php
    session_start(); 
     
    if (empty($_POST['message'] AND strlen(trim($_POST['message'])) > 0 ))
    	{
    	 header('location: chatbox.php' );
    	}
     
    else
    	{
    	require "#require/connet_bdd.php"; //Connexion à la base de données
     
    	// Insertion du message à l'aide d'une requête préparée
    	$req = $bdd->prepare('INSERT INTO minichat (pseudo, date_post, message) VALUES(?, NOW(), ?)');
    	$req->execute(array($_SESSION['pseudo'], $_POST['message']));  
     
    	// Redirection du visiteur vers la page du chatbox
    	header('Location: chatbox.php');
    	}
    ?>
    Donc si "post_message" est vide et si "post_message" est inférieur à 0, renvoi sur la chatbox.php sans rien enregistré.
    Sinon "enregistre dans la BDD et une fois enregistré renvoi sur chatbox.php avec le nouveau message.
    jusqu'a là tous va bien, en ce qui concerne les parenthèses, je ne vois pas trop comment les mettre.

    Et comment je doit faire pour toutes les conditions, je pensais qu'on pouvais en mettre plusieurs.
    Merci de m'apporter votre aide.

    EDIT: j'avais pas fait attention à ta réponse, tu m'as mis comment le mettre, 1000+1 excuses

    RE EDIT,

    Après avoir testé ton code, ça ne fonctionne pas comme je veux, il enregistre quand le titre est vide, quand le contenu est vide, quand les deux sont vide, mais pas quand les deux sont champs sont rempli, alors que je voudrais
    qu'il enregistre que quand les deux champs sont rempli.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne sais pas de quel code tu parles mais le deux étaient faux de toute façon.
    Sur le deuxième aussi il manque la parenthèse fermante de empty()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_POST['message']) &&  strlen(trim($_POST['message'])) > 0)

  5. #5
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je ne sais pas de quel code tu parles mais le deux étaient faux de toute façon.
    Sur le deuxième aussi il manque la parenthèse fermante de empty()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_POST['message']) &&  strlen(trim($_POST['message'])) > 0)
    Heu, pardonne moi, mais je vois bien deux parenthèse fermante dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_POST['message']) &&  strlen(trim($_POST['message'])) > 0))
    , un peu plus haut dans le post, je sais qu'il est tard mais quand même ^^

    en ce qui concerne le post pour le "titre" et le "contenu", je confirme que c'est du grand n'importe quoi (pour cela que je requière votre aide), le post "message" fonctionne très bien, c’était juste pour vous faire voir d'où j'ai repris le code pour m'inspirer.

    Donc pour résumer le code que vous m'avez fourni ne fonctionne pas comme je voudrais, il enregistre quand le titre est vide, quand le contenu est vide, quand les deux sont vide, mais pas quand les deux champs sont rempli, alors que je voudrais
    qu'il enregistre que quand les deux champs sont rempli.

    Merci.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le code que tu montres là c'est le mien. Dans le tiens empty est fermée à la fin de la ligne et non à la fin de sa valeur.

    concernant mon code, je viens de le tester et il donne bien le résultat attendue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $_POST['titre'] = '';
    $_POST['contenu'] = 'xxxx';
    if (isset($_POST['titre'], $_POST['contenu']) && strlen(trim($_POST['titre'])) > 0 &&  strlen(trim($_POST['contenu'])) > 0) {
       echo 'enregistre';
    }
    else {
       echo 'rien';
    }
    // donne "rien"
    Vu que tu utilisais empty au lieu de !empty est-ce que tu ne ferai pas des conditions à l'envers ? La condition strlen > 0 c'est le cas ou on enregistre.
    Le cas que je te donne c'est le cas ou on fait l'enregistrement, la redirection est dans le else.

  7. #7
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Effectivement, j'avais pas vu de quoi tu parlais, mais "empty" est bien fermée à la fin de la ligne et non à la fin de sa valeur car si je déplace la parenthèse à la fin de sa valeur, ça fonctionne plus comme je veux.

    Là comme il est au départ avec aucun changement, si je ne rentre rien dans le champs "message" ou si je ne rentre que des espaces, le résultats est qu'il n'enregistre rien et du coup il ne m'affiche pas des messages vides.

    Et si je rentre des caractères visibles, il m'enregistre et m'affiche les messages avec plein de caractère ^^.

    C'est ce que je voudrais faire avec l'autre code contenant le "titre" et le "contenu".

    Parcontre j'ai modifié le tiens et ça fonctionne comme je veux

    Voici le code modifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_POST['titre'] && $_POST['contenu'] && strlen(trim($_POST['titre'])) > 0 &&  strlen(trim($_POST['contenu'])) > 0))
    J'attends éventuellement ton avis et merci.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton code c'est toujours n'importe quoi.
    On ne tripote pas les parenthèses comme ça au hasard.

    Ca veut dire que la variable est vide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strlen(trim($_POST['titre'])) > 0
    Ca veut dire qu'elle n'est pas vide.

    Ca ne te dérange pas d'avoir les deux dans la même condition ?

  9. #9
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Oui effectivement "empty" vaut bien vide, mais si tu mets des CARACTÈRES comme des espaces, il n'est plus considéré comme vide, pourtant, il n'affiche rien comme s'il était vide, mais il ne l'est pas d'où l'utilité du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strlen(trim($_POST['titre'])) > 0
    qui lui ne laisse rien passer, pourtant quand tu mets juste le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strlen(trim($_POST['message'])) > 0 )
    quand il est vide, il affiche un vide donc c'est qu'il ne doit pas valoir vraiment vide, il me faut l'avis d'autre expert car moi, je suis qu'un débutant qui essai d'apprendre et surtout de comprendre.

    Je lance un avis aux experts, pour me confirmer cette théorie

    Merci à vous.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La ce n'est pas une question de développement, juste de logique.

    Lis en français ce que fait ton test : "est-ce que ma variable est vide ET contient des caractères ?"
    Il y a un des deux tests qui n'est pas dans le bon sens.

    Il faut juste choisir
    "est-ce que ma variable est vide ET ne contient aucun caractère ?" => je n'inscris rien
    ou son contraire
    "est-ce que ma variable n'est vide pas ET contient des caractères ?" => j'inscris

    Ton deuxième test fonctionne parfaitement, ici le empty() ne sert effectivement à rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (strlen(trim("    ")) > 0 ) { echo 'oui'; } else { echo 'non'; } // non
    if (strlen(trim(NULL)) > 0 ) { echo 'oui'; } else { echo 'non'; } // non
    if (strlen(trim("abc")) > 0 ) { echo 'oui'; } else { echo 'non'; } // oui

  11. #11
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Mouais, alors pourquoi, il m'enregistre un champs vide avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (strlen(trim($_POST['message'])) > 0 )
    alors qu'il est vide, il ne devrais pas normalement

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    et ce if{} contient quoi ? la redirection ou l'insertion ?

  13. #13
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sabotage Voir le message
    et ce if{} contient quoi ? la redirection ou l'insertion ?
    Il contient la redirection sans enregistrement. Mais il enregistre quand même.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strlen(trim($_POST['titre'])) > 0
    qui t'a indiqué cette syntaxe ??

    1- strlen() ne fonctionnera pas correctement en UTF-8.
    Il faut utiliser mb_strlen()

    2- CELA DIT, ce N'est PAS la bonne/meilleure méthode pour vérifier si un champ est rempli ("non-vide") ou pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    !empty(trim($_POST['titre']))
    C'est suffisant.
    Donc, commence par corriger ton code dans ce sens, ça t'évitera d'écrire des séries de conditions contradictoires...


    3- Concernant "message" : d'où vient cette donnée ? d'un éditeur Wysiwyg ? BBcode ? Lequel ?
    Vérifie ce qu'il contient (il se peut que des balises html soient ajoutées, même si le contenu semble vide) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<pre>'.$_POST['message'].'</pre>';
    Dernière modification par Invité ; 11/03/2018 à 09h32.

  15. #15
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est incompréhensible ce que tu fais.
    Il contient la redirection sans enregistrement. Mais il enregistre quand même.
    donc tu souhaites que quand il y a plus de 0 caractères, il y ait une redirection ?

  16. #16
    Membre à l'essai
    Homme Profil pro
    autres
    Inscrit en
    Février 2018
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : autres
    Secteur : Transports

    Informations forums :
    Inscription : Février 2018
    Messages : 34
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par sabotage Voir le message
    C'est incompréhensible ce que tu fais.

    donc tu souhaites que quand il y a plus de 0 caractères, il y ait une redirection ?
    Mouais...il y as deux redirections qui emmène sur la page de chat, l'une sans enregistrement au cas où le champs soit vide ou contient des caractère invisible (genre espace), et l'autre redirection avec enregistrement pour les champs qui ne sont pas vides et contient des caractères, le code fonctionne correctement...sauf qu'il ne vous conviens pas apparemment, car il n'est pas conforme à PHP.

    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
    20
    21
    ?php
    session_start(); 
     
    if (empty($_POST['titre'] AND $_POST['contenu'] AND strlen(trim($_POST['titre'])) > 0 AND  strlen(trim($_POST['contenu'])) > 0))
    	{
    	 header('location: billets_forum.php' );
    	}
     
    else 
    	{
    	require "#require/connet_bdd.php"; //Connexion à la base de données
     
    	// Insertion du message à l'aide d'une requête préparée
    	$req = $bdd->prepare('INSERT INTO billets (titre, date_creation, contenu) VALUES(?, NOW(), ?)');
    	$req->execute(array($_POST['titre'], $_POST['contenu']));  
     
    	// Redirection du visiteur vers la page du forum
    	header('Location: forum.php');
    	}
     
    ?>

  17. #17
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_POST['titre'] AND $_POST['contenu'] AND strlen(trim($_POST['titre'])) > 0 AND  strlen(trim($_POST['contenu'])) > 0))
    Je traduis :

    • SI ("titre" est vide et sa longueur est supérieure à zéro) ET ("contenu" est vide et sa longueur est supérieure à zéro)

    BREF : la condition ne risque JAMAIS d'être vraie !

    Il faudrait peut-être LIRE ce qu'on t'écrit.
    Sinon, on va arrêter de perdre notre temps à te répondre...

    Rappel : je t'ai donné la solution nécessaire et SUFFISANTE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if( !empty(trim($_POST['titre'])) && !empty(trim($_POST['contenu'])) )
    {
       // les 2 sont OK : on traite
    } else {
       // au moins une des 2 données est VIDE.
    }
    Et je t'invite à LIRE LA DOC :

Discussions similaires

  1. Problème lors de l'envoie d'un mail (JavaMail)
    Par Invité dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/05/2006, 10h23
  2. [MySQL] Exécuter 2 actions lors de l'envoi d'un formulaire
    Par mathieu7497 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/03/2006, 21h16
  3. [javamail] pb lors de l'envoi d'un mail
    Par mawashee dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 08/09/2005, 16h50
  4. A respecter lors de l'envoi d'un message (Version 2)
    Par Aurelien.Regat-Barrel dans le forum Windows
    Réponses: 0
    Dernier message: 04/01/2003, 15h59

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