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 :

Php et INSERT INTO, avec variables


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut Php et INSERT INTO, avec variables
    Bonjour à tous,

    J'aurais 2 questions :

    1)

    dans une page avec formulaire, j'introduis des données.

    sur la page suivant (après le bouton valider), je les récupère et je les affiche, pas de problèmes.

    Voici l'instruction:

    mysql_query("INSERT INTO bdonnees VALUES (....)...

    Mon problème, c'est après "VALUES" car je ne sais pas que mettre comme variable car si je mets mes variables, rien ne s'insère dans ma bd alors que si j'y mets manuellement des données, ça rentre dedans.

    Ma ligne originale est :

    mysql_query("INSERT INTO bdmessages VALUES (mess,alpha,chiffre,pub)");

    Et quand j'affiche les variables dans une page web, ça fonctionne parfaitement.

    Comment puis-je faire que le contenu de mes variables rentrent dans ma bdd.


    2) je possède un .be et quand je fais une redirection sur une page précise de mon site (autre que index) (par exemple : http://www.monsite.be/formulaire.htm) il bien il me dit "page non trouvée" alors que "index" fonctionne parfaitement

    SAvez-vous m'aider pour les 2 points ??

    merci d'avance !!

  2. #2
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    pour la
    1- sur ton formlulaire t'as action=post ou get?
    si c'est postes, les variables doivent etre $_POST["nomduchampdansleformulaire"], si c get ben $_GET["nomduchampdansleformulaire"]
    2- ça doit etre un probleme au niveau des chemins que tu donnes, par rapport aux repertoires

    Lire aussi des cours et tutoriels programmation PHP : http://php.developpez.com/cours/

    edit: grosse coquille effectivement. ..---> corrigée...
    mais pourquoi tu cours?

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    2- gofono_bass a raison. As-tu essayé d'appeler basename() ?

    1-

    Comme le dit gofono_bass (et malgré sa coquille) : si tu as mis method="post" dans ton formulaire, utilise le tableau $_POST, sinon le tableau $_GET pour la méthode "get".

    N'oublie pas de récupérer la valeur de retour de ton appel à mysql_query() de manière à pouvoir appeler mysql_error() si la requête n'a pas bien fonctionné.
    De mon côté, j'utilise ce type de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $result = mysql_query($sql)
    	or die('<font color="red">Error :/</font> on line <b>'.__LINE__.'</b>:<br />'.mysql_error());

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    j'ai su résoudre le problème pour le 1) merciiiiiiiiiiiii

    mais pour le 2) j'ai testé : www.monsite.be/basename/formulaire.htm mais tjrs "page introuvable"...

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Ouais, non, je t'ai visiblement induit en erreur, désolé.
    Dans ton formulaire, la propriété action doit diriger vers une page existante. Normalement, tu es capable de dire de tête si cette page existe ou non. Si tu préfères effectuer le test, c'est simple : tu ouvres ton navigateur et tu colles l'URL voulue dans la barre d'adresse, puis tu appuies sur la touche entrée : si tu as un 404, alors peut-être as-tu simplement oublié d'uploader le fichier sur le FTP ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 52
    Points : 28
    Points
    28
    Par défaut
    oui oui la page existe, j'en suis sûr !

    Le problème exact, c'est que je viens d'une page extérieur (d'un autre site web) et quand je veux rentrer sur le mien sur une page précise (autre que celle de l'index), il me dit "page introuvable".

    exemple :

    je viens de :

    www.lesiteenexemple.fr/banniere.htm

    Cette page arrive sur une page de mon site mais pas celle de l'INDEX :

    www.monsite.be/partenaire.htm

    Et bien, quand dans "banniere.htm", je mets le lien vers mon site ci-dessus, et bien, il me marque "page introuvable" alors que je suis sûûûûûûûûûûûr qu'elle existe...

    Je n'ai pas ce problème si je marque mon ip comme lien (http://mon.ip.a.moi/partenaire.htm) mais comme c'est une ip dynamique, ça ne fonctionne pas bien

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    Etant donné le que le topic traite du même problème que moi +/- je vais faire ma requête ici

    Explication du problème, Requête bloquant sur les "._SESSION..."
    L'erreur renvoyée par mysql_error :
    Erreur de syntaxe près de usr_adresse,usr_tel,usr_cp,usr_localite,usr_pays,usr_ntva,usr_ac' à la ligne 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @mysql_query("INSERT INTO ".$_SESSION['ta_users']." (".$_SESSION['ch_usrid'].",".$_SESSION['ch_id_upload'].",".$_SESSION['ch_usrnumcli'].",".$_SESSION['ch_usrosciete'].",".$_SESSION['ch_usradresse'].",
    ".$_SESSION['ch_usrtel'].",".$_SESSION['ch_usrcp'].",".$_SESSION['ch_localite'].",".$_SESSION['ch_pays'].",".$_SESSION['ch_ntva'].",".$_SESSION['ch_active'].",".$_SESSION['ch_admin'].",".$_SESSION['ch_usrlogin'].",".$_SESSION['ch_usrpass'].") VALUES ...
    J'ai essayé en mettant les variables en "'.$_SESSION...'" mais ça me met une T_PARSE error en php

    Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in cmd_add_user.php on line 66

    J'aimerait savoir si il y a une astuce de syntaxe ou si c'est tout simplement impossible ?

    Ps : pour ceux qui se demande ce que sont toutes ces variables SESSION, dans ce cas ci ce sont les noms de champs et tables.

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Salut

    psykbe verifie si tu n'entres pas un apostrophe en valeur dans ton champs 'ch_usrosciete' ou 'ch_usradresse'. Tu auras peut etre besoin par la suite de te servir de addslashes pour inserer tes donnees. J'avais ce soucis avec des $_POST je suppose que ca doit faire pareil pour les sessions...

    djwaves peux tu montrer le code de ton lien pour ta question 2)

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    psykbe : Je pense que tes variables $_SESSION ne contienent pas toutes un nom correct de champ. Il y a visiblement une erreur de syntaxe SQL en relation avec ces variables, en tout cas.
    Sinon, je te recommande de lire le chapitre de PHP relatif aux chaînes, cela te sera toujours utile pour connaître notamment la différence entre les guillemets simples et doubles, ainsi que pour apprendre dans quel cas il est plus ntéressant d'utiliser l'une ou l'autre méthode.
    Pour protéger les noms de table et de champs dans une requête, il faut utiliser l'accent aigü ` plutôt que des guillemets.

    En l'occurence, ton souci n'est pas de PHP mais de syntaxe SQL. Pourrais-tu nous indiquer la requête exacte qui est envoyée stp (mets-la dans une variable et fais un echo) ?

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    Aurait tu un lien vers un tutorial pour les chaînes (j'ai cherché dans les tutos et dans la doc php mais j'ai pas trouvé un chapitre précis qui explique ça).

    Ps : j'ai trouvé une des erreurs qui était une erreur dans un nom de variable $session et maintenant il me met un

    Champ 'donnée entrée' inconnu dans field list comme mysql error donc il y a bien un erreur dans la syntaxe de la requête SQL.
    Le conseil pour les ` pour protéger le nom des tables serait à appliquer à la définition des variables $_SESSION, après dans les requêtes ou dans les 2 ? car si je met `$_SESSION['var']` il ne va pas chercher le contenu de la variable.

    Ps 2 : voila comment sont définies les variables $_SESSION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['ch_usrsociete'] = "usr_societe";
    Ps 3 : si je fait $sql=mysql_query ...; suivit d'un echo $sql devrait-il m'afficher la requête envoyée et non le résultat ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    voici un extrait de la page finale, j'ai fait un test avec une page contenant qu'un seul champ afin de trouver le problème et là ho miracle ça marche, je penses donc que j'ai du mettre un ' ou " en trop quelque part et que je vais passer un petit moment au jeu des 7 erreurs.

    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
    <?php
    session_start();
     
    echo ("
    <form method=post action=bl.php>
    <h3>Formulaire d'inscription d'un utilisateur à la base de données document : </h3>
    <label>Numéro client :
    <input type=text name=cmdnumcli />
    </label><br/><br/>
    <input type=reset value=Nettoyer /><input name=AdminAddUser type=submit value=Envoi />
    </form>");
    if (!empty($_POST['cmdnumcli']))
    	{
    	mysql_connect($_SESSION['bdhost'],$_SESSION['bdusr'],$_SESSION['bdpass']) or die ("Connection impossible");
    	mysql_select_db($_SESSION['bdd']) or die ("Sélection de la base impossible");
    	@mysql_query("INSERT INTO ".$_SESSION['ta_users']." (".$_SESSION['ch_usrnumcli'].") VALUES (".$_POST['cmdnumcli'].")") or die (mysql_error());
     
    			echo ("<meta http-equiv=refresh content='0;URL=../msg.php?idmsg=adminadduser' />");
    	}
    else
    	{
    	echo ("Vous n'avez pas rempli tous les champs");
    	}
    ?>

  12. #12
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Alors, pour le tuto, je te propose ce lien :
    http://frederic.bouchery.free.fr/?2004/07/15/2-Les-Chaines-De-Caracteres-Soyons-Coherents
    Il y a plein de bonnes choses dans tout le blog, je te recommande d'y passer le temps qu'il faut !

    Sinon, c'est dans la requête qu'il faut mettre les `, pas dans le PHP. Je veux dire, c'est MySQL qui doit les voir, PHP ne doit pas se rendre compte qu'ils sont là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = 'SELECT `champ` FROM `table`;'
    $sql = 'SELECT `'.$champ.'` FROM `'.$table.'`;'
    Fais attention car PHP peut utiliser l'accent ` comme délimiteur de chaîne de caractères au même titre que l'apostrophe '... Je n'en connais pas les particularités mais je trouve que c'est une mauvaise idée de l'utiliser : pas standard et on a déjà ce qu'il faut avec le reste, non ?


    [Edit] Un éditeur de code qui se respecte colorise ta syntaxe en fonction des chaînes, il est donc assez facile d'identifier ce qui cloche avant même de l'exécuter.
    Rien à voir avec la syntaxe SQL, cependant, c'est vrai.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    En fait j'ai remarqué lorsqu'il n'y a qu'un seul champ, ça marche il me faut donc savoir comment pouvoir utiliser plusieurs champs $_SESSION

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Eh bien, tu les sépares par une virgule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = 'SELECT `'.$_SESSION['champ1'].'`,
                `'.$_SESSION['champ2'].'`,
                `'.$_SESSION['champ3'].'`
            FROM `'.$table.'`;'
    Sinon, tu peux les mettre dans un tableau pour faciliter la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $session['champs'] = array(); // mettre les champs ici
    $sql = 'SELECT '.implode(', ', $_SESSION['champs']).'
            FROM `'.$table.'`;'
    Ou, protégés par l'accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $session['champs'] = array(); // mettre les champs ici
    $sql = 'SELECT `'.implode('`, `', $_SESSION['champs']).'`
            FROM `'.$table.'`;'

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    avec un simple ' ça ne passe pas il met un parse error donc si je fait `'.$_SESSION['champ1'].'` ça fait directement un
    Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
    et dans le cas où je met `'".$_SESSION['champ1']."'`
    Dans ce cas, pas d'erreur directement mais le champ1 deviens "champ1" donc n'est plus retrouvé dans la base (logique)

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Ah, désolé, je me suis trompé dans le nom de variable ($session et $_SESSION)...
    Avec ceci, c'est syntaxiquement correct (j'ai testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION['champs'] = array('champ1', 'champ2', 'champ3');
    $_SESSION['table'] = 'table';
    echo $sql = 'SELECT `'.implode('`, `', $_SESSION['champs']).'`
            FROM `'.$_SESSION['table'].'`';

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    Citation Envoyé par Kirkis
    Ah, désolé, je me suis trompé dans le nom de variable ($session et $_SESSION)...
    Avec ceci, c'est syntaxiquement correct (j'ai testé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_SESSION['champs'] = array('champ1', 'champ2', 'champ3');
    $_SESSION['table'] = 'table';
    echo $sql = 'SELECT `'.implode('`, `', $_SESSION['champs']).'`
            FROM `'.$_SESSION['table'].'`';
    avec ta solution je suis obligé de mettre tous les champs dans une même variable de session c'est bien ça ? sinon pour le moment elle sont toutes séparées, il n'y a pas moyen de les garder comme ça ?

  18. #18
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Rofl...

    Je ne fais que te proposer une solution alternative à la solution d'origine, qui fonctionne très bien si tu précises bien toutes les virgules.
    Si tu donnais ton SQL (celui envoyé à MySQL par PHP), ça m'éviterait de te donner des solutions théoriques et cela me permettrait de te répondre précisément...

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    comment faire pour te la donner ? (j'ai essayer de faire un $var=mysql_query ... puis de faire un echo $var; mais il ne met rien !

  20. #20
    Membre confirmé Avatar de dj-julio
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Décembre 2005
    Messages : 745
    Points : 625
    Points
    625
    Par défaut
    fais $var = $requete;

    sachant que :
    $requete="insert into ......";

Discussions similaires

  1. [AC-2010] Query SQL VBA (Insert INTO) avec Conditions en variable (Date)
    Par Deustalos dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/03/2015, 21h15
  2. [MySQL] inser into avec variable php
    Par gwendoline-bricout dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/10/2013, 09h47
  3. Réponses: 1
    Dernier message: 07/10/2011, 11h14
  4. Requête INSERT INTO avec des champs et des variables
    Par fips1962 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 26/05/2009, 17h51
  5. INSERT INTO avec une valeur numéroauto
    Par priest69 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 08/11/2005, 15h39

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