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 :

Utilisation d'apostrophe avec msqli


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 18
    Par défaut Utilisation d'apostrophe avec msqli
    Bonjour,

    Voici un extrait de code ci-dessous. Mon problème est relativement simple et habituel le fameux problème d'apostrophe.

    La variable texte $nomcat est un nom de catégorie qui peut éventuellement être composé d'un apostrophe.

    Bref si ma variable $nomcat est un texte sans apostrophe ma requête fonctionne sans problème.
    Elle plante évidemment dès qu'elle est composé d'un apostrophe. Comment faire pour améliorer mon code et éviter le bug ?

    Merci d'avance pour votre aide.
    Gilles

    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
     
    <?php
    			// Connexion au serveur MySQL
    			$link=mysqli_connect("localhost", "root", "","maBDD");
     
    			// Permet d'afficher les accents dans la base de données
    			mysqli_set_charset($link, "utf8mb4");
     
    			// Sélection des informations
    			$resultat=mysqli_query($link, "SELECT num_mag, titre_nom, duo, page, nom_compositeur, nom_prof 
    			FROM titres_ga 
    			INNER JOIN categorie	
    				ON titres_ga.id_cat = categorie.id_categorie
    			
    			WHERE nom_categorie='{$nomcat}' order by num_mag");
     
     
     
     
    			// Traitement des données
    			while($ligne=mysqli_fetch_array($resultat))
    			  {
    ?>

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Il faut systématiquement échapper les valeurs avec mysqli_real_escape_string() (ou passer par des requêtes préparées si requête en boucle)
    Tu peux utiliser la syntaxe PHP HereDoc pour mieux présenter tes requêtes SQL multilignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $nomcat_sql = mysqli_real_escape_string($link, $nomcat);
     
    $sql = <<<SQL
        SELECT num_mag, titre_nom, duo, page, nom_compositeur, nom_prof 
        FROM titres_ga 
        INNER JOIN categorie ON titres_ga.id_cat = categorie.id_categorie
        WHERE nom_categorie='{$nomcat_sql}' order by num_mag
        SQL;
     
    $resultat=mysqli_query($link, $sql);

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 18
    Par défaut
    Merci beaucoup le code suivant marche parfaitement grâce à mysqli_real_escape_string :
    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
     
     
    			$nomcat_sql = mysqli_real_escape_string($link, $nomcat);
     
     
    			// Sélection des informations
    			$resultat=mysqli_query($link, "SELECT num_mag, titre_nom, duo, page, nom_compositeur, nom_prof 
    			FROM titres_ga 
    			INNER JOIN professeur
    				ON titres_ga.id_prof=professeur.id_prof
    			INNER JOIN categorie	
    				ON titres_ga.id_cat = categorie.id_categorie
    			INNER JOIN compositeurs
    				ON titres_ga.id_compositeur = compositeurs.id_compositeur
    			WHERE nom_categorie='{$nomcat_sql}' order by num_mag");
    En revanche, impossible d'y parvenir avec l'indentation suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $sql = <<<SQL
        SELECT num_mag, titre_nom, duo, page, nom_compositeur, nom_prof 
        FROM titres_ga 
        INNER JOIN categorie ON titres_ga.id_cat = categorie.id_categorie
        WHERE nom_categorie='{$nomcat_sql}' order by num_mag
        SQL;
    Dois-je ajouter des crochets ou autre ? Le visuel du code est clairement plus intéressant avec votre conseil.
    Merci encore pour l'efficacité !!

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Dois-je ajouter des crochets ou autre ? Le visuel du code est clairement plus intéressant avec votre conseil.
    Non. Quel est le message d'erreur ? Et colle-nous ta tentative stp
    L'indentation doit être scrupuleusement respectée pour que le HereDoc fonctionne

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2019
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 18
    Par défaut
    Bonsoir, est-ce que ça vient des lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($ligne=mysqli_fetch_array($resultat))
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysqli_free_result($resultat);
    Je l'ignore. Tout le code se met en gris au dessus.

    Cordialement
    Gilles

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    // Connexion au serveur MySQL
    			$link=mysqli_connect("localhost", "root", "","guitarist_acoustic");
     
    			// Permet d'afficher les accents das la base de données
    			mysqli_set_charset($link, "utf8mb4");
     
    			$nomcat_sql = mysqli_real_escape_string($link, $nomcat);
     
     
    			$sql = <<<SQL
    				SELECT num_mag, titre_nom, duo, page, nom_compositeur, nom_prof 
    				FROM titres_ga 
    				INNER JOIN categorie ON titres_ga.id_cat = categorie.id_categorie
    				WHERE nom_categorie='{$nomcat_sql}' order by num_mag
    				SQL;
     			$resultat=mysqli_query($link, $sql);
     
     
     
    			// Traitement des données
    			while($ligne=mysqli_fetch_array($resultat))
    			  {
    			?>
     
    				<tr>
    					<td><?php echo $ligne['num_mag']?></td>
    					<td><?php echo $ligne['titre_nom']?></td>
    					<td><?php echo $ligne['duo']?></td>
    					<td><?php echo $ligne['page']?></td>
    					<td><?php echo $ligne['nom_compositeur']?></td>
    					<td><?php echo $ligne['nom_prof']?></td>
    				</tr>
     
    			<?php
    			  }
    			 // Libération de la mémoire des résultats
    			 mysqli_free_result($resultat);
    			 // Fermeture de la connexion
    			 mysqli_close($link);
    			?>

Discussions similaires

  1. Utiliser DirectX 9 avec C++Builder
    Par Olivier Constans dans le forum DirectX
    Réponses: 2
    Dernier message: 27/06/2005, 11h30
  2. utilisation de dll avec diverses compilateurs
    Par Thylia dans le forum C++
    Réponses: 30
    Dernier message: 21/10/2004, 16h30
  3. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35
  4. utilisation de fetch avec select
    Par arwen dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/06/2003, 10h03
  5. Utiliser Borland C++ avec Emacs sous Windows
    Par Eikichi dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 02/03/2003, 08h40

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