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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Insérer le caractère "+" dans ma base de donnée

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

par nico44530 » 13 mars 2014, 13:07

C'est en mettant un + entre chaque variable et un & à chaque liaison de plusieurs variable, sans oublier les doubles guillemets

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

par xTG » 13 mars 2014, 12:59

Des fonctions d'échappements telle que celle que tu as utilisé.

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

par nico44530 » 13 mars 2014, 12:14

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

par xTG » 13 mars 2014, 09:30

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: Insérer le caractère "+" dans ma base de donnée

par nico44530 » 13 mars 2014, 01:06

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: Insérer le caractère "+" dans ma base de donnée

par xTG » 12 mars 2014, 20:37

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

par nico44530 » 12 mars 2014, 15:07

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

par xTG » 12 mars 2014, 14:17

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

par nico44530 » 12 mars 2014, 13:04

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

par xTG » 12 mars 2014, 09:06

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

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

par nico44530 » 12 mars 2014, 03:16

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