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 :

Problème d'insertion dans la Base


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut Problème d'insertion dans la Base
    Bonjour à tous,

    Je viens de créer une petite interface admin sur mon site, afin de mettre à jour des news. Pour enregistrer le corps du texte, ma base contient un champ TEXT (j'ai aussi essayé avec un LONGTEXT).

    Pourtant, lorsque j'insère un texte un peu long (genre 4 phrases...) rien ne s'enregistre dans ma base. L'envoi est complètement ignoré...

    Avez-vous une solution à ce problème ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En règle générale "il ne passe rien" est un synonyme de "il ya quelque chose qui plante, mais de façon cachée, et donc on ne voit rien".
    Peut-on voir un bout de code ? genre le morceau du formulaire concerné et le code qui enregistre en base.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Voici mon code.

    formulaire :
    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
    <form id='form5' name='form5' method='post' action='admin.php'>
      		<ul>
    			<li><label for='titre'>Titre : </label></li>
    			<li><input type='text' name='titre' id='titre' value="<?php echo $titre ?>" required /></li>		
    			<li><?php echo $error_titre ?></li>
    		</ul>
    		<ul>
    			<li><label for='texte'>Texte : </label></li>
    			<li><textarea name='texte' id='texte' cols="65" rows="20" value="<?php echo $texte ?>" required></textarea></li>		
    			<li><?php echo $error_texte ?></li>
    		</ul>
    		<ul>
    			<li><input type='submit' name='envoyer' class='bouton' value='Envoyer' /></li>
    		</ul>
    	</form>
    Traitement du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysqli_query($connect,"INSERT INTO news (news_titre,news_texte,news_extrait,news_sign) VALUES ('$titre','$texte','$extrait','$sign')");
    		header("Location: news.php");
    Donc tout fonctionne quand le champ "texte" ne comporte qu'une phrase ou deux, et si je mets plus de texte rien ne s'enregistre dans la base de données :/

    Merci pour ton aide

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    Tu peux utiliser la balise code pour mettre ton code ? Car là c'est difficile à lire ...

    Sinon met un "or die" sur ton mysqli_query pour voir.

    Sinon tu ne protèges pas tes variables avant de les insérer ... Es-tu sûre que tes POST ne sont pas vides avant l'insertion ?

    EDIT : J'ai même pas fait gaffe que en fait on ne voit même pas les POST ... Met le code en entier !

  5. #5
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Citation Envoyé par sandiemoi Voir le message
    Donc tout fonctionne quand le champ "texte" ne comporte qu'une phrase ou deux, et si je mets plus de texte rien ne s'enregistre dans la base de données :/
    Sans doute parce que le texte comporte des apostrophes

    regarde ici : Comment se protéger des injections SQL avec MySQL ?

    Et pour mysqli : http://php.net/manual/fr/mysqli.real-escape-string.php

    Citation Envoyé par Manuel PHP
    Note:

    Si vous êtes habitués à utiliser la fonction mysql_real_escape_string(), notez que les arguments de la fonction mysqli_real_escape_string() ne sont pas identiques à ceux de la fonction mysql_real_escape_string(). L'identifiant link est le premier argument pour la fonction mysqli_real_escape_string(), alors que la chaîne à échapper est le premier argument pour la fonction mysql_real_escape_string().

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Oups, désolée pour le code. Je suis nouvelle sur le forum je ne savais pas qu'il fallait coller une balise particulière.

    Après quelques essais, N1bus aurait raison. Il suffit que je retire l’apostrophe et tout se passe bien.
    Je vais donc lire tes liens N1bus, et je reviens

    Merci !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Bon ben j'y arrive pas

    que je mette :
    stripslashes($texte);

    ou :
    return mysql_real_escape_string($texte);

    j'ai le même problème que précédemment : si j'ai une apostrophe, ça plante l'insertion dans la base...

  8. #8
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonjour,

    Impossible, si tu échappe les caractères sa doit passer, c'est le but de cette méthode

    Peut tu nous montrer ton code avec l'utilisation de mysql_real_escape_string()

  9. #9
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Euh... sauf que sandiemoi utilise mysqli (et c'est bien). Donc forcément mysql_real_escape_string ne va pas fonctionner Il faut utiliser mysqli_real_escape_string.

    OU alors, comme tu utilises mysqli, faire une requête préparée (vu que c'est un peu à ça que serve les requêtes préparées )
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  10. #10
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 96
    Par défaut
    Salut, moi j'en suis encore aux fonctions obsolètes mysql mais ca marche qd même.

    Je sais pas si ta fonction d'enregistrement marche de la même manière, mais moi aussi j'ai eu le problème des apostrophes et j'ai réglé ca comme ca:

    *j'ai d'abord une page ou tu rentres tes champs (comme toi à ce que je vois)
    * et ensuite je vais déclarer des variables pour enregistrer ces champs.
    C'est là que je traite le problème des apostrophes avec addslashes

    exemple:
    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
    //==========================
    	//déclaration des variables
    	//==========================
     
      //poste source:
      $postesource              = $_POST["poste_source"] ;
      //depart:
      $depart                   = $_POST["depart"] ;
      //N° GDO:
      $gdo                      = $_POST["num_gdo_poste_a_equiper"] ;
      //equipement à poser:
      $equipement               = addslashes($_POST["equipement_a_poser"]) ;
      //nom de poste:
      $nomposte                 = addslashes($_POST["nom_de_poste"]) ;
      //N° affaire:
      $numaffaire               = addslashes($_POST["num_affaire"]) ;
      //commune:
      $commune                  = addslashes($_POST["commune"]) ;
      //chargeé d'affaire:
      $chargeaffaire            = addslashes($_POST["charge_affaire"]) ;
      //IPT:
      $ipt                      = addslashes($_POST["ipt"]) ;
      //Radio ou RTC:
      $radiortc                 = addslashes($_POST["radio_ou_rtc"]) ;
      //position de l'affaire:
      $positionaffaire          = addslashes($_POST["position_affaire"]) ;
      //Commentaires:
      $commentaires             = addslashes($_POST["commentaires"]) ;
      //Programme:
      $prg                      = addslashes($_POST["prg"]) ;
      //MEX prévue:
      $mexprevue                = addslashes($_POST["mex_prevue"]) ;
      //MEX réelle:
      $mexreelle                = addslashes($_POST["mex_reelle"]) ;
      //Mise en service:
      $miseenservice            = addslashes($_POST["mise_en_service"]) ;
      //Modification schéma d'exploit:
      $modif                    = addslashes($_POST["modification_schema_exploitation"]) ;
    Je sais pas si toi ca marche de la même manière, mais ça peut peut-être t'aider

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    aaaaaaaah quelle nunuche ! mdr
    mysqli bien sûr ! tssssss

    bon sinon en parade j'avais trouvé ça :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $texte = addslashes($_POST['texte']);
    $extrait = substr($texte,0,300);

    ça fonctionne.
    c'est mal ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    Je viens de voir ta réponse Clément, j'avais trouvé la même solution.
    Merci

  13. #13
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    c'est mal ?
    Oui, on n'utilise pas de addslashes ! Tu vas avoir ta BDD poluée de '\' partout ...

    Utilise la fonction citée précédemment : mysqli_real_escape_string()

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    bon et bien je confirme que mysqli_real_escape_string() ça ne fonctionne pas... bien quand la fonction est bien orthographiée...

  15. #15
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Tu peux nous mettre le code avec mysqli_real_escape_string() ?

    Citation Envoyé par Manuel PHP
    Note:

    Si vous êtes habitués à utiliser la fonction mysql_real_escape_string(), notez que les arguments de la fonction mysqli_real_escape_string() ne sont pas identiques à ceux de la fonction mysql_real_escape_string(). L'identifiant link est le premier argument pour la fonction mysqli_real_escape_string(), alors que la chaîne à échapper est le premier argument pour la fonction mysql_real_escape_string().

  16. #16
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 96
    Par défaut
    bob633, moi ma BDD n'est absolument pas poluée. Aucun "\"

  17. #17
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    Tu es sûre d'utiliser la fonction addslashes alors ?

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 8
    Par défaut
    En faisant d'autres recherches, on m'a argumenté d'utiliser addslashes pour les raisons suivantes :

    mysqli_real_escape_string() requiert une connexion à la bdd pour le faire, alors que addslashes non
    et si un jour tu utilises PDO pour tes transactions en bases de données, mysqli_real_escape_string() tu ne pourras plus t'en servir, donc garde le addslashes.

    Du coup, je reste avec mon addslashes qui fonctionne lol

    Merci à tous

  19. #19
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Par défaut
    mysqli_real_escape_string() requiert une connexion à la bdd
    Euh ... en même temps tu n'auras pas des requêtes sans BDD

    Le addhslashes ne DOIT PAS être utiliser à l'insertion. Si l'autre fonction ne fonctionne pas, c'est qu'il y a une erreur de code ...

    Mais c'est toi qui voit, une solution qui fonctionne n'est pas forcément optimale

Discussions similaires

  1. Problème d'insertion dans une base de donnèes
    Par atout dans le forum Administration
    Réponses: 14
    Dernier message: 27/12/2006, 07h07
  2. [paradox7] Problème d'insertion dans la base de données
    Par mouna201 dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/02/2006, 09h47
  3. problème d'insertion dans une base de données
    Par belmansour tidjani dans le forum JDBC
    Réponses: 7
    Dernier message: 18/01/2006, 22h13
  4. [Hibernate] problème d'insertion dans la base de données
    Par Willy7901 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/08/2005, 13h19
  5. Problème d'insertion dans la base.
    Par roots_man dans le forum ASP
    Réponses: 2
    Dernier message: 14/09/2004, 12h56

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