Page 1 sur 1

selection d'une bdd pour enregistrement vers une autre

Posté : 20 août 2011, 18:05
par typiac
Bonjour,

Je débute et par conséquent, j'ai peur de mal m'exprimer alors je vais faire de mon mieux!:

1- j'ai créé une bdd de type "enregistrement de membre" qui comprend les infos telles que Age, sexe etc.... et bien sûr login et mot de passe. Une fois loggé, le membre peut se déconnecter, accéder à ses informations.

2- j'ai créé une seconde bdd avec des évènements qui comprennent un nbre de places limitées

3- Un script php affiche de façon automatique tous les évènements entrés dans ma seconde bdd.

Ce que je voudrai faire, c'est que le membre enregistré puisse sélectionner un évènement afin que celui-ci apparaisse dans son espace privé et qu'il ait ainsi la confirmation qu'il est inscrit.

Dans quelle direction dois-je partir?

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 20 août 2011, 18:42
par moogli
salut,

première chose, je pense que tu confond Base de données et Table, une base de donnée contient des tables et les tables contiennent les données.

tu a donc je pense une table "membres" et une table "événement".

Pour qu'un événement puisse être associé à un membre (ou l'inverse) il va falloir une troisième table qui va stocker les deux clef primaire.

explication
pour l'exemple les structures des tables sont :
membres :
- idmemebre clef primaire (int)
- nom
- prenom
-etc etc

evenements
- idevt clef primaire (int)
- nom
- etc etc

la table qui fait la jonction entre les deux premières
membreevt
- id clef primaire (int)
- idevt
- idmembre
- valide (par exemple un champ de type enum('non','oui') default 'non' pour mysql).

a partir de cette dernière table on a :
- une clef primaire permettant d'identifier un ligne précisément (c'est le cas pour toute les tables).
- la clef primaire correspondant à un membre (sont "identifiant" dans la table membre)
- la clef primaire correspondant à un evenement (sont "identifiant" dans la table evenements)
- un champ permettant de savoir si le membre est valider ou non sur l'evt.
Pour la validation de l'evt il suffit de changer de non à oui :)

nous avons réaliser une jointure => http://sqlpro.developpez.com/cours/sqlaz/jointures/

je te laisse lire le cours pour voir comment faire les requêtes :)


@+

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 23 août 2011, 02:33
par typiac
Ohlala, je suis désolé, je pensais être informé par mail que j'avais reçu une réponse mais en fait non. Ta réponse détaillée devrait beaucoup m'aider car j'ai créer des tables sur deux bases de données différentes!!!! Je vais de ce pas étudier ta réponse, merci beaucoup!

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 23 août 2011, 08:05
par moogli
Pas de soucis,

L'utilisation de deux bases n'est pas trop recommandé si tu peux l'eviter. Simplement parce qu'en général les hébergeurs limite les bases et que c'est un peu moins simple (en générale ce ne sont pas les même utilisateurs donc il faut deux connexion différentes, l'interaction entre les deux n'est pas facile ;) ).

@+

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 24 août 2011, 00:26
par typiac
Bon, alors j'ai repris depuis le début et je me sens vachement plus intelligent maintenant!!! :lol:

Alors, j'ai créé une table_membre, une table_evenement et une table_reservation:

table_membre:
- ID ( AI )
- Login
- Mot de passe
- mail

table_evenement
- ID (AI )
- theme
- duree
- RDV

Table_reservation
- ID (evenement)
- ID (membre)
- theme (evenement)
- duree (evenement)
- RDV (evenement)

Me manque plus qu'à permettre à un membre de s'inscrir en créant un formulaire qui va ajouter l'ID d'un membre dans la table_reservation!

Concrètement, j'ai un tableau qui affiche tous les évènements rentrés dans la table_evenement:

Code : Tout sélectionner

