8791 sujets

Développement web côté serveur, CMS

Modérateur
Bonjour,
Je souhaite mettre en place un système de renommage de dossier. Pour cela, je génère par php les lignes suivantes (j'y ai mis du JavaScript, comme vous le constaterez, qui permet d'afficher/masquer le champ permettant le renommage) :
<?php
$i = 1;
echo '<ul>'."\n";
foreach ($sorted_style_folders as $style_folder) {
        // Try to give the right chmod
        @chmod ($style_folder, 0751);
        // Generating the rename element
        $rename_folder = (is_writable($style_folder))?'<span id="rfield_'.$style_folder.'" style="display: none;"> <input type="text" name="rename'.$i.'" value="'.$style_folder.'" /> <input type="hidden" name="folder_name'.$i.'" value="'.$style_folder.'" /><input type="submit" name="vrename'.$i.'" value="OK" /></span> | <a href="#rfield_'.$style_folder.'" onclick="visibility(\'rfield_'.$style_folder.'\'); return false;">Renommer</a>':'';
        echo '<li>'.$style_folder.$rename_folder.'</li>'."\n";
        $i++;
}
echo '</ul>'."\n";
?>

Ce qui donne en html ceci pour des dossiers nommés Dossier 1 à Dossier 4 :
<ul>
<li>Dossier_1<span id="rfield_Dossier_1" style="display: none;"> <input type="text" name="rename1" value="Dossier_1" /> <input type="hidden" name="folder_name1" value="Dossier_1" /><input type="submit" name="vrename1" value="Valider" /></span> | <a href="#rfield_Dossier_1" onclick="visibility('rfield_Dossier_1'); return false;">Renommer</a></li>
<li>Dossier_2<span id="rfield_Dossier_2" style="display: none;"> <input type="text" name="rename2" value="Dossier_2" /> <input type="hidden" name="folder_name2" value="Dossier_2" /><input type="submit" name="vrename2" value="Valider" /></span> | <a href="#rfield_Dossier_2" onclick="visibility('rfield_Dossier_2'); return false;">Renommer</a></li>
<li>Dossier_3<span id="rfield_Dossier_3" style="display: none;"> <input type="text" name="rename3" value="Dossier_3" /> <input type="hidden" name="folder_name3" value="Dossier_3" /><input type="submit" name="vrename3" value="Valider" /></span> | <a href="#rfield_Dossier_3" onclick="visibility('rfield_Dossier_3'); return false;">Renommer</a></li>
<li>Dossier_4<span id="rfield_Dossier_4" style="display: none;"> <input type="text" name="rename4" value="Dossier_4" /> <input type="hidden" name="folder_name4" value="Dossier_4" /><input type="submit" name="vrename4" value="Valider" /></span> | <a href="#rfield_Dossier_4" onclick="visibility('rfield_Dossier_4'); return false;">Renommer</a></li>
</ul>

A ce point-là, je suis bloqué. En effet, je ne sais pas comment récupérer les valeurs renamex et folder_namex lorsque l'utilisateur clique sur le bouton vrenamex (où x est le chiffre 1, 2, 3, 4).
Pour précisions, je ne connais pas à l'avance le nombre de dossiers listés (il peut donc varier), il faut absolument que la récupération se fasse en utilisant la méthode POST (avec la méthode GET ça aurait été plus simple !). La récupération se fera en haut de page bien évidemment (après clic sur le bouton de validation) en utilisant quelque chose du style suivant :
if (isset($_POST['vrenamex'])){
// Traitement des données du dossier x
}

Cet exemple n'est pas valide mais vous fait comprendre mon dilemme je pense. La solution est sûrement simple mais comme c'est la première fois que je mets en place quelque chose de ce genre, je n'arrive pas à la trouver. Je me débrouille sûrement mal lors de la génération des lignes concernant les dossiers... Smiley rolleyes
Merci d'avance Smiley smile
Modifié par jojaba (04 Jun 2011 - 18:05)
Modérateur
Trouvé !!! Smiley smile
En fait, il suffisait d'envoyer en même temps que les données (par un champ caché) le nombre de dossiers listés, de lancer une boucle qui vérifie l'état de chaque input de validation et ainsi de connaître celui sur lequel l'utilisateur a cliqué. En clair :
Modification dans le listing
<?php 
$folder_count = count($sorted_style_folders);
$i = 0; 
echo '<ul>'."\n"; 
foreach ($sorted_style_folders as $style_folder) { 
        // Try to give the right chmod 
        @chmod ($style_folder, 0751); 
        // Generating the rename element 
        $rename_folder = (is_writable($style_folder))?'<span id="rfield_'.$style_folder.'" style="display: none;"> <input type="text" name="rename'.$i.'" value="'.$style_folder.'" /> <input type="hidden" name="folder_name'.$i.'" value="'.$style_folder.'" /><input type="submit" name="vrename'.$i.'" value="OK" /></span> | <a href="#rfield_'.$style_folder.'" onclick="visibility(\'rfield_'.$style_folder.'\'); return false;">Renommer</a>':''; 
        echo '<li>'.$style_folder.$rename_folder.'</li>'."\n"; 
        $i++; 
} 
echo '</ul>'."\n";
echo '<input type="hidden" name="folder_count" value="'.$folder_count.'" />'."\n";
?>

Code en haut de page pour intercepter la soumission :
if (isset($_POST['folder_count'])){
        $folder_count = $_POST['folder_count'];
        for ($i=0; $i<$folder_count; $i++) {
                if (isset($_POST['vrename'.$i])){
                        $new_name = $_POST['rename'.$i];
                        $folder_name = $_POST['folder_name'.$i];
                        if ($new_name != '') {
                                rename ($folder_name, $new_name);
                        }
                }
        }
}


Voili, voilou Smiley biggrin
Je suis preneur d'une meilleure méthode si vous connaissez (je pense que le fait de lancer une boucle va ralentir l'affichage de la page)... Smiley cligne
Modifié par jojaba (04 Jun 2011 - 18:04)