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


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
Auteur

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>

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

rejeb01
Auteur

:(
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

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
Auteur

Enregister c'est le nom de btn Submit

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.

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