Développer un site de A-Z

Par rejeb01, il y a 14 ans


Salut,
Nous avons appris beaucoup de choses pendant la série de "Développer un site de A-Z".
j'aimerai enregistrer dans la base de données sans passer par la partie administration.
Autrement dit j'ai une page qui contient :

Inscrire à nos newsletter<br> 
<input type="text" name="txtnewsletter" class="inputnewsletter"> 
<input type="submit" name="enregistrer" value="OK"">

en validant avec OK, je veux enregistrer l'email dans ma base de données.
merci d'avance.

8 réponses

djtec, il y a 14 ans

Et ben tu crée un controller newsletter ainsi qu'un model puis tu utilise celui-ci pour enregistrer l'email dans ta bdd

rejeb01, il y a 14 ans

est ce qu'il faut obligatoirement passer par un controller et un model?
j'ai créer mon model et j'ai essayé de tout faire dans la même page :

if (isset($_POST'enregistrer']) && !empty($_POST'txtnewsletter']) ) {
    extract($_POST);
    Conf::$databases;
    $this->loadModel('Abonnee');
    $condition=array('email'=>$txtnewsletter);
    $sql = $this->Abonnee->find(array(
        'conditions'    =>$condition
    ));
    $nbr = $this->Abonnee->findCount($condition);
    if ($nbr>0) {
        echo 'Vous êtes déjà inscrit';
    }else {
        date_default_timezone_set('Europe/Paris');
        $this->request->data->email=$txtnewsletter;
        $this->request->data->dateabonnees=date("Y/m/d H:i:s");
        $this->request->data->active=0;
        $this->Abonnee->save($this->request->data);
        echo 'Inscription réussite';
    }
}

mais j'ai l'erreur suivante :

stdClass Object ( [txtnewsletter] => ff [enregistrer] => OK [email] => ff [dateabonnees] => 2011/11/02 23:19:36 [active] => 0 ) 
( ! ) Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'txtnewsletter' in 'field list' in C:\wamp\www\monsite\core\Model.php on line 195

la formulaire :

<form action="" method="post">
    <p class="news">
        Inscrire à nos new letter<br> <input type="text" name="email"
            class="inputnewsletter"> <input type="submit" name="enregistrer"
            value="OK" class="btnnewsletter">
    </p>
</form>
Grafikart, il y a 14 ans

l'erreur parle d'elle même, essaie de la traduire :)

rejeb01, il y a 14 ans

:(
la nouvelle version avec presque la même erreur (je rappel que j'ai créée le model mais pas le controller)
mon code :

if (isset($_POST'enregistrer']) && !empty($_POST'email']) ) {
    extract($_POST);
    $email=$_POST'email'];

    Conf::$databases;
    $this->loadModel('Abonnee');
    $condition=array('email'=>$email);
    $sql = $this->Abonnee->find(array(
        'conditions'    =>$condition
    ));
    $nbr = $this->Abonnee->findCount($condition);
    if ($nbr>0) {
        echo 'Vous êtes déjà inscrit';
    }else {

        date_default_timezone_set('Europe/Paris');
        $this->request->data->email=$email;
        $this->request->data->dateabonnees=date("Y/m/d H:i:s");
        $this->request->data->active=0;
        print_r($this->request->data);
        $this->Abonnee->save($this->request->data);
        echo 'Inscription réussite';
    }
}

j'ai l'erreur suivante:

ffffstdClass Object ( [email] => ffff [enregistrer] => OK [dateabonnees] => 2011/11/03 19:04:15 [active] => 0 ) 
( ! ) Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'enregistrer' in 'field list' in C:\wamp\www\monsite\core\Model.php on line 195

merci d'avance

Set, il y a 14 ans

Je suis vraiment débutant, ( genre 2 mois pour coder mon site ).

Mais si je dis pas de bétise, le problème est que il trouve pas la colonne " enregistrer ". Donc faut trouver ta colonne enregistrer, peut être tu t'es trompé là dessus.

rejeb01, il y a 14 ans

Enregister c'est le nom de btn Submit

Set, il y a 14 ans

Bah là tel que tu l'as marqué :

if (isset($_POST'enregistrer']) && !empty($_POST'email']) ) {

Il vérifie si la valeur 'enregistrer'] donc surement un input ou input hidden, est rempli. ( D'après ce que moi je fais sur mon site ) après peut être que je me trompe.

djtec, il y a 14 ans

Bon ton erreur dit qu'il trouve pas de champs enregistrer dans ta bdd car je pense que tu dois passer tout ton $_POST dans le execute sans traitement avant donc vire les champs que tu as pas besoin dans ta bdd du $_POST et tout fonctionnera