charlelechauve | Bonjour (encore moi !), je souhaite créer un livre d'or sur mon site, un script tres simple est deja fait, mais ca ne fonctionne pas. Je vous annonce dessuite, c'est la premiere fois que j'utilise une table MySQL (et je debute en php) donc si j'ai fais une enorme boulette grosse comme une montagne, c'est surement cela. Car a mon avis la solution est la correction d'une absurdité, et je pense meme que ca ne vient pas du code (que j'ai récupéré ICI, mais surement un probleme de "manipulation"
Je vous explique donc en détail ce que j'ai dans le repertoire de mon site (entre autre) : Ma table MySQL etant un fichier "table livre_or" (donc sans le php ou html ou autre au bout) :
Code :
- CREATE TABLE livre_or (
- id int(6) NOT NULL auto_increment,
- auteur VARCHAR(50) NOT NULL,
- email VARCHAR(50) NOT NULL,
- date_signature datetime NOT NULL default '0000-00-00 00:00:00',
- message text NOT NULL,
- PRIMARY KEY (id)
- ) TYPE=MyISAM;
|
Puis j'ai un fichier qui affichera toutes les signatures : "index.php" :
Code :
- <html>
- <head>
- <title>Index de notre livre d'or</title>
- </head>
- <body>
- <a href="./insert_signature.php">Signer le livre d'or</a>
- <br /><br />
- <?php
- $base = mysql_connect ('serveur', 'login', 'password');
- mysql_select_db ('nom_base', $base);
- $sql = 'SELECT auteur, email, date_signature, message FROM livre_or ORDER BY date_signature DESC';
- $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
- $nb_signature = mysql_num_rows($req);
- if ($nb_signature == 0) {
- echo 'Aucune signature.';
- }
- else {
- while ($data = mysql_fetch_array($req)) {
- sscanf($data['date_signature'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
- echo '<a href=mailto:' , htmlentities(trim($data['email'])) , '>' , htmlentities(trim($data['auteur'])) , '</a>';
- echo ' le ' , $jour , '/' , $mois , '/' , $annee , ' à ' , $heure , ':' , $minute , '<br />';
- echo nl2br(htmlentities(trim($data['message'])));
- echo '<br /><br />';
- }
- }
- // on libère l'espace mémoire alloué pour cette requête
- mysql_free_result ($req);
- // on ferme la connection à la base de données.
- mysql_close ();
- ?>
- </body>
- </html>
|
Et enfin, une fichier qui contient le formulaire et se nomme "insert_signature.php" (a noter que j'aurais préférer avoir le formulaire et la page d'affichage sur la meme page, mais faisons au plus simple ) :
Code :
- <?php
- if (isset($_POST['go']) && $_POST['go']=='Signer') {
- if ((isset($_POST['auteur'])) && (isset($_POST['email'])) && (isset($_POST['message']))) {
- // si les 3 variables ne sont pas vides, et si l'adresse E-mail est valide, alors, et seulement dans ce cas, on fera notre insertion dans la base
- if ((!empty($_POST['auteur'])) && (!empty($_POST['email'])) && (!empty($_POST['message']))) {
- // on verifie le format de l'adresse E-mail saisie
- $test_mail = eregi ('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+$', $_POST['email']);
- if ($test_mail) {
- // on se connecte à notre base
- $base = mysql_connect ('localhost', 'root', '');
- mysql_select_db ('howto_guestbook', $base);
- // on prepare notre requête d'insertion des données
- $sql = 'INSERT INTO livre_or VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['email']).'", "'.date("Y-m-d H:i:s" ).'", "'.mysql_escape_string($_POST['message']).'" )';
- // on lance la requête
- mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
- // on ferme la connexion à la base de données
- mysql_close();
- // on redirige le visiteur vers l'accueil du livre d'or
- header('location: index.php');
- // on termine le script courant
- exit();
- }
- else {
- $erreur = 'Votre adresse E-mail est invalide.';
- }
- }
- else {
- $erreur = 'Au moins un des champs est vide.';
- }
- }
- else {
- $erreur = 'Les variables nécessaires au script ne sont pas définies.';
- }
- }
- // on entre dans le cas où l'un des trois (au moins) champs n'a pas été rempli ou si l'adresse E-mail n'a pas été validée (en particulier, lorsque le visiteur charge pour la première fois cette page, vu que les 3 champs sont vides, le formulaire s'affichera). On remarque également que l'on met la valeur de chaque champs dans le value (c'est cela qui fait que si le visiteur ne remplit pas entièrement le formulaire et qu'il clique sur "Signer", et bien lorsqu'il sera redirigé vers le formulaire, ce qu'il aura déjà saisi sera conservé
- ?>
- <html>
- <head>
- <title>Insertion d'une nouvelle signature</title>
- </head>
- <body>
- <form action="insert_signature.php" method="post">
- <table>
- <tr><td>
- <span class="gras">Auteur :</span>
- </td><td>
- <input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>">
- </td></tr><tr><td>
- <span class="gras">Adresse E-mail :</span>
- </td><td>
- <input type="text" name="email" maxlength="50" size="50" value="<?php if (isset($_POST['email'])) echo htmlentities(trim($_POST['email'])); ?>">
- </td></tr><tr><td>
- <span class="gras">Votre message :</span>
- </td><td>
- <textarea name="message" cols="50" rows="10"><?php if (isset($_POST['message'])) echo htmlentities(trim($_POST['message'])); ?></textarea>
- </td></tr><tr><td><td align="right">
- <input type="submit" name="go" value="Signer">
- </td></tr></table>
- </form>
- <?php
- if (isset($erreur)) echo '<br /><br />',$erreur;
- ?>
- </body>
- </html>
|
Donc je tiens à répéter, à part avoir copié ces 3 fichiers sur mon serveur (webou) et mis dans la page d'accueil de mon site un lien "livre d'or) amenant à la page index.php je n'ai rien fait d'autre (pour la mise e page j'attend que ca marche^^)
Quand je click sur le lien "livre d'or", j'ai bien une page index.php qui s'ouvre et contenant un lien hypertext "signer le formulaire", mais en dessous de ce lien il y a plein de phrases d'erreurs. Cependant le lien marche quand meme et nous amene au formulaire (insert_signature.php), mais quand on valide le formulaire c'est encore plein d'erreur et ca ne s'enregistre pas. Venez jugez par vous meme : http://www.compterendutp.webou.net/index.html
et merci beaucoup pour ceux qui viennent m'aider, surtout que je suis certain que ce n'est fois rien
nb : j'ai l'impression, qu'entre autre, c'est une histoire de password, mais si c'est ca ... je ne veux pas qu'il y ait de password a entrer dans tous les cas Message édité par charlelechauve le 08-06-2009 à 19:46:21
|