# PHP > PHP & Base de donnes > [MySQL] Php et INSERT INTO, avec variables

## Djwaves

Bonjour  tous,

J'aurais 2 questions :

1) 

dans une page avec formulaire, j'introduis des donnes.

sur la page suivant (aprs le bouton valider), je les rcupre et je les affiche, pas de problmes.

Voici l'instruction:

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

Mon problme, c'est aprs "VALUES" car je ne sais pas que mettre comme variable car si je mets mes variables, rien ne s'insre dans ma bd alors que si j'y mets manuellement des donnes, 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 possde un .be et quand je fais une redirection sur une page prcise de mon site (autre que index) (par exemple : http://www.monsite.be/formulaire.htm) il bien il me dit "page non trouve" alors que "index" fonctionne parfaitement

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

merci d'avance !!

----------


## gofono_bass

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.  ::oops::  ..---> corrige...

----------


## Yogui

Salut

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

*1-* La syntaxe SQL que je prfre utiliser comporte les noms des champs :


```

```

Ainsi, je ne perds de vue ni ce que j'enregistre ni dans quel champ.Maintenant, plutt que de mettre des valeurs fixes, mettons des variables :


```

```

Ou, si tu prfres :


```

```

Enfin, utilisons les variables de ton formulaire :


```

```



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 mthode *"get"*.

N'oublie pas de rcuprer la valeur de retour de ton appel  *mysql_query()* de manire  pouvoir appeler *mysql_error()* si la requte n'a pas bien fonctionn.
De mon ct, j'utilise ce type de code :


```

```

----------


## Djwaves

j'ai su rsoudre le problme pour le 1)  merciiiiiiiiiiiii

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

----------


## Yogui

Salut

Ouais, non, je t'ai visiblement induit en erreur, dsol.
Dans ton formulaire, la proprit *action* doit diriger vers une page existante. Normalement, tu es capable de dire de tte si cette page existe ou non. Si tu prfres 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 _entre_ : si tu as un 404, alors peut-tre as-tu simplement oubli d'uploader le fichier sur le FTP ?

----------


## Djwaves

oui oui la page existe, j'en suis sr !

Le problme exact, c'est que je viens d'une page extrieur (d'un autre site web) et quand je veux rentrer sur le mien sur une page prcise (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 sr qu'elle existe...

Je n'ai pas ce problme 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  ::):

----------


## psykbe

Etant donn le que le topic traite du mme problme que moi +/- je vais faire ma requte ici  :;): 

Explication du problme, Requte bloquant sur les "._SESSION..."
L'erreur renvoye par mysql_error :
Erreur de syntaxe prs de usr_adresse,usr_tel,usr_cp,usr_localite,usr_pays,usr_ntva,usr_ac'  la ligne 1



```

```

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.

----------


## caro821CZ

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)

----------


## Yogui

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 chanes, cela te sera toujours utile pour connatre notamment la diffrence entre les guillemets simples et doubles, ainsi que pour apprendre dans quel cas il est plus ntressant d'utiliser l'une ou l'autre mthode.
Pour protger les noms de table et de champs dans une requte, il faut utiliser l'accent aig ` plutt que des guillemets.

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

----------


## psykbe

Aurait tu un lien vers un tutorial pour les chanes (j'ai cherch dans les tutos et dans la doc php mais j'ai pas trouv un chapitre prcis 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 'donne entre' inconnu dans field list comme mysql error donc il y a bien un erreur dans la syntaxe de la requte SQL. 
Le conseil pour les ` pour protger le nom des tables serait  appliquer  la dfinition des variables $_SESSION, aprs dans les requtes 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 dfinies les variables $_SESSION :



```
$_SESSION&#91;'ch_usrsociete'&#93; = "usr_societe";
```

Ps 3 : si je fait $sql=mysql_query ...; suivit d'un echo $sql devrait-il m'afficher la requte envoye et non le rsultat ?

----------


## psykbe

voici un extrait de la page finale, j'ai fait un test avec une page contenant qu'un seul champ afin de trouver le problme 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.



```

```

----------


## Yogui

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 requte 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.


```

```

Fais attention car PHP peut utiliser l'accent ` comme dlimiteur de chane de caractres au mme titre que l'apostrophe '... Je n'en connais pas les particularits mais je trouve que c'est une mauvaise ide de l'utiliser : pas standard et on a dj ce qu'il faut avec le reste, non ?


[Edit] Un diteur de code qui se respecte colorise ta syntaxe en fonction des chanes, il est donc assez facile d'identifier ce qui cloche avant mme de l'excuter.
Rien  voir avec la syntaxe SQL, cependant, c'est vrai.

----------


## psykbe

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

----------


## Yogui

Eh bien, tu les spares par une virgule :



```

```

Sinon, tu peux les mettre dans un tableau pour faciliter la lecture :


```

```

Ou, protgs par l'accent :


```

```

----------


## psykbe

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)

