| | rené06 | Posté le 02/10/2006 @ 09:24 | Petit astucien
52 Messages
| Bonjour à tous et d'avance merci pour vos réponses.
Je veux, lors d'une session remplir différents documents et, ce que je n'arrive pas à faire, renseigner une 2ème base de donnée.
Tout ceci en partant d'un formulaire.
Voici
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Inscription</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<?
if (isset($_POST['nom']) AND isset($_POST['prenom']))
{
if ($_POST['nom'] != NULL AND $_POST['prenom'] != NULL)
{
require("config.inc.php");
mysql_connect($host, $username, $password);
mysql_select_db($bdd_name);
$prenom = htmlentities ($_POST['prenom'], ENT_QUOTES);
$nom = htmlentities ($_POST['nom'], ENT_QUOTES);
$_SESSION['nom'] = $nom ;
$_SESSION['prenom'] = $prenom ;
mysql_query("INSERT INTO base VALUES('$nom', '$prenom')");
mysql_close();
} }
?>
<form action="formul.php" method="post">
<p><label for="nom">nom : </label>
<input type="varchar" name="nom"></p>
<p><label for="prenom">prenom : </label>
<input type="varchar" name="prenom"></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
<b><div style="text-align: center"><a href="base1.php">SUITE</a></div></b>
</body>
</html>
Ceci fonctionne, pas de probléme, je rempli ma base "base" et divers documents ensuite avec ma session.
Mon probléme ce trouve ci-dessous :
<?php
session_start(); // On démarre la session AVANT toute chose
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>confirmation</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<?
if (isset($_session['nom']) AND isset($_session['prenom']))
{
if ($_session['nom'] != NULL AND $_session['prenom'] != NULL)
{
require("config.inc.php");
mysql_connect($host, $username, $password);
mysql_select_db($bdd_name);
mysql_query("INSERT INTO base1 VALUES('$nom', '$prenom')");
mysql_close();
} }
?>
<?php echo $_SESSION['nom']; ?> <?php echo $_SESSION['prenom']; ?>
</body>
</html>
Je voudrai avec cette programmation remplir la base1.
La session fonctionne puisque j'arrive à obtenir mon nom et mon prénom avec la ligne <?php echo $_SESSION['nom']; ?> <?php echo $_SESSION['prenom']; ?>
mais la base1 ne se rempli pas.
L'erreur ne se trouve t'elle pas ici? mysql_query("INSERT INTO base1 VALUES('$nom', '$prenom')");
Je precise que la base1 existe bien.
Dans l'attente, cordialement.
| | |
| |
| Publicité |
|
| | olivier7500 | Posté le 02/10/2006 à 12:20 | Petit astucien
504 Messages
| Salut,
C'est ta requète qui déconne:
[code]<?
$sql = "INSERT INTO base1 (nom,prenom) VALUES ";
$sql .= "('".$_SESSION['nom']."','".$_SESSION['nom']."')";
mysql_query($sql);
?>[/code]
ou
[code]<?
mysql_query("INSERT INTO base1 (nom,prenom) VALUES ('".$_SESSION['nom']."','".$_SESSION['nom']."')");
?>[/code]
a++
Oliv | | | | | koala01 | Posté le 02/10/2006 à 12:48 | Astucien
4715 Messages
| Salut,
Pourrais tu, cela nous faciliterait déjà les choses, utiliser les bons termes STP…
Dans une base de données, tu as DES tables dans lesquelles tu peux indiquer des champs à remplir.
Chaque "ligne" de la table (chaque fois que id, nom, prenon etc apparait) s'appelle un enregistrement.
Que souhaite tu donc faire:
Apres avoir travaillé sur une table pour récupérer des informations, tu souhaiterais rajouter un enregistrement dans une autre table de la meme base[question]
Où souhaites tu insérer un enregistrement dans une table d'une autre base [question]
Astuce:
-Tu ne dois fournir les informations de connexion à ta base de données qu'une seule fois (en début de script) et ne fermer la connexion ( mysql_close();) qu'une fois que tu n'as plus besoin de la connexion (en fin de script)
-Il est très largement préférable de travailler, quand tu effectue une requete, en plusieurs temps:
- créer une variable qui contienne la requete
- exécuter la requete
- récupérer éventuellement le résultat de la requete dans un tableau
-Quand tu essaie d'insérer un enregistrement, il faut soit fournir la valeur de tous les champs dans l'ordre (id, nom, prenom, adresse…) soit indiquer le nom des champs qui sont fournis ce qui donne
[code]
$sql="insert into base values('%id','%nom','%prenom','$adresse')";
$cherche=mysql_query($sql,$informations_connexion) or die(mysql_error());
[/code]
ou
[code]
$sql="insert into base set(`nom`,`prenom`) values('%nom','%prenom')";
$cherche=mysql_query($sql,$informations_connexion) or die(mysql_error());
[/code]
NOTA:
-le or die(mysql_error()) est intéressant lors de la mise au point du script, cela permettra d'obtenir le texte de l'erreur qui se produit si la requete ne fonctionne pas (il faudra cependant penser à supprimer ce terme une fois en production [clindoeil]
-la variable $informations_connexion est un argument intéressant à fournir au script, et devrait etre déclaré sous la forme de
[code]$informations_connexion= mysql_pconnect($nom_Hote, $nom_USER, $Mot_de_Passe) or trigger_error(mysql_error(),E_USER_ERROR); [/code]
-Un test beaucoup plus compréhensible pour toi (mais qui revient au meme) est le fait de tester si une variable vaut (ou non) "" (une chaine vide) plutot que de tester si elle vaut NULL
Le code
[code] if ($_session['nom'] != NULL AND $_session['prenom'] != NULL)[/code]
est plus facilement lisibile sous la forme de
[code] if ($_session['nom'] !="" AND $_session['prenom'] !="")[/code]Mais, comme je l'ai dit, ce n'est qu'un détail
Sois enfin conscient du fait que, si le champs nom et/ou le champs prénom de base1 est l'identifiant (la "clé primaire"), et que l'identifiant apparait déjà dans la base, il est normal que tu ne puisse pas réinsérer l'enregistrement, vu qu'un identifiant
subit par définition une contrainte d'unicité [clindoeil] | | | | | rené06 | Posté le 02/10/2006 à 20:55 | Petit astucien
52 Messages
| Merci pour vos réponses olivier7500 et Koala mais j'en suis toujours au même point.
J'ai essayé ce que vous me proposez olivier7500
<? mysql_query("INSERT INTO base1 (nom,prenom) VALUES ('".$_SESSION['nom']."','".$_SESSION['prenom']."')"); ?>
ça ne va pas.
Quant à toi Koala, j'ai tenu compte de certaines remarques, mais pas tout, ça fait beaucoup à digérer. Enfin, voyez, je re-explique tout et j'ai changé le nom des tables et des fichiers et fait q.q modifs.
Avec inscription2.php ci-dessous le client alimente par l'intermédiaire d'un formulaire la table inscription2 de la base location.
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Inscription2</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<?
if (isset($_POST['nom']) AND isset($_POST['prenom']))
{
if ($_POST['nom'] != NULL AND $_POST['prenom'] != NULL)
{
require("config.inc.php");
mysql_connect($host, $username, $password);
mysql_select_db($bdd_name);
$prenom = htmlentities ($_POST['prenom'], ENT_QUOTES);
$nom = htmlentities ($_POST['nom'], ENT_QUOTES);
$_SESSION['nom'] = $nom ;
$_SESSION['prenom'] = $prenom ;
mysql_query("INSERT INTO inscription2 VALUES('$nom', '$prenom')");
} }
?>
<form action="inscription2.php" method="post">
<p><label for="nom">nom : </label>
<input type="varchar" name="nom"></p>
<p><label for="prenom">prenom : </label>
<input type="varchar" name="prenom"></p>
<p><input type="submit" value="Envoyer" /></p>
</form>
<b><div style="text-align: center"><a href="contrat2.php">SUITE</a></div></b>
</body></html>
Aprés avoir fait: suite, s'ouvre un contrat (contrat2.php ci-dessous)Ceci est ramené à la plus simple expression pour essai.
<?php
session_start();
?>
<html>
<body>
<br><br>
ceci est un contrat entre moi et Mr <?php echo $_SESSION['nom']; ?> <?php echo $_SESSION['prenom']; ?> <br><br>
<b><div style="text-align: center"><a href="confirmation2.php">SUITE</a></div></b>
</body></html>
POUR L'INSTANT TOUT FONCTIONNE.
Aprés avoir fait suite, s'ouvre les données du client (cela fonctionne) et je voudrais par la même occasion enregistrer
ces données dans une table (confirmation2) toujours dans la base location (celle-ci me servira par la suite pour la gestion)
Voici ce fichier qui me pose probléme. confirmation2.php
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" " http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns=" http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>confirmation2</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<?
if (isset($_session['nom']) AND isset($_session['prenom']))
{
if ($_session['nom'] != NULL AND $_session['prenom'] != NULL)
{
mysql_query("INSERT INTO confirmation2 (nom,prenom) VALUES ('".$_SESSION['nom']."','".$_SESSION['prenom']."')");
mysql_close();
} }
?> Voici vos données Mr <?php echo $_SESSION['nom']; ?> <?php echo $_SESSION['prenom']; ?>
</body> </html>
RIEN NE S'ENREGISTRE DANS LA TABLE CONFIRMATION2
Pour voir si j'avais oublié q.q chose dans cette table confirmation2 j'ai remplacé dans inscription2 INSERT INTO inscription2 par INSERT INTO confirmation2 . Les enregistrements se font dans confirmation2 .
Modifs faites aprés les recommandations de Koala:
Suppression clé primaire.
Ouvrir la connexion qu'une fois (inscription2)et la refermer qu'une fois (confirmation2)
Dans l'attente, cordialement et merci de vous interesser à mon probléme.
| | | |
| | Haut de la page |
| | Inscrivez-vous ! |
- Posez vos questions
- Résolvez vos problèmes
- Aidez les autres
- Participez et créez vos discussions
- Dialoguez en privé avec d'autres membres
- Suivez vos sujets préférés
- Affichez les signatures des membres
|
|