Bonjour,

J'utilise une classe 'connectDB.php' dans laquelle j'ai definie mes fonctions CRUD et tout fontionne bien sauf la fonction updateOne

Voici la definition de la fonction (dans la page connectDB.php) :

class connectDB 
{
    function __construct ()
    {
        $this->db = (new MongoDB\Client)->TechnoDB->admins; 
        /*TechnoDB : DB name
          admins : collection name*/
    }

public function editAdmin( $editInfo = [])
{
    $edited = $this->db->updateOne(
    ['_id'=>$editInfo['_id']],
    ['$set' =>['username' =>$editInfo['username'], 
               'name'=>$editInfo['name'], 
               'email'=>$editInfo['email'] ]],

    ['multi' => false, 'upsert' => false]

);
    return $edited;

}

Et voici la page dans laquelle je fais l'appel a cette fonction:

$db = new connectDB;
.
.
.
$edited=$db->editAdmin (

                ['_id'=>new MongoDB\BSON\ObjectID($id)],
                ['$set' =>
                    ['username' =>$_POST['U'],
                     'name'=>$_POST['N'],
                     'email'=>$_POST['E']]
                ],
                ['multi' => false, 'upsert' => false]
            );

            print_r($edited->getModifiedCount());
            print_r($edited->getMatchedCount());

Et la partie html:

<input type='text' name='U' id='U'  class='form-control'  placeholder='Username'  >

<input type='text' name='N'    id='N' class='form-control' placeholder='Name' >

<input type='text' name='E' id='E' class='form-control'  placeholder='E_mail'>

Et voici les erreurs!

    Notice: Undefined index: username in C:\xampp\htdocs\phpmongodb\TM\connectDB.php on line 34

    Notice: Undefined index: name in C:\xampp\htdocs\phpmongodb\TM\connectDB.php on line 35

    Notice: Undefined index: email in C:\xampp\htdocs\phpmongodb\TM\connectDB.php on line 36

4 réponses


Tes variables ne sont pas postées

<form method="POST" action="PAGE PHP">
<input type='text' name='U' id='U'  class='form-control'  placeholder='Username' / >

<input type='text' name='N'    id='N' class='form-control' placeholder='Name' / >

<input type='text' name='E' id='E' class='form-control'  placeholder='E_mail' />
<input type="submit" />
</form>

Pour éviter de rabacher les

$_POST['U'] //etc...

tu peux utiliser la fonction extract($_POST) et tes varible seront nommée de la façon $NAME où name est ne nom donnée tes balises html

yosraMH
Auteur

Merci MehdiKacim pour ta reponse mais en fait mes variables sont postées etc et les functions getMatchedCount() et getModifiedCount() me retournent que les variables ont eu une mise a jour sauf le probleme c'est qu'elles prennet le 'vide' (comme si j'ai rien ecrit au formulaire :/ )

Salut,
Tu passe 3 tableaux dans ton edit admin au lieu de 1.
Essaye comme ça :

$edited=$db->editAdmin ([
        '_id'=>new MongoDB\BSON\ObjectID($id),
        'username' =>$_POST['U'],
        'name'=>$_POST['N'],
        'email'=>$_POST['E']]
]);