Bonjour,
je bute sur un problème, les fameux "espace" lorsque je mets un espace ou plusieurs dans le formulaire "message" et je valide il m'envoie un message vide (enfin pas vide puisqu'il contient un (ou des espace), mais qui est invisible) ce qui qui est normale Smiley langue

j'ai trouvé cette petite fonction qui me supprime le surplus d'espace, mais qui fonctionne pas si il n'y as pas de caractère.
function STrim($string)
{
$string = preg_replace('/[ ]+/', ' ', $string);
return $string;
}


auriez-vous une astuce pour éviter l'envoi d'espace sans caractère ?

Merci.
Merci GuillaumeBauer,
J'ai essayé ce code
$string = trim($string);
cette fonction enlève les espace avant et après un caractère, mais vu qu'il n'y a pas de caractère Smiley confus
Modifié par ricem (13 Feb 2018 - 12:33)
ricem a écrit :
Merci GuillaumeBauer,
J'ai essayé ce code
$string = trim($string);
cette fonction enlève les espace avant et après un caractère, mais vu qu'il n'y a pas de caractère Smiley confus


cette fonction enlève les espaces... avant et après ou total si il n'y a pas de caractère Smiley smile
pchlj,
Mouais, alors pourquoi, ça ne fonctionne pas quand je le mets ??
je l'utilise comme ceci:
function STrim($string)
		{
			$string = trim($string); // Enlève les espaces avant et après un caractère
			$string = preg_replace('/[ ]+/', ' ',  $string); //Supprime les espaces superflu 
			return $string;      	
		}
Je pense qu'il faut plutôt utiliser une expression comme

$string = trim(preg_replace("/\s+", " ", $string));

Explication:
preg_replace("/\s+", " ", $string) remplace les occurrences simples ou multiples des caractère de classe \s (espace, tabulation, newline) par un espace
trim() supprime un espace éventuel en début ou en fin de chaîne
Merci PapyJP,
J'ai essayé mais ça fonctionne pas non plus, il prend toujours les espaces comme un caractère Smiley langue
ricem a écrit :
Merci PapyJP,
J'ai essayé mais ça fonctionne pas non plus, il prend toujours les espaces comme un caractère Smiley langue


ce qui n'est absolument pas possible !
Donc ce n'est pas là que se situe le problème Smiley cligne
t'as un peu plus de détail de code autour ??

pour que tu comprennes bien Smiley smile


$string= "   ";
echo "->".$string."<-";
$string = trim($string);
echo "\nAprès transformation\n";
echo "->".$string."<-";


exécute ce bout de code tout seul et tu verras que tu n'as plus d'espace !

donc ton problème est bien ailleurs
pchlj,

Alors pour le code, il se divise en deux, chatbox et chatbox_traitement:
Le 1ér

<form action="chatbox_traitement.php" method="post">
			<p> <input class="form" type="text" name="message" id="message" size="80" placeholder="Éditer votre message ici"  />
			<input type="submit" class="form2" style="" value="Envoyer" /></p> 
			</form>
			
		<?php   // Connexion à la base de données
		function STrim($string)
		{
			$string = trim($string); // Enlève les espaces avant et après un caractère
			$string = trim(preg_replace("/\s+", " ", $string)); //Supprime les espaces superflu 
			return $string;    
		
		}
		
		try
		
		{
			$bdd = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
			array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
			
		}
		catch(Exception $e)
		{
				die('Erreur : '.$e->getMessage());
		}

		// Récupération des 18 derniers messages
		$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 18');

		// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
		while ($donnees = $reponse->fetch())
		{
			
			echo '<div class="post"> <h4 class="pseudo">' . htmlspecialchars($donnees['pseudo']) . ':</h4> <div class="msg"> <p>' . htmlspecialchars($donnees['message']) . '</p> </div> </div>';
		}		
		
		$reponse->closeCursor();
		?>


et le 2ème

<?php
session_start(); 

if (empty($_POST['message']))
	{
	 header('location: chatbox.php' );
	}

else
	
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
	array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');
$req->execute(array($_SESSION['pseudo'], $_POST['message']));  

// Redirection du visiteur vers la page du minichat
header('Location: chatbox.php');
?>

ton code m'as rien renvoyé, peut être pas mis au bon endroit Smiley lol
mmmm... j'aurai surement pas fait comme ça mais bon


// Insertion du message à l'aide d'une requête préparée
$message = trim($_POST['message']);
if($message != ''){ // là on teste si NON VIDE tu peux aussi tester avec : strlen($message) > 0
  $req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');
  $req->execute(array($_SESSION['pseudo'], $_POST['message'])); 
}else{
 // le message est vide et ne contenait que des espaces tu renvoi où tu veux [cligne]
}


voilà ta solution.. je sais pas où tu fais ton trim dans ton code je vois pas l'utilisation de la fonction
pchlj,
je fais l’utilisation de la fonction trim dans le 1er code, Dans le début du code après le balise <form></form>

J'ai essayé ton code mais ça n'enregistre plus rien... Smiley eek
Modifié par ricem (13 Feb 2018 - 19:44)
J'ai mis ce code et ça fonctionne

<?php
session_start(); 

if (empty($_POST['message'] AND strlen(trim($_POST['message'])) > 0 ))
	{
	 header('location: chatbox.php' );
	}

else
	
// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=monsite;charset=utf8', 'root', '');
	array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');
$req->execute(array($_SESSION['pseudo'], $_POST['message']));  

// Redirection du visiteur vers la page du chatbox
header('Location: chatbox.php');
?>


Smiley smile Smiley biggrin Smiley lol
Modifié par ricem (13 Feb 2018 - 21:44)
Meilleure solution