Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/09/2011, 09h19   #1
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Par défaut Mysql apostrophe récalcitrante

Bonjour,

je me prend la tête sur une apostrophe qui ne disparait pas malgré les stripslashes...
Merci de votre aide.

Résultat du code ci-dessous (saisie dans le formulaire $_POST['recherche' : l'autre )
Aucun événement pour : l\'autre
Saisie 2 : l\\\'autre
Saisie : l\\\'autre
POST : l\'autre


Code du traitement du formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?php session_start();
require ("configuration.php"); //accès à la base de données
$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$requete = mysql_query("SELECT * FROM pdf_membre WHERE `pseudo`='$pseudo_membre'"); 
$result = mysql_fetch_array ($requete);
$id = $result['id'];
$pseudo = $result['pseudo'];
$mail = $result['mail'];
// si l'utilisateur est connecté, c'est le bandeau membre sinon c'est le bandeau classique...
if (!isset($_SESSION['pseudo']) || $_SESSION['pseudo']=='')
{	// bandeau classique si pas connecté
	$bandeau = 'bandeau.php';	}
else
{	// bandeau membre si connecté
	$bandeau = 'bandeau_membres.php';	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
<div id="mainContent">
 
<?php
// connexion à la base
// require("configuration.php");  déjà fait plus haut
// $sql = connect_sql();  déjà fait plus haut
mysql_query("SET NAMES 'utf8'");
//On determine l'expression a rechercher
if(!empty($_POST['recherche'])) 
{
	$saisie2 = mysql_real_escape_string($_POST['recherche']);
	$remplacements = array('à' => 'a','é' => 'e','è' => 'e','ù' => 'u','ê' => 'e','ô' => 'o');
	$saisie_avant = strtr($saisie2, $remplacements);
	//ayant tout des mots dans leurs informations
 
	// fonction pour nettoyer la chaine de caracteres
	function trimUltime($chaine)
	{
		$chaine = trim($chaine);
		$chaine = str_replace("\t", " ", $chaine);
		$chaine = eregi_replace("[ ]+", " ", $chaine);
		return $chaine;
	}
	$saisie = trimUltime($saisie_avant);
 
    $mots = explode(' ',$saisie);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
	$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if (mysql_num_rows($requete) == 0)
	{
		echo '<br />'; 
		echo '<p>'.'Aucun &eacute;v&eacute;nement pour :'.'<h2>'.'<strong>'.stripslashes($saisie2).'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie 2 :'.'<h2>'.'<strong>'.$saisie2.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie : '.'<h2>'.'<strong>'.$saisie.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'POST : '.'<h2>'.'<strong>'.$_POST['recherche'].'</strong>'.'</h2>'.'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}
	//Si il y a des entrées	  
	else
	{
		echo '<p />';
		echo '<br />'; 
		echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.stripslashes($saisie2).'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie 2 :'.'<h2>'.'<strong>'.$saisie2.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie : '.'<h2>'.'<strong>'.$saisie.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'POST : '.'<h2>'.'<strong>'.$_POST['recherche'].'</strong>'.'</h2>'.'</p>';
 
		$rec = htmlentities($saisie);
		//On fait une boucle pour sortir toutes les entrées
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
		echo '<br />'; 
		while($affiche = mysql_fetch_array($requete))
		{
			//On remet la date au format français
			setlocale (LC_TIME, 'fr_FR.UTF8');
			$date_affiche = $affiche["date_ev"];
			$date_vue = strftime("%A %d %B",strtotime("$date_affiche"));
			//On affiche les entrées
			echo '<p />';
			echo '<br />';
			echo '<b>'.stripslashes($affiche["type_evenement"])."   ".'</b>';
			echo '<br />';
			echo "     ".stripslashes($affiche["type_etab"])."   ";
			echo '<b>'."     ".$date_vue."   ".'</b>';
			echo "     ".stripslashes($affiche["secteur"])."   ";
			echo "Début à : ".stripslashes($affiche["heure"])."   ";
			echo "  Tarif : ".stripslashes($affiche["tarif"])."   ";
			echo " ".stripslashes($affiche["montant"])."   ";
			echo " où ? ".stripslashes($affiche["lieu"])."   ";echo '<br />';
			echo '<br />';
			echo '<div class="autre">';
			echo '<span style="color:#8E236B;">';
			echo '<strong>';
			echo stripslashes($affiche["nom"]);
			echo '</strong>';
			echo '</span>';
			echo '<br />';
			echo '<div class="cache">';
			echo '<strong>';
			echo stripslashes($affiche["description"]);
			echo '<br/>';
			echo  !empty($affiche2["site_infos"]) ? '<a href="'.stripslashes($affiche2["site_infos"]).'">Informations</a>' : ' ';
			echo '<br/>';
			echo " mis en ligne par  ".stripslashes($affiche["pseudo_ev"])."   ";
			echo '</strong>';
			echo '</div>';
			echo '</div>';
			echo '<br />';
		}	// fin du while
 
	}	// fin du ELSE
 
 }	// fin du if !empty $_POST'recherche'
 
 else	
	{
		$saisie = "";
		echo '<br />'; 
		echo '<b>'.'Vous n\'avez rien saisi !'.'</b>';
		echo '<p>'.stripslashes($saisie).'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}	// fin du deuxième ELSE
 
// Fermeture de la connexion à la base de données
mysql_close();		
 
?>
</div> 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
</body>
</html>
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 09h33   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Remplace :
Code :
	$saisie2 = mysql_real_escape_string($_POST['recherche']);
par :
Code :
1
2
	$chaine_rech = stripslashes($_POST['recherche']);
	$saisie2 = mysql_real_escape_string($chaine_rech);
- $_POST['recherche'] ajoute automatiquement des slashes.
- mysql_real_escape_string() prépare la chaine pour la requête SQL, et ajoute automatiquement des slashes.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 09h44   #3
Membre éclairé
 
Avatar de ledisciple
 
Homme François
observateur de nuage niveau 2.3
Inscription : août 2008
Messages : 546
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 27
Localisation : France

Informations professionnelles :
Activité : observateur de nuage niveau 2.3

Informations forums :
Inscription : août 2008
Messages : 546
Points : 313
Points : 313
... et franchement, n'hésite pas à te mettre aux requêtes préparées ce n'est pas très compliqué à comprendre et ça va te faciliter le travail

c'est très bien expliqué ici : http://php.developpez.com/faq/sgbd/?page=pdo#pdo-query et ici http://php.net/manual/fr/pdo.prepare.php
__________________
_____________________________________________
Tours Football Club - Turonorum Civitas Libera
ledisciple est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/09/2011, 09h53   #4
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
j'ai modifié le code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
// connexion à la base
// require("configuration.php");  déjà fait plus haut
// $sql = connect_sql();  déjà fait plus haut
mysql_query("SET NAMES 'utf8'");
//On determine l'expression a rechercher
if(!empty($_POST['recherche'])) 
{
	$chaine_recherchee = stripslashes($_POST['recherche']);
	$saisie2 = mysql_real_escape_string($chaine_recherchee);
	$remplacements = array('à' => 'a','é' => 'e','è' => 'e','ù' => 'u','ê' => 'e','ô' => 'o');
	$saisie_avant = strtr($saisie2, $remplacements);
	//ayant tout des mots dans leurs informations
 
	// fonction pour nettoyer la chaine de caracteres
	function trimUltime($chaine)
	{
		$chaine = trim($chaine);
		$chaine = str_replace("\t", " ", $chaine);
		$chaine = eregi_replace("[ ]+", " ", $chaine);
		return $chaine;
	}
	$saisie = trimUltime($saisie_avant);
 
    $mots = explode(' ',$saisie);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
	$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if (mysql_num_rows($requete) == 0)
	{
		echo '<br />'; 
		echo '<p>'.'Aucun &eacute;v&eacute;nement pour :'.'<h2>'.'<strong>'.stripslashes($saisie2).'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie 2 :'.'<h2>'.'<strong>'.$saisie2.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie : '.'<h2>'.'<strong>'.$saisie.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'POST : '.'<h2>'.'<strong>'.$_POST['recherche'].'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'chaine_recherchee : '.'<h2>'.'<strong>'.$chaine_recherchee.'</strong>'.'</h2>'.'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}
	//Si il y a des entrées	  
	else
	{
		echo '<p />';
		echo '<br />'; 
		echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.stripslashes($saisie2).'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie 2 :'.'<h2>'.'<strong>'.$saisie2.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'Saisie : '.'<h2>'.'<strong>'.$saisie.'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'POST : '.'<h2>'.'<strong>'.$_POST['recherche'].'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'chaine_recherchee : '.'<h2>'.'<strong>'.$chaine_recherchee.'</strong>'.'</h2>'.'</p>';
mais il ne me trouve pas l'entrée ( PS : ma base SQL est en utf8_unicode_ci )

résultats :
Aucun événement pour : l'autre
Saisie 2 : l\'autre
Saisie : l\'autre
POST : l\'autre
chaine_recherchee : l'autre
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 09h59   #5
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Ta fonction de remplacement de caractères accentués est plutôt... légère :
Code :
1
2
3
4
5
6
7
function supprime_accents($chaine)
{
	$avec_accent 	= "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÒÓÔÕÖŒØÙÚÛÜÝàáâãäåæçèéêëìíîïðòóôõöùúûüýÿÑñŠšœ";
	$sans_accent 	= "AAAAAAACEEEEIIIIOOOOOOOUUUUYaaaaaaaceeeeiiiioooooouuuuyynnsso";
	$chaine 	= strtr($chaine, $avec_accent, $sans_accent);
	return $chaine;
}
A part ca, les résultats que tu obtiens sont cohérents.
A toi d'utiliser les "bonnes variables" au "bon endroit".
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/09/2011, 10h35   #6
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
j'ai modifié mais voici les résultats : il m'affiche tous les enregistrements car
le critère est vide !
je comprends pas..
Voici les résultats pour : l'autre
$saisie2 : l\'autre
$saisie :
$saisie_avant :


Code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php session_start();
require ("configuration.php"); //accès à la base de données
$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$requete = mysql_query("SELECT * FROM pdf_membre WHERE `pseudo`='$pseudo_membre'"); 
$result = mysql_fetch_array ($requete);
$id = $result['id'];
$pseudo = $result['pseudo'];
$mail = $result['mail'];
// si l'utilisateur est connecté, c'est le bandeau membre sinon c'est le bandeau classique...
if (!isset($_SESSION['pseudo']) || $_SESSION['pseudo']=='')
{	// bandeau classique si pas connecté
	$bandeau = 'bandeau.php';	}
else
{	// bandeau membre si connecté
	$bandeau = 'bandeau_membres.php';	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
<div id="mainContent">
 
<?php
// connexion à la base
// require("configuration.php");  déjà fait plus haut
// $sql = connect_sql();  déjà fait plus haut
mysql_query("SET NAMES 'utf8'");
//On determine l'expression a rechercher
if(!empty($_POST['recherche'])) 
{
	$chaine_recherchee = stripslashes($_POST['recherche']);
	$saisie2 = mysql_real_escape_string($chaine_recherchee);
 
	function supprime_accents($chaine)
		{	
			$avec_accent 	= "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÒÓÔÕÖŒØÙÚÛÜÝàáâãäåæçèéêëìíîïðòóôõöùúûüýÿÑñŠšœ";
			$sans_accent 	= "AAAAAAACEEEEIIIIOOOOOOOUUUUYaaaaaaaceeeeiiiioooooouuuuyynnsso";
			$chaine 	= strtr($chaine, $avec_accent, $sans_accent);
		}
 
	$saisie_avant = supprime_accents($saisie2);
	//ayant tout des mots dans leurs informations
 
	// fonction pour nettoyer la chaine de caracteres : effacer les espaces
	function trimUltime($chaine)
	{
		$chaine = trim($chaine);
		$chaine = str_replace("\t", " ", $chaine);
		$chaine = eregi_replace("[ ]+", " ", $chaine);
		return $chaine;
	}
	$saisie = trimUltime($saisie_avant);
 
    $mots = explode(' ',$saisie);//sépare l'expression en mots cles
	foreach($mots as $mot)
    {
	$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if (mysql_num_rows($requete) == 0)
	{
		echo '<br />'; 
		echo '<p>'.'Aucun &eacute;v&eacute;nement pour :'.'<h2>'.'<strong>'.stripslashes($saisie2).'</strong>'.'</h2>'.'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
		echo '<p>'.'$saisie2 : '.$saisie2.'</p>'; 
		echo '<p>'.'$saisie : '.$saisie.'</p>'; 
		echo '<p>'.'$saisie_avant : '.$saisie_avant.'</p>'; 
 
	}
	//Si il y a des entrées	  
	else
	{
		echo '<p />';
		echo '<br />'; 
		echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.stripslashes($saisie2).'</strong>'.'</h2>'.'</p>';
		echo '<p>'.'$saisie2 : '.$saisie2.'</p>'; 
		echo '<p>'.'$saisie : '.$saisie.'</p>'; 
		echo '<p>'.'$saisie_avant : '.$saisie_avant.'</p>'; 
 
		//On fait une boucle pour sortir toutes les entrées
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
		echo '<br />'; 
		while($affiche = mysql_fetch_array($requete))
		{
			//On remet la date au format français
			setlocale (LC_TIME, 'fr_FR.UTF8');
			$date_affiche = $affiche["date_ev"];
			$date_vue = strftime("%A %d %B",strtotime("$date_affiche"));
			//On affiche les entrées
			echo '<p />';
			echo '<br />';
			echo '<b>'.stripslashes($affiche["type_evenement"])."   ".'</b>';
			echo '<br />';
			echo "     ".stripslashes($affiche["type_etab"])."   ";
			echo '<b>'."     ".$date_vue."   ".'</b>';
			echo "     ".stripslashes($affiche["secteur"])."   ";
			echo "Début à : ".stripslashes($affiche["heure"])."   ";
			echo "  Tarif : ".stripslashes($affiche["tarif"])."   ";
			echo " ".stripslashes($affiche["montant"])."   ";
			echo " où ? ".stripslashes($affiche["lieu"])."   ";echo '<br />';
			echo '<br />';
			echo '<div class="autre">';
			echo '<span style="color:#8E236B;">';
			echo '<strong>';
			echo stripslashes($affiche["nom"]);
			echo '</strong>';
			echo '</span>';
			echo '<br />';
			echo '<div class="cache">';
			echo '<strong>';
			echo stripslashes($affiche["description"]);
			echo '<br/>';
			echo  !empty($affiche2["site_infos"]) ? '<a href="'.stripslashes($affiche2["site_infos"]).'">Informations</a>' : ' ';
			echo '<br/>';
			echo " mis en ligne par  ".stripslashes($affiche["pseudo_ev"])."   ";
			echo '</strong>';
			echo '</div>';
			echo '</div>';
			echo '<br />';
		}	// fin du while
 
	}	// fin du ELSE
 
 }	// fin du if !empty $_POST'recherche'
 
 else	
	{
		$saisie = "";
		echo '<br />'; 
		echo '<b>'.'Vous n\'avez rien saisi !'.'</b>';
		echo '<p>'.stripslashes($saisie).'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}	// fin du deuxième ELSE
 
// Fermeture de la connexion à la base de données
mysql_close();		
 
?>
</div> 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
</body>
</html>
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 11h31   #7
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Oups ! j'avais oublié return $chaine; en fin de fonction !
Ce que tu aurais pu voir toi même, non?

Et voici un conseil pour éviter de te mélanger les pinceaux : mets des noms de variables explicites :
Code :
1
2
3
4
5
6
7
8
9
 
	$chaine_post_recup 	= stripslashes($_POST['recherche']);
 
	$chaine_pour_requete 	= mysql_real_escape_string($chaine_post_recup);
 
	$chaine_sans_accent 	= supprime_accents($chaine_post_recup);
	$chaine_pour_recherche 	= trimUltime($chaine_sans_accent);
 
	$chaine_pour_affichage 	= htmlspecialchars($chaine_post_recup);
Chaque variable a une utilisation particulière !
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 11h34   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 128
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 128
Points : 8 488
Points : 8 488
problème de magic_quote ?
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 21h24   #9
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
mon code corrigé :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
<?php session_start();
require ("configuration.php"); //accès à la base de données
$sql = connect_sql();
$pseudo_membre = $_SESSION['pseudo'];
$requete = mysql_query("SELECT * FROM pdf_membre WHERE `pseudo`='$pseudo_membre'"); 
$result = mysql_fetch_array ($requete);
$id = $result['id'];
$pseudo = $result['pseudo'];
$mail = $result['mail'];
// si l'utilisateur est connecté, c'est le bandeau membre sinon c'est le bandeau classique...
if (!isset($_SESSION['pseudo']) || $_SESSION['pseudo']=='')
{	// bandeau classique si pas connecté
	$bandeau = 'bandeau.php';	}
else
{	// bandeau membre si connecté
	$bandeau = 'bandeau_membres.php';	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />	
<title>MON SITE</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<?php include($bandeau); ?> <!-- insère le bandeau principal en haut en fonction de la connexion -->
<div id="mainContent">
 
<?php
// fonction pour supprimer les accents
function supprime_accents($chaine)
		{	
			$avec_accent 	= "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÒÓÔÕÖŒØÙÚÛÜÝàáâãäåæçèéêëìíîïðòóôõöùúûüýÿÑñŠšœ";
			$sans_accent 	= "AAAAAAACEEEEIIIIOOOOOOOUUUUYaaaaaaaceeeeiiiioooooouuuuyynnsso";
			$chaine 	= strtr($chaine, $avec_accent, $sans_accent);
			return $chaine;
		}
// fonction pour nettoyer la chaine de caracteres
	function trimUltime($chaine)
	{
		$chaine = trim($chaine);
		$chaine = str_replace("\t", " ", $chaine);
		$chaine = eregi_replace("[ ]+", " ", $chaine);
		return $chaine;
	}
 
// connexion à la base
// require("configuration.php");  déjà fait plus haut
// $sql = connect_sql();  déjà fait plus haut
mysql_query("SET NAMES 'utf8'");
//On determine l'expression a rechercher
if(!empty($_POST['recherche'])) 
{
	$chaine_post_recup 		= stripslashes($_POST['recherche']);				// recupere la valeur saisie
 	$chaine_pour_requete 	= mysql_real_escape_string($chaine_post_recup);		// valeur avec protection contre injections sql
 	$chaine_sans_accent 	= supprime_accents($chaine_post_recup);				// valeur dans accents
	$chaine_pour_recherche 	= trimUltime($chaine_sans_accent);					// valeur nettoye sans espaces inutiles
 	$chaine_pour_affichage 	= htmlspecialchars($chaine_post_recup);				// valeur a afficher sans les slashes & cie...
 
	$mots = explode(' ',$chaine_pour_requete);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
		$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if (mysql_num_rows($requete) == 0)
	{
		echo '<br />'; 
		echo '<p>'.'Aucun &eacute;v&eacute;nement pour :'.'<h2>'.'<strong>'.$chaine_pour_affichage.'</strong>'.'</h2>'.'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}
	//Si il y a des entrées	  
	else
	{
		echo '<p />';
		echo '<br />'; 
		echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.$chaine_pour_affichage.'</strong>'.'</h2>'.'</p>';
 
		//On fait une boucle pour sortir toutes les entrées
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
		echo '<br />'; 
		while($affiche = mysql_fetch_array($requete))
		{
			//On remet la date au format français
			setlocale (LC_TIME, 'fr_FR.UTF8');
			$date_affiche = $affiche["date_ev"];
			$date_vue = strftime("%A %d %B",strtotime("$date_affiche"));
			//On affiche les entrées
			echo '<p />';
			echo '<br />';
			echo '<b>'.stripslashes($affiche["type_evenement"])."   ".'</b>';
			echo '<br />';
			echo "     ".stripslashes($affiche["type_etab"])."   ";
			echo '<b>'."     ".$date_vue."   ".'</b>';
			echo "     ".stripslashes($affiche["secteur"])."   ";
			echo "Début à : ".stripslashes($affiche["heure"])."   ";
			echo "  Tarif : ".stripslashes($affiche["tarif"])."   ";
			echo " ".stripslashes($affiche["montant"])."   ";
			echo " où ? ".stripslashes($affiche["lieu"])."   ";echo '<br />';
			echo '<br />';
			echo '<div class="autre">';
			echo '<span style="color:#8E236B;">';
			echo '<strong>';
			echo stripslashes($affiche["nom"]);
			echo '</strong>';
			echo '</span>';
			echo '<br />';
			echo '<div class="cache">';
			echo '<strong>';
			echo stripslashes($affiche["description"]);
			echo '<br/>';
			echo  !empty($affiche2["site_infos"]) ? '<a href="'.stripslashes($affiche["site_infos"]).'">Informations</a>' : ' ';
			echo '<br/>';
			echo " mis en ligne par  ".stripslashes($affiche["pseudo_ev"])."   ";
			echo '</strong>';
			echo '</div>';
			echo '</div>';
			echo '<br />';
		}	// fin du while
 
	}	// fin du ELSE
 
 }	// fin du if !empty $_POST'recherche'
 
 else	
	{
		$chaine_pour_affichage = "";
		echo '<br />'; 
		echo '<b>'.'Vous n\'avez rien saisi !'.'</b>';
		echo '<p>'.$chaine_pour_affichage.'</p>';
		echo '<a href="javascript:window.history.go(-1)">'.'Retour'.'</a>'; // retour en page précédente
	}	// fin du deuxième ELSE
 
// Fermeture de la connexion à la base de données
mysql_close();		
 
?>
</div> 
<?php include('bas_de_page.php'); ?> <!-- insère le bas de page  -->
</body>
</html>
le souci ne vient pas de mon code mais de la saisie dans ma base Sql :

Interclassement : utf8_unicode_ci

Si la saisie provient de mon formulaire d'insertion, tout va bien : colonne 'nom' = l\'autre

Si j'importe dans PhpMyadmin un fichier d'événement depuis un fichier .csv : colonne 'nom' = l'autre

Pourtant, j'ai essayé Importer avec "Jeu de caractères du fichier" en utf-8 et aussi avec iso8859-1 mais aucune des deux possibilités ne fonctionne...
même en enlevant dans les options "Caractère spécial" le \ ....

Savez-vous comment importer un .csv pour que le Sql contienne bien les \ ?
ou un autre moyen (interclassement...)... ?
Merci.
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 09h22   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 128
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 128
Points : 8 488
Points : 8 488
tu devrais déjà découpé ton code c'est vraiment trop fouillis, y'a trop de fonctions inutiles, et t'as pas répondu a ma question
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 09h29   #11
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
C'est bon, j'ai trouvé un moyen pour insérer mes événements :

Dans mon tableur où se trouvent tous mes événements, je remplace toutes les apostrophes ' par \\'
Exemple :
l'artiste devient l\\'artiste

Ensuite dans PHPMyadmin, j'importe mon ficher enregistré en .csv
(jeu de caractères iso-8859-1)

et dans la colonne nom, je récupère bien l\'artiste
et ça fonctionne !
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 09h32   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 128
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 128
Points : 8 488
Points : 8 488
t'as pas avoir de slashes en plus dans ta base
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 09h39   #13
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour, comme dit stealth35, tu prends le problème à l'envers !
Au lieu d'ajouter des slashes dans ta base, il faut au contraire éviter d'en mettre !
... et ensuite traiter "normalement" les données.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 12h17   #14
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Alors, magic quotes était activé, je le désactive avec la fonction ci-dessous :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
// pour desactiver les magic quote ou apostrophes....
function stripslashes_r($var) // Fonction qui supprime l'effet des magic quotes
{	if(is_array($var)) // Si la variable passée en argument est un array, on appelle la fonction stripslashes_r dessus
        {	return array_map('stripslashes_r', $var); }
        else // Sinon, un simple stripslashes suffit
        { return stripslashes($var); }
}
if(get_magic_quotes_gpc()) // Si les magic quotes sont activés, on les désactive avec notre super fonction ! ;)
{
   $_GET = stripslashes_r($_GET);
   $_POST = stripslashes_r($_POST);
   $_COOKIE = stripslashes_r($_COOKIE);
}
mais j'ai toujours un souci lors de la recherche avec les données importées depuis un fichier .csv alors qu'avec l'insertion depuis un formulaire, cela fonctionne bien...

Je reprends depuis le début et vous demande :

Quel est l'interclassement à utiliser dans Mysql ?
moi j'ai "utf8_unicode_ci"

et comment importer correctement un fichier .csv ?
Merci.

Pour récupérer un formulaire, j'ai :
Code :
1
2
3
4
5
6
....if(isset($_POST['nom4'])) $nom4=mysql_real_escape_string($_POST['nom4']);
else $nom4="";
mysql_query("SET NAMES utf8");
$sql2 = "INSERT INTO evenement(...., nom, ....) 
VALUES('...,'$nom4',.......')"; 
....
pour rechercher dans le formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
mysql_query("SET NAMES 'utf8'");
//On determine l'expression a rechercher
if(!empty($_POST['recherche'])) 
{
	$chaine_post_recup 		= stripslashes($_POST['recherche']);				// recupere la valeur saisie
 	$chaine_pour_requete 	= mysql_real_escape_string($chaine_post_recup);		// valeur avec protection contre injections sql
 	$chaine_sans_accent 	= supprime_accents($chaine_post_recup);				// valeur dans accents
	$chaine_pour_recherche 	= trimUltime($chaine_sans_accent);					// valeur nettoye sans espaces inutiles
 	$chaine_pour_affichage 	= htmlspecialchars($chaine_post_recup);				// valeur a afficher sans les slashes & cie...
 
	$mots = explode(' ',$chaine_pour_requete);//sépare l'expression en mots cles
    foreach($mots as $mot)
    {
		$req2 = 'SELECT * FROM evenement WHERE nom LIKE "%'.$mot.'%" ';
	}
	$requete = mysql_query($req2) or die ('Erreur : '.mysql_error() );
	$total = mysql_num_rows($requete);
	//On vérifie que la table contient quelque chose
	if (mysql_num_rows($requete) == 0)
	{
		echo '<br />'; 
		echo '<p>'.'Aucun &eacute;v&eacute;nement pour :'.'<h2>'.'<strong>'.$chaine_pour_affichage.'</strong>'.'</h2>'.'</p>';
		}
	//Si il y a des entrées	  
	else
	{
		echo '<p>'.'Voici les r&eacute;sultats pour :'.'<h2>'.'<strong>'.$chaine_pour_affichage.'</strong>'.'</h2>'.'</p>';
		//On fait une boucle pour sortir toutes les entrées
		while($affiche = mysql_fetch_array($requete))
		{
			//On affiche les entrées
			echo stripslashes($affiche["nom"]);
Merci d'avance de votre aide, désolé de faire l'idiot mais je ne vois plus comment faire
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h55.


 
 
 
 
Partenaires

Hébergement Web