<?php try { // On se connecte à MySQL $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=;dbname=base', 'login', 'mdp', $pdo_options); // On récupère tout le contenu de la table $reponse = $bdd->query('SELECT * FROM table_evenement'); // On affiche chaque entrée une à une while ($donnees = $reponse->fetch()) { ?> <table> <tr> <td width="160"><strong><?php echo $donnees['theme']; ?></strong></td> <td width="60"><?php echo $donnees['duree']; ?></td> <td width="110"><?php echo $donnees['RDV']; ?></td> <td width="60"> BOUTON RESERVER</td> </tr> </table> <?php } $reponse->closeCursor(); // Termine le traitement de la requête } catch(Exception $e) { // En cas d'erreur précédemment, on affiche un message et on arrête tout die('Erreur : '.$e->getMessage()); } ?>
sur la même page, le membre est connecté via un formulaire tout bête:

Code : Tout sélectionner

<?php if(isset($_COOKIE["ID_UTILISATEUR"])) { ?> <a href="info.php">Mes infos</a><br/> <a href="deconnexion.php">Déconnexion</a><br/><br/><br/> <?php } else { ?> <p> <a href="creer-compte-utilisateur.php">Créer un compte utilisateur</a> | <a href="connexion.php">Connexion</a> </p> <?php } ?>
L'idée est de reprendre les données affichées sur le tableau d'affichage via un formulaire php qui va créer les entrées mais là pour le coup je sèche totalement! J'ai tenté la chose suivante:

Code : Tout sélectionner

<?php try { // On se connecte à MySQL $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=mysql51zfs-27.pro;dbname=', '', '', $pdo_options); // On récupère tout le contenu de la table $reponse = $bdd->query('SELECT * FROM table_evenement, Comptes_Utilisateurs'); // On affiche chaque entrée une à une while ($donnees = $reponse->fetch()) { ?> <table> <tr> <td width="160"><strong><?php echo $donnees['theme']; ?></strong></td> <td width="60"><?php echo $donnees['duree']; ?></td> <td width="110"><?php echo $donnees['RDV']; ?></td> <td width="60"><?php echo $donnees['ID_Utilisateur']; ?></td> <td width="60"> <form action="php/sectionmembre_reserver.php" method="post"><input type="button" name="evenement" value="Réserver"/></form></td> </tr> </table> <?php } $reponse->closeCursor(); // Termine le traitement de la requête } catch(Exception $e) { // En cas d'erreur précédemment, on affiche un message et on arrête tout die('Erreur : '.$e->getMessage()); } ?>
Avec le script sectionmembre_reserver.php suivant:

Code : Tout sélectionner

<?php // Parametres de connexion à la base de données $BD_serveur = ""; $BD_utilisateur = ""; $BD_motDePasse = ""; $BD_base = ""; // Récupération des paramètres POST $theme = $_POST["theme"]; $duree = $_POST["duree"]; $rdv = $_POST["rdv"]; $ID_Utilisateur = $_POST["ID_Utilisateur"]; echo "Bonjour ".stripSlashes($theme)." ".stripSlashes($date).",<br/>"; @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse) or die("Impossible de se connecter au serveur de bases de données."); @mysql_select_db($BD_base) or die("Impossible de se connecter à la base de données."); $requete = "INSERT INTO table_reservation (theme, duree, rdv, ID_Utilisateur) VALUES ('$theme', '$duree', '$rdv', '$ID_Utilisateur')"; $result = @mysql_query($requete); if (!$result) { echo "L'enregistrement de vos données a échoué. Essayez plus tard.". "Et demandez à l'administrateur de vérifier l'existence de la ". "table table_reservation ;-)<br />"; } else { echo "Félicitations. Vous avez réservé!". "<br />"; } ?>
Le problème, c'est que je n'arrive pas à encercler mesbalises

Code : Tout sélectionner

echo $donnee
dans mon

Code : Tout sélectionner

<form action="php/sectionmembre_reserver.php" method="post"><input type="button" name="evenement" value="Réserver"/></form>
et donc, le script ne se lance pas... comment puis-je y arriver?

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 24 août 2011, 12:56
par moogli
Bon, alors j'ai repris depuis le début et je me sens vachement plus intelligent maintenant!!! :lol:

Alors, j'ai créé une table_membre, une table_evenement et une table_reservation:

table_membre:
- ID ( AI )
- Login
- Mot de passe
- mail

table_evenement
- ID (AI )
- theme
- duree
- RDV

Table_reservation
- ID (evenement)
- ID (membre)
- theme (evenement)
- duree (evenement)
- RDV (evenement)
theme, durée et rdv sont des données liée a l’événement et non à la réservation ? (tu réserve un quart de concert ou de coupe de cheveux ? si oui ben ça va être le bordel ton truc XD). Dans ce cas à supprimer de la table réservation.

pour ce qui est de ton code tu utilise des variables qui n'existe pas car par présentent dans le formulaire.
tu fait une insertion sur 4 champs alors que tu en a dans la tables (tu n'indique pas de quel événement il s'agit !).

ton code pourrais être (disons que je propose la possibilité de réserver plusieurs événement en même temp spour ne par faire 4 fois la même chose ;)
- le formulaire
dans la boucle while tu affiche une checkbox avec en nom la notation tableau et en "value" la valeur de l'id de l'evenement que tu affiche (en gros <input type="checkbox" name="evt[]" value="412" /> le 412 étant une info qui vient de ta base. ).
- la personne connectée clique sur le bouton submit au bas du formulaire
- sur la page de validation il faut vérifier que tout les index du formulaire sont présent, pour cela utilise isset (if (isset($_POST['evt'])) je poursuit, else ERREUR !!!! :mrgreen: )
- tu peux continuer a utiliser PDO.
- tu peux, dans ce cas, utiliser une requête préparée pour l'insertion des "multiples" inscription en même temps.
- d'où vient l'id utilisateur ? celui devrait être stocker en session lors de la connexion du membre (en fait c'est la seule donnée utilisateur vraiment pertinente car le reste tu l'a avec celle ci, si tu veux utiliser du temps d'utilisation du SGBD tu peux mettre les données les plus couramment employées).
Amélioration ?
gérer un affichage page par page avex sauvegarde des checkbox déjà cochée afin de ne pas afficher 400 événements dans la même page c'est fastidieux a lire globalement y a des chances que le mec se barre avant d'être inscrit a quoi que se soit XD).

@+

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 24 août 2011, 16:53
par typiac
Merci de ta réponse Moogli, je vais l'étudier de ce pas! Je me suis trompé de vie je crois, c'est trop génial de coder et d'essayer de résoudre tous ces problèmes!

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 24 août 2011, 17:23
par moogli
c'est trop génial de coder et d'essayer de résoudre tous ces problèmes!
moi s'amuse, enfin généralement :mrgreen:

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 24 août 2011, 18:01
par typiac
Alors, comme tu me l'as expliqué, j'ai supprimé les colonnes theme, duree, et rdv de ma base de donnée réservation. Je n'ai donc plus que ID_utilisateur et ID_evenement.

Pour le formulaire, j'en suis là:

Code : Tout sélectionner

while ($donnees = $reponse->fetch()) { ?><form action="php/sectionmembre_reserver.php" method="post"> <table border="0" cellspacing="0" cellpadding="0" border="0"> <tr> <td width="160"><strong><?php echo $donnees['theme']; ?></strong></td> <td width="60"><?php echo $donnees['duree']; ?></td> <td width="60"><?php echo $donnees['RDV']; ?></td> <td width="60"><input type="checkbox" name="evt[]" value="412" /></td></tr></table> <table><tr><td width="60"><input type="submit"</form></td></tr></table>
La partie :

Code : Tout sélectionner

<td width="160"><strong><?php echo $donnees['theme']; ?></strong></td> <td width="60"><?php echo $donnees['duree']; ?></td> <td width="60"><?php echo $donnees['RDV']; ?></td>
N'a qu'une fonction d'affichage et ton formulaire servirait donc à réserver en insérant l'ID_utilisateur dans la base de donnée réservation.

Le problème est que comme j'entre plusieurs évènements, je me retrouve avec le même formulaire plusieurs fois. Il faut donc que je crée quelque chose qui donne un ID à chaque "value". Toi, tu me donnais un exemple avec:

Code : Tout sélectionner

<input type="checkbox" name="evt[]" value="412" />
j'ai donc essayé ceci:

Code : Tout sélectionner

<input type="checkbox" name="evt[]" value="<?php echo $donnees['ID_evenement']; ?>" />
Mais ça ne marche pas.... Comment faire pour que la value de la checkbox soit automatiquement l'ID_utilisateur?

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 24 août 2011, 18:03
par typiac
c'est trop génial de coder et d'essayer de résoudre tous ces problèmes!
moi s'amuse, enfin généralement :mrgreen:
Oui, je te comprends! Là j'en suis au stade où les volets restent fermés et j'ai perdu la notion du temps! #-o

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 25 août 2011, 00:20
par moogli
[quote ]
j'ai donc essayé ceci:

Tout sélectionner
<input type="checkbox" name="evt[]" value="<?php echo $donnees['ID_evenement']; ?>" />[/quote]

c'est bien ça, a tu regardé la source html générée ?

l'id de l'utilisateur doit être en session (par exemple $_SESSION['iduser']. tu place cette variable lors de la connexion à "l'espace membre").
a partir de la ta requete sera insert into evt values ($_SESSION['iduser'],$evt[x]); (ce n'est pas syntaxiquement correct mais c'est pour l'exemple).

il doit y avoir qu'un seul bouton submit :)

fait un nouvel essai et poste ton code complet (formulaire + validation). Pour cela utilise les balise
 (et [ /php] sans l'espace) pour coloriser ton code sur le forum :) )

@+

@+

Re: selection d'une bdd pour enregistrement vers une autre

Posté : 25 août 2011, 05:18
par typiac
Affectivement, ça marche! Alors voici mon code pour ceux qui débutent et qui ont du mal comme moi!
<?php
try
{
    // On se connecte à MySQL
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    $bdd = new PDO('mysql:host=XXX;dbname=XXX', 'XXX', 'XXX', $pdo_options);
    
    // On récupère tout le contenu de la table 
    $reponse = $bdd->query('SELECT * FROM table_evenement, Comptes_Utilisateurs');
    
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
    ?><form action="sectionmembre_reserver.php" method="post">
     <table border="0" cellspacing="0" cellpadding="0" border="0">
  <tr>
    <td width="160"><strong><?php echo $donnees['ID_Utilisateur']; ?></strong>
    <td width="160"><strong><?php echo $donnees['ID_evenement']; ?></strong>
    <td width="160"><strong><?php echo $donnees['theme']; ?></strong></td>
    <td width="60"><?php echo $donnees['duree']; ?></td>
    <td width="120"><?php echo $donnees['RDV']; ?></td>
    <td width="60"><input type="checkbox" name="evt[]" value="412" />
                   <input type="hidden" name="ID_Utilisateur" value="<?php echo $donnees['ID_Utilisateur']; ?>" />
                   <input type="hidden" name="ID_evenement" value="<?php echo $donnees['ID_evenement']; ?>" /></td></tr></table>
    
   

        
    <?php
    }
    
    $reponse->closeCursor(); // Termine le traitement de la requête

}
catch(Exception $e)
{
    // En cas d'erreur précédemment, on affiche un message et on arrête tout
    die('Erreur : '.$e->getMessage());
}


?>
<table><tr><td width="60"><input type="submit"  /></form></td></tr></table>
J'ai donc entouré le formulaire autour des données affichées et en provenance de mon autre base de donnée. Maintenant le formulaire sectionmembre_reserver.php pour effectuer l'entrée dans ma table:

<?php
    // Parametres de connexion à la base de données
    $BD_serveur     = "XXX";
    $BD_utilisateur = "XXX";
    $BD_motDePasse  = "XXX";
    $BD_base        = "XXX";

    // Récupération des paramètres POST
    $ID_Utilisateur      = $_POST["ID_Utilisateur"];
	$id = $_POST["ID_evenement"];
	
       

    echo "Bonjour ".stripSlashes($ID_Utilisateur).",<br/>";
    
    @mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
        or die("Impossible de se connecter au serveur de bases de données.");
    @mysql_select_db($BD_base)
        or die("Impossible de se connecter à la base de données.");
    
    $requete = "INSERT INTO table_reservations (ID_Utilisateur, ID_evenement)
                  VALUES ('$ID_Utilisateur','$ID_evenement')";
    $result = @mysql_query($requete);
    if (!$result) {
        echo "L'enregistrement de vos données a échoué. Essayez plus tard.".
             "Et demandez à l'administrateur de vérifier l'existence de la ".
             "table table_reservations ;-)<br />";
    } else {
        echo "Félicitations. Vous avez réservé!".
             "<br />";
    }
?>
Voilà, un très grand merci à toi pour ton aide, ça fait plaisir!!!!

Prochaine étape:
1- pour le moment, on peut réserver sans être connecté mais je voudrait que pour valider la réservation, il faille obligatoirement s'inscrire
2- tout simplement placer le fichier sectionmembre_reserver.php dans la même page que celle du formulaire pour que le résultat n'apparaisse pas sur une page blanche....

Dois-je créer de nouveaux sujets pour ça ou continuer sur celui-ci?

Rooooo, encore merci en tout cas!!!!