Bonjour,

J'ai un petit souci au niveau de mon insertion à la bdd.

Ce que je fais

Décrivez ici votre code ou ce que vous cherchez à faire

function ajoutQuestion($nomAjout,$anneeAjout,$joueurAjout,$tempsAjout,$editeurAjout) {

    if(!empty($nomAjout)  && !empty($anneeAjout)  && !empty($joueurAjout)  && !empty($tempsAjout)  && !empty($editeurAjout)){
        $nomAjout = stripslashes($nomAjout);
        $anneeAjout = stripslashes($anneeAjout);
        $joueurAjout = stripslashes($joueurAjout);
        $tempsAjout = stripslashes($tempsAjout);
        $editeurAjout = stripslashes($editeurAjout);
        $query = db()->prepare("insert into jeu('nom','nbjoueur','temps','annee','editeur')
                        values (:nom,:nbjoueur,:temps,:annee,':editeur')");
        $query->bindValue(":nom", $nomAjout);
        $query->bindValue(":nbjoueur", $joueurAjout);
        $query->bindValue(":temps", $tempsAjout);
        $query->bindValue(":annee", $anneeAjout);
        $query->bindValue(":editeur", $editeurAjout);
        $query->execute();
        if (!$query->execute()) {
                echo"Insertion impossible dans jeu </br>";
                echo $nomAjout;
                echo $joueurAjout;
                echo $tempsAjout;
                echo $anneeAjout;
                echo $editeurAjout;
                print_r($query->errorInfo());
        }
    } else {
        echo "Insertion impossible dans jeu car il manque des paramètres";
    }
}

Voici ce que j'ai actuellement sauf que cela ne fait strictement rien du tout au niveau de l'insert... l'errorinfo me dit qu'il y a une erreur de syntaxe mais je vois pas laquel. Une idée ?

21 réponses


Bonjour,
Il serait bien de nous donner l'erreur complète.
Enlever les ' autout de :editeur
Ne pas executer 2 fois la requêtes.

gweared
Auteur

Voilà ce que me met l'errorinfo :

Array ( [0] => 42000 [1] => 1064 [2] => Erreur de syntaxe pr�s de ''nom','nbjoueur','temps','annee','editeur') values ('sonar','8','120','20' � la ligne 1 )

Ajoute un espace après "jeu" et enlève toute les apostrophes

gweared
Auteur

Sa marche par contre cela m'ajoute en double à chaque fois et si je rafraichis la page, cela m'ajoute également une entrée

Car tu fais 2 fois l'execute.

gweared
Auteur

J'ai virer un execute mais j'ai toujours le souci que si je refresh sa me rajoute un nouvelle entré.

c'est logique car ton navigateur garde un mémoire les données envoyées.
Une fois l'inscription faite, tu peux essayer de détruire $_POST ou de faire une redirection

gweared
Auteur

j'ai penser à mettre ceci : header('Location :admin.php');

mais j'ai cela comme erreur ensuite

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at wampserver@wampserver.invalid to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.

Active les erreurs php pour voir toutes les erreurs de syntaxe, etc.....
Mais le header doit être mis avant le moindre affichage html, comme tes echos .....

gweared
Auteur

mon header est dans mon controler comme cela

if (!empty($_POST['valider'])) {

    //quelque soit le choix, l'appel est toujours le même
    ajoutQuestion($_POST['nomAjout'],$_POST['anneeAjout'],$_POST['joueurAjout'],$_POST['tempsAjout'],$_POST['editeurAjout']);

  // header('Location :admin.php');
} else {

  //  header('Location :/admin.php');

}

Active tes erreurs afin d'avoir l'erreurs exactes

gweared
Auteur

J'ai mis ceci

// Afficher les erreurs à l'écran
ini_set('display_errors', 1);
// Enregistrer les erreurs dans un fichier de log
ini_set('log_errors', 1);
// Nom du fichier qui enregistre les logs (attention aux droits à l'écriture)
ini_set('error_log', dirname(file) . '/log_error_php.txt');

Mais cela ne me donne rien de plus :/

Il te faut aussi celle-ci pour les afficher :

// Afficher les erreurs et les avertissements
error_reporting(E_ALL);
gweared
Auteur

J'ai cela maintenant :

Warning: Use of undefined constant file - assumed 'file' (this will throw an Error in a future version of PHP) in C:\wamp\www\ludotheque\controller\action_admin.php on line 7

Et le code autour de cette ligne est .....

gweared
Auteur
// Afficher les erreurs à l'écran
ini_set('display_errors', 1);
// Enregistrer les erreurs dans un fichier de log
ini_set('log_errors', 1);
// Nom du fichier qui enregistre les logs (attention aux droits à l'écriture)
ini_set('error_log', dirname(file) . '/log_error_php.txt');
error_reporting(E_ALL);

mon header est dans mon controler

Sauf que ta redirection est située après l'appel de la fonction qui elle même contient de l'affichage de texte.
Ton erreur de constante est dù à ceci :

ini_set('error_log', dirname(file) . '/log_error_php.txt');

file n'est pas une constante, les constantes sont en UPPERCASE, tu voulais probablement utiliser la constante __FILE__.

gweared
Auteur

et du coup que faudrait-il faire?
Oui en effet, c'est plus juste ..

et du coup que faudrait-il faire?

Si tu parles de l'erreur qui concerne la constante, ma réponse précédente contient en elle la résolution de l'erreur, soit de remplacer file par __FILE__.
Est-ce si difficile que ça à comprendre ?

gweared
Auteur

je parlais pas de la constante mais de savoir où mettre ce code :)

Quel code ?