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

Langage PHP Discussion :

Livre d'or


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut Livre d'or
    Bonjour, 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    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 : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <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 : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?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

  2. #2
    Invité
    Invité(e)
    Par défaut
    Petite question :
    pourquoi poster ta question ici ?
    il y a un forum sur le site où tu as trouvé ce script ! ...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut
    T'as vu l'activité qu'il y à ce sur forum ? Je compte pas sortir mon site en 2012 . Mais j'ai quand meme posé la question, on sait jamais. Puis la je regarde dans des tuto, on sait jamais non plus

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par enrico83600 Voir le message
    Puis la je regarde dans des tuto, on sait jamais non plus
    Ah ca, c'est autre chose ! Bienvenu sur developpez.com !

    BON. En suivant ton lien :
    ce sont des erreurs concernant la CONNEXION a ta base de données :
    il faut que tu mettes tes paramètres perso !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut
    Tu veux dire que dans index.php je dois remplir ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $base = mysql_connect ('serveur', 'login', 'password');
    mysql_select_db ('nom_base', $base);
    Donc mettre l'adresse de mon serveur, et mon login et mot de passe pour acceder à mon panel d'administration sur le serveur ??

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ca doit ressembler à ca :
    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
    <?php
    // **************************************
    //       PARAMETRES de CONNEXION 
    //         a la BASE de DONNEES
    // **************************************
    // Parametres persos
    $host = 'localhost'; // voir hebergeur ou "localhost" en local
    $user = 'root'; // vide ou "root" en local
    $pass = 'mysql'; // vide en local ou mot de passe
    $dbase = 'ma_base'; // nom de la BD
    // -------------------------
    // Connexion au serveur
    $connexion_db = mysql_connect($host,$user,$pass) or die ('Erreur de parametres de connexion a la BD');
    mysql_select_db($dbase,$connexion_db)or die ('Erreur de connexion a la BD');
    // -------------------------
    ?>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut
    Ah ok .
    Pour le nom de la BD qu'est ce qu'il faut mettre ? Je laisse ma_base ou alors c'est mon fichier MySQL nommée table livre_or" ?

    Et pour le reste, vu que mon site est en ligne, c'est donc :

    $host = 'host'; // car apparement le nom du serveur de webou.net c'est host

    Par contre pour user, mot de passe et le nom de la base, je les trouve où ?

    nb : le serveur a la version 5.00.77 de mySQL. dois je mettre mysqli_connect a la place de mysql_connect ?

  8. #8
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par enrico83600 Voir le message
    Ah ok .
    Pour le nom de la BD qu'est ce qu'il faut mettre ? Je laisse ma_base ou alors c'est mon fichier MySQL nommée table livre_or" ?
    Et pour le reste, vu que mon site est en ligne, c'est donc :
    $host = 'host'; // car apparement le nom du serveur de webou.net c'est host
    Par contre pour user, mot de passe et le nom de la base, je les trouve où ?
    nb : le serveur a la version 5.00.77 de mySQL. dois je mettre mysqli_connect a la place de mysql_connect ?
    ATTENTION:

    Tu es nouveau ici, mais saches que, ici comme sur tout les forums tu ne dois jamais communiqué tes informations personnelles
    Fais ainsi:
    VA LIRE EN DETAIL COMMENT ACTIVER TA Base de donnée, lui donner un nom un mot de passe et récupérer les infos FTP du pannel dans le mail qu'ils t'on envoyé !
    http://www.webou.net/communaute/inde...6.html#msg5446

    ensuite, pour nous donner ton script utilises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
      $Flag1=mysql_connect($Serveur,$User,$Mdp);
      $Flag2=mysql_select_db($MaBase);

    Alors que toi tu utilisera

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $Serveur="machin";
    $User="truc";
    $Mdp="wwwww";
    $MaBase="machin";
      $Flag1=mysql_connect($Serveur,$User,$Mdp);
      $Flag2=mysql_select_db($MaBase);
    ainsi nous pourrons t'aider sans que tu nous donnes aucune info confidentielle

  9. #9
    FoxLeRenard
    Invité(e)
    Par défaut
    Re Bonjour,
    j'ais commencé a regarder tes 3 documents

    Pour la creation le livre_or.sql devrait étre ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    CREATE TABLE IF NOT EXISTS `livre_or` (
      `id` int(6) NOT NULL auto_increment,
      `auteur` varchar(50) NOT NULL default '',
      `email` varchar(50) NOT NULL default '',
      `date_signature` datetime NOT NULL default '0000-00-00 00:00:00',
      `message` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM;
    a suivre

  10. #10
    FoxLeRenard
    Invité(e)
    Par défaut
    Pour la partie d'enregistrement c' est a peut prés OK mais quelques remarques

    J'appliques cette regle pour les POST ... tu fera comme tu veux ...
    On traite tout les POST et apres on utilise les variables
    equivalentes par exemple pour $_POST['go'] ce sera $go ETC...
    pas de EMPTY car pas fiable.

    Le nom de la table est bien livre_or ça tu verras quel nom tu avais mis.

    Tu remplace cette partie avec tes valeurs secrétes ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $Serveur = "localhost";
     $User = "root";
     $Mdp =  "";
     $MaBase = "mysql";
    Ne touches pas au
    $erreur="";
    placé au début !

    Enfin attention j'ais corrigé des } ou ; ou etc ... non fermés !

    donc insert_signature.php devient
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
     
    <?php
     
    if (isset($_POST["go"])) $go=htmlentities(trim($_POST["go"]));
        else $go="";
    if (isset($_POST["auteur"])) $auteur=htmlentities(trim($_POST["auteur"]));
        else $auteur="";
    if (isset($_POST["email"])) $email=htmlentities(trim($_POST["email"]));
        else $email="";
    if (isset($_POST["message"])) $message=htmlentities(trim($_POST["message"]));
        else $message="";
     
     $Serveur = "localhost";
     $User = "root";
     $Mdp =  "";
     $MaBase = "mysql";
     $erreur="";
     
     
     
    if ($go=="Signer")
     {
     if ($auteur!="" && $email!="" && $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-]+)+$', $email);
    			if ($test_mail)
        {
    				// on se connecte à notre base
        $base = mysql_connect($Serveur,$User,$Mdp);
        $base1 =mysql_select_db($MaBase);
     
    				// on prepare notre requête d'insertion des données
        $sql = 'INSERT INTO livre_or VALUES("", "'.mysql_escape_string($auteur).'", "'.mysql_escape_string($email).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($message).'")';
     
    				// on lance la requête
        mysql_query($sql);
     
    				// 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
    echo ("<br /><br />".$erreur."");
    ?>
    </body>
    </html>

  11. #11
    FoxLeRenard
    Invité(e)
    Par défaut
    Pour l'index, il faudra que tu mettes en forme mais j'ais testé, c'est OK
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    <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
     $Serveur = "localhost";
     $User = "root";
     $Mdp =  "";
     $MaBase = "mysql";
     
      $F1=mysql_connect($Serveur,$User,$Mdp);
      $F2=mysql_select_db($MaBase);
     
     
     
     
     
    $sql = 'SELECT auteur, email, date_signature, message FROM livre_or ORDER BY date_signature DESC';
    $req = mysql_query($sql) ;
     
    $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>

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 171
    Par défaut
    opla,

    j'ai remplie tous les user, mot de base, nom de la base et autres avec mes info peso, et surtout, j'ai créé une base de donnée via mon panel d'administration sur le serveur et j'y ai mi le premier code affiché tout en haut de mon premier post.

    Et ca marche super

    Merci monsieur :p. Je vais voir demain a tete reposé les modifications que tu m'as proposé (car la c'est marche sans probleme, mais si ca marche encore mieux pourquoi pas)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les meilleurs livres pour l'Assembleur
    Par gtr dans le forum Livres
    Réponses: 52
    Dernier message: 25/09/2010, 10h25
  2. Quel est votre livre préféré sur Java ?
    Par Ricky81 dans le forum Général Java
    Réponses: 138
    Dernier message: 25/11/2006, 03h42
  3. [langage] Je cherche un bon livre ?
    Par Anonymous dans le forum Langage
    Réponses: 13
    Dernier message: 09/04/2003, 13h16
  4. [Turbo Pascal] Recherche cours ou livre sur le Turbo Pascal
    Par killarg dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 02/03/2003, 16h12
  5. [web] Cherche un conseil pour un livre perl-tk
    Par Anonymous dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 29/04/2002, 15h35

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