Page 1 sur 1

Insérer le caractère "+" dans ma base de donnée

Posté : 12 mars 2014, 03:16
par nico44530
Bonjour,

Je n'arrive pas à insérer le caractère "+" dans ma base de donnée via mon formulaire.
Il possède deux fonctions avant l'insertion et une à l'affichage :
$statut_text = trim(htmlspecialchars($_POST['statut_text']));
echo nl2br($statut['statut_text']);
Ma base de donnée est encodée en utf8_general_ci et la connexion à la BDD est aussi en UTF8

Comment faire pour que ce caractère soit affiché ?

Merci d'avance

Re: Insérer le caractère "+" dans ma base de donnée

Posté : 12 mars 2014, 09:06
par xTG
Je suppose que tu n'utilises aucune fonction pour contrer les injections SQL ?
PDO => requête préparée ou bien PDO::quote
Mysql => mysql_real_escape_string

Re: Insérer le caractère "+" dans ma base de donnée

Posté : 12 mars 2014, 13:04
par nico44530
J'utilise les requêtes préparées mais ça ne résout pas mon problème 8-| :
$resultat = Bdd::connect() -> prepare(INSERT INTO users_statut (user_id, statut_text, statut_acces, statut_photo, statut_etat, statut_date) VALUES (:user_id, :statut_text, :statut_acces, :statut_photo, :statut_etat, NOW()));
$resultat -> execute(array('user_id' => $user_id,'statut_text' => trim(html_entity_decode($statut_text)),'statut_acces' => $statut_acces,'statut_photo' => $statut_photo,'statut_etat' => $statut_etat));

Re: Insérer le caractère "+" dans ma base de donnée

Posté : 12 mars 2014, 14:17
par xTG
Euh... Bah il n'y a pas de raison dans ce cas. :|
Que donnes un affichage de $statut_text ? Comporte-t-il le caractère '+' ?
Même chose pour $_POST['statut_text'].

Re: Insérer le caractère "+" dans ma base de donnée

Posté : 12 mars 2014, 15:07
par nico44530
Si j'insère par exemple :

salut + ça va ?
Le résultat sera en base de donnée : salut ça va ?

Il y aura un espace entre les 2 mots.

Si maintenant j'insère que le +, le formulaire ne s'envois pas.

Je précise que j'ai ajouté 2 fonctions à ma variable et que à l'affichage j'utilise la fonction nl2br($ :
$statut_text = trim(html_entity_decode($_POST['statut_text']));
if(isset($statut_text) && !empty($statut_text)){
	if(($statut_acces == 'amis') || ($statut_acces == 'moi') || ($statut_acces == 'public')){
	$resultat = Bdd::connect() -> prepare(INSERT.USERSZ_STATUT.STATUTINSERT);
	$resultat -> execute(array('user_id'=>$user_id,'statut_text'=>trim(html_entity_decode($statut_text)),'statut_acces'=>$statut_acces,'statut_photo'=>$statut_photo,'statut_etat'=>$statut_etat));
        ...
        // Affichage de la nouvelle actu
        ...
        }
}
Voici la connexion à la base de donnée qui indique que le charset est UTF8 :
class Bdd {
	private static $connexion = NULL;
	
	public static function connect(){
		if(!self::$connexion){
			self::$connexion = new PDO(DNS, USER, PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
			self::$connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		}
		return self::$connexion;
	}
}
Et le submit en ajax :
[javascript]
$('#statut').submit(function(){
var statut_text = $(this).find('textarea[name=statut_text]').val();
var statut_acces = $(this).find('input[name=statut_acces]').val();
var statut_photo = $(this).find('input[name=statut_photo]').val();
var statut_etat = $(this).find('input[name=statut_etat]').val();
var dataString = 'statut_text='+statut_text+'&statut_acces='+statut_acces+'&statut_photo='+statut_photo+'&statut_etat='+statut_etat;
$('#loadStatut').show();
setTimeout(function(){
$.ajax({
type: 'POST',
url: '../users/ajax/updatestatus.php',
data: dataString,
success: function(data){
$('textarea[name=statut_text]').attr('value','').css({'height':'40px'});
$(data).insertAfter('#newsPost').hide().fadeIn();
$('#loadStatut').hide();
}
});
},800);
return false;
});
[/javascript]

Re: Insérer le caractère "+" dans ma base de donnée

Posté : 12 mars 2014, 20:37
par xTG
Ah bah la partie JS...
Tu transmets les variables dans l'url mais sans les échapper (les protéger).
Regardes du côté de urlencode en javascript à l'émission.
Et donc il te faudra utiliser urldecode côté PHP à la réception.

Re: Insérer le caractère "+" dans ma base de donnée

Posté : 13 mars 2014, 01:06
par nico44530
J'ai trouvé ! :)

Dis moi si c'est bien ce que j'ai fais :

À la déclaration de ma variable statut_text j'ai fais :

[javascript]var statut_text = encodeURIComponent($(this).find('textarea[name=statut_text]').val());[/javascript]
Sans utiliser urldecode du côté PHP, ça fonctionne.
Les + et & s'enregistrent et s'affichent correctement :D

Pour protéger les variables, je remplace les simples guillemets par des doubles ?

Merci beaucoup :)

Re: [RESOLU] Insérer le caractère "+" dans ma base de donnée

Posté : 13 mars 2014, 09:30
par xTG
Pour protéger les variables, je remplace les simples guillemets par des doubles ?
C'est à dire ? Simple ou double guillemets ne protègent rien du tout.

Re: [RESOLU] Insérer le caractère "+" dans ma base de donnée

Posté : 13 mars 2014, 12:14
par nico44530
Comment on fait alors pour protéger des variables javascript pour ajax ?

Re: [RESOLU] Insérer le caractère "+" dans ma base de donnée

Posté : 13 mars 2014, 12:59
par xTG
Des fonctions d'échappements telle que celle que tu as utilisé.

Re: [RESOLU] Insérer le caractère "+" dans ma base de donnée

Posté : 13 mars 2014, 13:07
par nico44530
C'est en mettant un + entre chaque variable et un & à chaque liaison de plusieurs variable, sans oublier les doubles guillemets