8795 sujets

Développement web côté serveur, CMS

Bonjour tout le monde!

J'ai un petit soucis avec ma fonction d'insertion. Je récupère des variables via un formulaire html. Je les passe à ma fonction et je récupère un message d'ajout si çà a bien marché.

Sauf que là... çà ne marche pas. Je passe bien à travers ma fonction, récupère le message, mais rien n'entre dans la table. Je vous montre le code puis je vous explique ce que j'ai déjà tenté. J'ai utilisé la même fonction, avec d'autres variables, sur ce même site, et çà se passe super bien. J'ai donc l'intuition que çà vient de mes variables, mais je ne m'en sors pas.

La Fonction

<?php
function album_add($bdd,$table,$nom,$key,$set)
{
    $query = "INSERT INTO $table(id,nom,key,set) VALUES (:id, :nom, :key, :set)";
    $req = $bdd->prepare($query);
    $req->execute(array(
        'id' => "",
        'nom' => $nom,
        'key' => $key,
        'set' => $set,
        ));
        
    $message_add = "Ajout réalisé avec succès";
    return $message_add;     
}?>


le code

<h3> Ajouter un Album </h3>
     <form class="form" action="?p=admin&t=admin_photos&ajout=true" method="post">
          <label for="nom">Nom: <input  size="24" type="text" name="nom" id="nom" /></label>
          <label for="key">Key: <input value="676e8bb4529a8d40335c94032311cd32" size="24" type="text" name="key" id="key" /></label>
          <label for="set">Set: <input size="24" type="text" name="set" id="set" /></label>
          <input type="submit" value="ajouter" />
     </form>


et sur la même page

  <?php  
if (isset($_GET['ajout']))
    {
        $message = album_add($bdd,'album',$_POST['nom'],$_POST['key'],$_POST['set']);
    }
?>


Voici la structure de ma table
upload/25733-Capturedec.png

Et enfin, ce à quoi correspondent les champs :
Nom : nom classique "Album photo1", ou encore "L'assos à Paris" etc
Key : clé api flickr type "516f8bb4529c8e40335c94032311cd32
Set : id d'un set de photo flickr, type "72157623989151641"


- J'ai tenté d'exécuter directement la requête dans la console sql, çà marche parfaitement.
- Je récupère bien mon message, aucune erreur ne s'afifche
- Une fonction équivalente (autres variables, autre table, mais même code) marche parfaitement bien


Merci d'avance à ceux qui pourront m'aider, et merci quand même à ceux qui essaieront Smiley cligne
Modifié par lautrejojo (24 May 2010 - 20:49)
Il faut ajouter les deux points (:) devant les clés de ton tableau de paramètres sinon il ne retrouve pas les emplacements dans la requête.

De plus tu devrais tester la valeur renvoyée par la méthode execute() pour savoir si ta requête a bien été exécutée ou non avant de renvoyer un message de réussite par défaut.

http://www.php.net/manual/fr/pdostatement.execute.php
salut, et merci Smiley cligne

Ok pour le test. j'avais un peu la flemme, mais je vais l'ajouter. Les ":" ajoutés n'ont rien changé. Je précise que j'ai une fonction (voir ci-dessous) analogue qui marche parfaitement.


function news_add($bdd,$table,$titre,$resume,$message)
{
    $query = "INSERT INTO $table(id,auteur,titre,resume,message,date_debut) VALUES (:id, :auteur, :titre, :resume, :message,NOW())";
    $req = $bdd->prepare($query);
    $req->execute(array(
        'id' => "",
        'auteur' => "moimeme",
        'titre' => $titre,
        'resume' => $resume,
        'message' => $message,
        ));
        
    $message_add = "Ajout réalisé avec succès";
    return $message_add;     
}
Ok, j'ai trouvé...

Çà vient de ma table, à la base : les champs "key" et "set" posent problème. Je ne sais pas d'pù çà vient et à quoi c'est dû, mais en les remplaçant par d'autres noms plus "neutres", on règle le problème !

Merci!