IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Code logique ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 343
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2011
    Messages : 101
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. logique écriture code en C
    Par nysay dans le forum Débuter
    Réponses: 6
    Dernier message: 20/01/2015, 17h20
  2. Question de logique dans un code Java
    Par Rony Rauzduel dans le forum Général Java
    Réponses: 1
    Dernier message: 18/07/2014, 17h29
  3. [XL-2007] Erreur logique: compilation Code VBA
    Par arthur_as dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/09/2012, 16h09
  4. Aide Code Logique floue
    Par Vinchude dans le forum MATLAB
    Réponses: 0
    Dernier message: 21/11/2011, 15h08
  5. De la rapidité du code
    Par jfloviou dans le forum Contribuez
    Réponses: 233
    Dernier message: 29/05/2009, 02h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo