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:

<?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');
?>

le problème, c'est que je ne sais pas si c'est la bonne façon de faire.
Merci pour votre aide.
Salut,

Voici un exemple fonctionnel si tu veux.


$db= new Connexion;
$date = new \DateTime();
$sql = "INSERT INTO t_commentaire (COM_DATE, COM_AUTEUR, COM_CONTENU, BIL_ID,  LEVEL) VALUES (:COM_DATE, :COM_AUTEUR, :COM_CONTENU, :BIL_ID,  :LEVEL)";
$array = [
    "COM_DATE"      => $date->format('Y-m-d H:i:s'),
    "COM_AUTEUR"    => htmlspecialchars($author),
    "COM_CONTENU"   => htmlspecialchars($content),
    "BIL_ID"        => $postId,
    "LEVEL"         => $level
];
$req = $db->prepare($sql);
$req->execute($array);



Modifié par biduletruck (09 Mar 2018 - 10:21)
Merci biduletruck,
Mais je voudrais savoir d'où viens l'erreur dans mon code, parce que normalement cela devrais fonctionner Smiley hum .
Modérateur
Hello,
attention à tes parenthèses:



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 {

ansi que l'emploi de AND,

ce que tu cherches à faire c'est, je pense:


if (empty($_POST['titre']) || empty($_POST['contenu'])){
  header('location: billets_forum.php' );
}
Merci kustolovic,,

re, j'avais ce code qui est fonctionnelle pour l'envoi de messages dans un chat, qui 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.
voici le code:

<?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 voulais l'adapter pour le forum en dédoublant la variable "IF", pour l'envoi du "titre" et du "contenu", normalement ça devrais fonctionner, je comprend pas.
D'ailleurs ce code viens d'un autre sujet que j'avais résolu grâce à alsacreations Smiley lol
https://forum.alsacreations.com/topic-1-82840-1-Resolu-Supprimer-lenvoi-des-espaces-sans-caractere-dans-un-chat.html
J'espère que vous pourrez m'apporter votre aide encore une fois Smiley langue
Bonjour, je viens de trouver un code qui fonctionne, mais on me dit qu'il n'est pas conventionnelle, enfin qu'il n'est conforme à la grande lois du PHP Smiley lol ...

Voici le code

<?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');
    }
?>


on m'as dit que les parenthèses ne sont pas bien placé dans le IF, pourtant je n'ai pas d'erreur et il fonctionne bien.

J'aimerais avoir l'avis de plusieurs expert, Merci à vous.
Meilleure solution
Bonjour,

Dans ton cas tu souhaites être sûr que tes 2 valeurs soit non vide.

Dans ton exemple pour entrer dans ta boucle de rejet il faut QUE les 2 variables soient vide.

if (empty($_POST['titre'] AND $_POST['contenu'] AND strlen(trim($_POST['titre'])) > 0 AND  strlen(trim($_POST['contenu'])) > 0))


Dans mon exemple on test si au moins l'une des variables est vide pour entrer dans ta boucle de rejet.

if ( (empty($_POST['titre']) && strlen(trim($_POST['titre'])) > 0) || (empty($_POST['contenu']) && strlen(trim($_POST['contenu'])) > 0) )

merci biduletruck,

j'ai essayé ton code, mais comme dit, il enregistre même si l'une des variable est vide et moi, je veux qu'il n'enregistre que si les deux sont remplis, si les deux conditions ne sont pas remplis => rejets.
Donc mon code fonctionne parfaitement et tant pis pour les puriste du PHP Smiley langue , façon, ils ne le verrons pas Smiley lol
Je met en résolu.
Modifié par ricem (13 Mar 2018 - 10:03)