Bonjour,

Je suis dans l’embarras, je n'arrive pas à voir comment effectuer cette fonction j'ai plusieurs idées mais je n'arrive pas à y voir clair. Pouvez-vous m'éclairer?

Alors je vous explique la situation, je souhaites à partir d'un formulaire que voici :

<form action="?p=contenu/accueil_photos.php" method="post">         
                <input type="submit" value="Enregistrer les modification"/><br/>
<?php
$dos = "../upload/";
$dir = opendir($dos);
while($file = readdir($dir)){
    $allow_ext = array("jpg",'png','gif');
    $ext = strtolower(substr($file,-3));
    if(in_array($ext,$allow_ext)){
        $file = utf8_encode ($file);
        ?>
        <div class="gal">    
        <a href="../upload/<?php echo $file; ?>" class="zoombox zgallery1"><img src="../upload/min/<?php echo $file; ?>"/></a>
        <span>
            <input type="checkbox" name="photos]" value="<?php echo $file; ?>"/><?php echo $file; ?>

        </span>
        </div>
        <?php
    }
}
?>

effacer toutes les photos de l'accueil (ça c'est bon) mais surtout enregistrer les nouvelle photos dans la table cependant quand j'envoie mes photos via le formulaire j'ai en retour un array que voici.

Array ( [0] => P1120401.JPG [1] => P1120408.JPG [2] => P1120410.JPG )

Et donc avec cet array la je veux enregistrer dans la table en multiligne (je ne sais pas si je dois bien utilisé ce terme la) pour que ça puisse me donner ceci:

id name idmedia
1 P1120401.JPG 1
2 P1120408.JPG 1
2 P1120410.JPG 1

le formulaire est rediriger vers cette page :

$media = Model::load("media");
$media->savemedia($_POST, 01);

et voici la fonction :

public function savemedia($data, $idmedia){ 
               $media = $_POST'photos'];
               print_r($media);
               $sql = "DELETE FROM ".$this->table." WHERE idmedia=$idmedia";
                mysql_query($sql) or die(mysql_error()."<br/> => ".mysql_query());   
               $sql ="INSERT INTO ".$this->table."(";
                              foreach($data as $k=>$v){
                   $sql .="$k,";
               }
               $sql = substr($sql,0,-1);
               $sql .=") VALUES ('',";
               foreach ($media as $photo) {
                $SQL .= "'$photo',";
                }
                $SQL = substr($SQL,0,-1).';';
               $sql .= ",'$idmedia')";               
               print_r($sql);

       }

Alors voici mes piste:
La première est d'utiliser la fonction count en utilisant les index $_POST'photos']'1'],$_POST'photos']'2'],$_POST'photos']'3'], etc...
ou alors la deuxième de séparer les valeurs array en en une seule. c'est à dire : $photos1 = $_POST'photos']'1'];
ou alors j'atend d'autres propositions car la je vois pas et je ne vois pas comment m'y prendre.

Je débute en poo, et en php je suis toujours en apprentissage de connaissance.
Please !!!

Je ne suis pas sur d'avoir bien expliquer donc si vous ne comprenez pas n'hésitez pas à me poser des questions.
Merci à tous!!

2 réponses


Tackacoder
Réponse acceptée

Salut,
Déjà à la première ligne de la fonction tu peux remplacer par

$media = $data'photos'];

car tu as passé ta variable POST dans ta fonction

Ensuite, si j'ai bien compris, il faut que tu fasses 3 requêtes d'insertion pour ajouter 3 lignes distinctes.
Du genre (c'est une idée)

foreach ($media as $photo) {
    INSERT INTO ".$this->table."(name) VALUES ($photo)
}

Il y aura des ajustements à faire

Edouard

jim449
Auteur

Merci à toi Edouard de m'avoir répondu et ta réponse ma été bien utile. Voici donc mon code final:

public function savemedia($data, $idmedia){ 
              $media = $data'photos'];
               $sql = "DELETE FROM ".$this->table." WHERE idmedia=$idmedia";
                mysql_query($sql) or die(mysql_error()."<br/> => ".mysql_query());   
               foreach ($media as $photo) {
                    $sql = "INSERT INTO ".$this->table." (name,idmedia) VALUES ('$photo','$idmedia')";
                    mysql_query($sql) or die(mysql_error());
                }
       }

Je pense que je me compliquai beaucoup, alors que c'était beaucoupl plus simple que ce que je pensai.
Je te remercie.

Cordialement,
Jimmy