----------


## Yogui

Ah, dsol, je me suis tromp dans le nom de variable (*$session* et *$_SESSION*)...
Avec ceci, c'est syntaxiquement correct (j'ai test) :


```

```

----------


## psykbe

> Ah, dsol, je me suis tromp dans le nom de variable (*$session* et *$_SESSION*)...
> Avec ceci, c'est syntaxiquement correct (j'ai test) :
> 
> 
> ```
> 
> ```


avec ta solution je suis oblig de mettre tous les champs dans une mme variable de session c'est bien a ? sinon pour le moment elle sont toutes spares, il n'y a pas moyen de les garder comme a ?

----------


## Yogui

Rofl...

Je ne fais que te proposer une solution alternative  la solution d'origine, qui fonctionne trs bien si tu prcises bien toutes les virgules.
Si tu donnais ton SQL (celui envoy  MySQL par PHP), a m'viterait de te donner des solutions thoriques et cela me permettrait de te rpondre prcisment...

----------


## psykbe

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 !

----------


## dj-julio

fais $var = $requete;

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

----------


## psykbe

la requte :


```

```

le rsultat :


```
INSERT INTO users &#40;usr_id_upload,usr_numcli,usr_societe,usr_adresse,usr_tel,usr_cp,usr_localite,usr_pays,usr_ntva,usr_active,usr_admin,usr_login,usr_pass&#41; VALUES &#40;9,j,k,l,m,n,o,p,q,1,0,r,03c7c0ace395d80182db07ae2c30f034&#41;
```

la question : 

a  l'air bon pourtant a ne passe pas comme a, et avec cette formule si je ractive la mysql_error a me donne



> Champ 'j' inconnu dans field list

----------


## dj-julio

tu as certainement oubli les quote

exemple pour une valeur :



> ".$_SESSION['ch_usrsociete'].",


 DEVIENDRA =>


```
' " .$_SESSION&#91;'ch_usrsociete'&#93;. " ',
```

----------


## psykbe

J'avait essay mais a ne passait pas non plus mais je veut bien le remettre et te donner alors le rsultat de la requte

Voila ce que a donne avec les ' comme tu me l'indique : 


```
INSERT INTO users &#40;'usr_id_upload','usr_numcli','usr_societe','usr_adresse','usr_tel','usr_cp','usr_localite','usr_pays','usr_ntva','usr_active','usr_admin','usr_login','usr_pass'&#41; VALUES &#40;9,j,k,l,m,n,o,p,q,1,0,r,03c7c0ace395d80182db07ae2c30f034&#41;
```

et la mysql_error correspondante :



```
Erreur de syntaxe près de ''usr_id_upload','usr_numcli','usr_societe','usr_adresse','usr_te' à la ligne 1
```

----------


## Yogui

Ah, c'est dans le VALUES qu'il y a une erreur de syntaxe, c'est l qu'il faut protger les valeurs par des guillemets.


[Edit] Ne protge que les champs non numriques par les guillemets, a permet de mieux cerner les erreurs ( mon avis).

----------


## psykbe

Voila a marche !! merci  tous pour votre aide

Pour ceux qui chercheraient comment il fallait faire voici la solution :



```

```

Alors ici seul les champs cmdcp, cmdnumcli, $admin_cmdactive et $admin_cmdadmin n'ont pas de ' ' car ce sont des champs dfini comme entier (numrique) donc je pense qu'il faudra que je fasse un controle sur ces champs (en tout cas les 2 premiers qui sont entrs par l'utilisateur) pour ne pas avoir d'erreur en cas d'entre de texte dans ces champs.

----------

