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 24/09/2011, 19h25   #1
Invité de passage
 
Homme Vincent
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : Belgique

Informations forums :
Inscription : avril 2011
Messages : 17
Points : 3
Points : 3
Par défaut Code logique ?

Bonjour à tous,

Je vais vous présenter deux codes, le premier servant à ajouter un article à ma base de donnée, et le suivant à l'afficher. Vous me direz si j'utilise les bonnes fonctions aux bons endroits, parce que j'ai l'un ou l'autre problème d'affichage :

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
 
<?php
			if(!empty($_POST))
			{
				extract($_POST);
 
				if(!empty($titre))
				{
					if(!empty($contenu))
					{
						require("../includes/config.php");
						mysql_connect(DB_HOST, DB_LOGIN, DB_PASS);
						mysql_select_db(DB_BDD);
						$titre = ucfirst($titre);
						$contenu = ucfirst($contenu);
						$sql = "INSERT INTO articles (titre,contenu) VALUES ('$titre', '$contenu')";
						$req = mysql_query($sql) or die("Erreur lors de l'ajout de l'article");
						$titre = "";
						$contenu = "";
						header("Location: index.php");
					}
					else
					{
						$message = "Vous devez préciser le contenu de votre article";
					}
				}
				else
				{
					$message = "Vous devez préciser le titre de votre article";
				}
			}
			?>
Afficher

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<?php
			require("includes/config.php");
			mysql_connect(DB_HOST, DB_LOGIN, DB_PASS);
			mysql_select_db(DB_BDD);
 
			$sql = "SELECT * FROM articles WHERE id={$_GET["id"]}";
			$req = mysql_query($sql) or die("Erreur lors de l'article");
			$data = mysql_fetch_assoc($req);
 
			$titre = htmlspecialchars($data["titre"]);
			$contenu = nl2br(htmlspecialchars($data["contenu"]));
			?>
            <h1><?php echo $titre; ?></h1>
            <div class="scrollable-short">
			<?php echo "<p class=\"reading\">".$contenu."</p>"; ?>
			</div>
Merci de votre aide.. Je ne m'en sors plus avec les htmlentities, nl2br, trim et autre...
vbaguet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/09/2011, 20h42   #2
Membre éclairé
 
Inscription : juillet 2003
Messages : 338
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 338
Points : 339
Points : 339
Il faut reprendre avec méthode:
1/ il te faut savoir si tu as les magic quotes activées ou pas:
- test la fonction get_magic_quotes_gpc()
si actif
tu utiliseras stripslashes($_POST[])
sinon ta variable = $_POST[] ( la variable n'est pas échappée)

2/ tu fais une requête sécurisée avec sprintf et mysql_real_escape_string pour insérer ou updater
$query = sprintf(la requête, variables) et pour les variables tu utilises mysql_real_escape_string().

3/ les htmlentities() traduisent les caractères de spéciaux comme <>& " ' en entitées html pour éviter l'injection malicieuse de code et les enregistrer dans une base. Mais il te faudra pour les afficher utiliser html_entity_decode().

4/trim est intéressante pour enlever des tirets, des espaces comme
Code :
1
2
3
 
$user = trim($user, chr(173)) ; //caractère * trait d'union insécable
$user = trim($user) ;
5/nl2br() ne vas te servir que pour afficher en html. Ne t'en occupes qu'en dernier. Enregistre ton texte pur avec \r\n.

Étudies la doc php: php manual pour chaque fonctions citées.

Bonne lecture et bon code
tatareau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2011, 10h56   #3
Invité de passage
 
Homme Vincent
Inscription : avril 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : Belgique

Informations forums :
Inscription : avril 2011
Messages : 17
Points : 3
Points : 3
Merci, ca m'a beaucoup aidé, j'ai déjà bien avancé et en plus j'y vois plus clair

Mais pour le htmlentities, c'est conseillé de l'utiliser alors ?

Voilà mon code pour l'instant :

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
 
else
						{
							// Annule les effets magic_quotes_gpc/magic_quotes_sybase sur ces variables si ON.
							if(get_magic_quotes_gpc())
							{ 
								$titre = stripslashes($_POST['titre']); 
								$contenu = stripslashes($_POST['contenu']); 
							}
							else
							{ 
								$titre = $_POST['titre']; 
								$contenu = $_POST['contenu']; 
							} 
 
							// Faire une requête sécurisée
      						$query = sprintf("INSERT INTO articles (`titre`, `contenu`) VALUES ('%s', '%s')", 
               				mysql_real_escape_string($titre, $link), 
               				mysql_real_escape_string($contenu, $link)); 
 
      						mysql_query($query, $link); 
 
      						if(mysql_affected_rows($link) > 0)
							{ 
         						header("Location: index.php"); 
      						} 
						}
J'utilise le htmlentities lors de la récupération comme ceci :


Code :
1
2
3
4
5
6
7
 
$sql = "SELECT * FROM articles WHERE id={$_GET["id"]}";
			$req = mysql_query($sql) or die("Erreur lors de l'article");
			$data = mysql_fetch_assoc($req);
 
			$titre = htmlentities(ucfirst($data["titre"]), ENT_QUOTES, 'UTF-8');
			$contenu = nl2br(htmlentities(ucfirst($data["contenu"]), ENT_QUOTES, 'UTF-8'));
Est-ce correct ?

Sinon j'ai entendu parler du PDO, c'est peut-être encore mieux...

Merci encore
vbaguet 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 17h55.


 
 
 
 
Partenaires

Hébergement Web