Besoin d'aide pour un script

[Résolu]
Signaler
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Je vous explique, je dois faire une application pour faire un planning sans base de données, c'est simple il y'a un dossier pour chaque jour de la semaine et un dossier bibliotheque avec tous les fichiers que l'on veut diffuser a un certain moment de la semaine. Pour ajouter un fichier dans la bibliotheque il faut cliquer sur un bouton ajouter et une popup avec un formulaire s'ouvre et on rentre le nom, la duree, le type de fichier et les mots clés. Maintenant après avoir fait ça il faut qu'on puisse cliquer dans un des jours de la semaine ( qui sera présenté sous forme de tableau) et qu'un formulaire s'ouvre afin qu'on puisse soit modifier les données soit supprimer le fichier. Ci dessous une petite explication de ce script :

"Script supprimer
Une fois que l'utilisateur clique sur supprimer
Si le fichier est présent dans un des jours de la semaine
Alors Afficher «Etes vous sûr de vouloir supprimer ce fichier?
Attention ce fichier est présent dans votre planning !»
Sinon Afficher «Etes vous sûr de vouloir supprimer ce fichier?»
Fin si
Si oui
Alors supprimer le fichier de la bibliothèque
Rafraîchir la bibliothèque (en supprimant le fichier)
Fermer la pop up
Sinon revenir sur la pop up de saisie du fichier sans suppression
Fin si"

Si quelqu'un peut m'aider car je ne sais pas comment m'y prendre.
Merci

41 réponses

Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Hello,
En fait le problème vient du fait que le script tente de supprimer le fichier $path.$a.$fichier_suppr qui est en fait (pour mardi par exemple) :

C:/Program Files/EasyPHP 2.0b1/www/waitingroom/mardiarchive.ppt

, or ce n'est pas le fichier mardiarchive.ppt mais mardi/archive.ppt.

Voilà une petite modification du script avec gestion des erreurs/messages

<?php

$fichier_suppr = 'archive.ppt';
$path = 'C:/Program Files/EasyPHP 2.0b1/www/waitingroom/';
$separator = '/';
$rep = array('.', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');

foreach ($rep as $a)
{
    // on ajoute le séparateur
    $f = $path . $separator . $a . $separator. $fichier_suppr;
    if( file_exists($f) )
    {
        if( unlink($f) )
        {
            echo '<li>', $f, ' SUPPRIME</li>';
        }
        else
        {
            echo '<li>Erreur: impossible de supprimé le fichier ', $f, '</li>';
        }
    }
    else
    {
        echo '<li>Le fichier ', $f, ' n\'existe pas</li>';
    }
}

?>

<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut

tu rends les choses complexes... c'est il faut que ton php genere un javascript qui genere un formulaire qui pointe vers un php qui supprime tes fichiers...

ca serait plus simple de faire genre :

<?php

$fichier_suppr = 'archive.ppt';
$path = 'C:/Program Files/EasyPHP 2.0b1/www/waitingroom/';
$separator = '/';
$rep = array('.', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');

$realy=(isset($_POST['ok']));

foreach ($rep as $a)
{
// on ajoute le séparateur
$f = $path . $separator . $a . $separator. $fichier_suppr;
if( file_exists($f) )
{
if ($realy){
if( unlink($f) )
{
echo '<li>', $f, ' SUPPRIME</li>';
}
else
{
echo '<li>Erreur: impossible de supprimé le fichier ', $f, '</li>';
}
}else{
echo '<li>vous allez supprimer ', $f,'</li>';
}
}
else
{
echo '<li>Le fichier ', $f, ' n\'existe pas</li>';
}
}
?>
<form action="#" method="post">

</form>
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Si quand je lance le script

ça me met un truc du genre :
<li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//bibliotheque/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//lundi/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//mardi/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//mercredi/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//jeudi/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//vendredi/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//samedi/nouveau.pps SUPPRIME</li><li>C:/Program Files/EasyPHP 2.0b1/www/waitingroom//dimanche/nouveau.pps SUPPRIME</li>
et quand je clique sur supprimer ça me met :

<li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//bibliotheque/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//lundi/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//mardi/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//mercredi/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//jeudi/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//vendredi/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//samedi/nouveau.pps n'existe pas</li><li>Le fichier C:/Program Files/EasyPHP 2.0b1/www/waitingroom//dimanche/nouveau.pps n'existe pas</li>
Je suppose que ça met ça car les fichiers viennent d'être effacer au lancement du script.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
suffit de modifier les echo. (afficher $a et supprimer les li)

est-ce-que tu peux valider les reponses stp ?
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
tout en haut, met :
echo 'vous allez supprimer le fichier ..... du';
$i=0;
ensuite remplace :
echo '<li>vous allez supprimer ', $f,'</li>';
par
if (($i++)!=0) echo ', ';
echo $a;
Messages postés
1267
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
29 juin 2010
1
Slut;

la syntaxe if(($i++) != 0) echo ','; dit que tant que $i est différent de 0, on affiche une virgule. Donc, pour les fichiers n°1, 2, 3, 4 ... (et pas le n°0). Le fait de faire $i++ c'est comme faire $i += 1 mais cela après le test
Par contre, si tu fais ++$i, c'est la même chose, sauf que $i est incrémenté avant le test.

Sinon, j'ai fais une version un peu plus compliqué :

<?php

$fichier_suppr = 'archive.ppt';
$path = 'C:/Program Files/EasyPHP 2.0b1/www/waitingroom/';
$separator = '/';
$rep = array('.', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');

$realy = ( isset($_GET['ok']) || isset($_POST['ok']) );
$msg array('is_del'> array(), 'del' => array(), 'error_del' => array(), 'not_exists' => array());

foreach ($rep as $a)
{
    // on ajoute le séparateur
    $f = $path . $separator . $a . $separator. $fichier_suppr;
    if( file_exists($f) )
    {
        if ($realy)
        {
            if( unlink($f) )
            {
                $msg['is_del'] = $a;
            }
            else
            {
                $msg['error_del'] = $a;
            }
        }
        else
        {
            $msg['del'] = $a;
        }
    }
    else
    {
        $msg['not_exists'] = $a;
    }
}

if( count($msg['del']) <> 0 )
{
    echo 'Vous allez supprimer le fichier ', $fichier_suppr, ' dans les repertoires suivants : ', implode(', ', $msg['del']);
    echo '
Confirmer ? [[?realy OUI]] [NON]';
}

if( count($msg['is_del']) <> 0 )
{
    echo 'Le fichier ', $fichier_suppr, ' à été supprimé dans les repertoires suivants : ', implode(', ', $msg['is_del']);
}

if( count($msg['error_del']) <> 0 )
{
    echo 'Erreur ! : Impossible de supprimer le fichier ', $fichier_suppr, ' dans les repertoires suivants : ', implode(', ', $msg['error_del']);
}

if( count($msg['not_exists']) <> 0 )
{
    echo 'Information ! : Le fichier ', $fichier_suppr, ' n\'existe pas dans les repertoires suivants : ', implode(', ', $msg['not_exists']);
}

?>
Ici, j'utilise un tableau pour stocker les informations, et le implode(', ' array()); l'affiche en mettant automatiquement une virgule.
<hr />Si ma reponse te convient, merci de l'accepter ! 
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
salut

tout d'abord, la premiere question que j'ai a te poser c'est :
- pourquoi refuses tu d'utiliser une base de donnee ?

ensuite, pour supprimer un fichier : unlink
ensuite, pour supprimer un dossier : rmdir
pour creer un dossier : mkdir
pour creer un fichier : touch

pour savoir si un fichier existe : file_exists, ou tout simplement is_file
pour savoir si un dossier existe : is_dir

sinon, je ne vois pas trop quoi t'expliquer, a part te dire que ce sont tes forms et liens qui doivent gerer les enchainements que tu mis entre "si", "fin si" et tes actions doivent-etre faits en php sur les pages cibles (action=...) de ces formulaires
mais j'imagine que ca tu le savais deja...

si t'avais une question un peu plus precise on pourrait vraiment t'aider... ou si t'avais un probleme dans un code... mais la...
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Je suis en stage et j'ai pour contrainte de ne pas utiliser de base de données voila pourquoi j'en utilise pas.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
c'est triste...

ca rend les choses beaucoup plus lentes, complexes, et instables...

je ne sais pas si c'est portable ou meme fiable, mais un conseil : lock tes fichiers quand tu fais une operation dessus.

le but : eviter que deux operations sur un meme fichier se fassent en meme temps... ca pourrait avoir des consequences desastreuses (j'ai deja eu ce genre de problemes...)
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Tu peux me montrer un exemple de code avec cette fonction unlink() car
je vois pas trop comment faire pour supprimer un fichier de la
bibiliothèque par exemple et en même temps supprimer ce fichier de tous
les jours de la semaine ou il se trouve.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
unlink('fichier') or die('erreur de suppression de fichier ligne '__LINE__);
unlink('lundi/fichier') or die('erreur de suppression de fichier ligne '__LINE__);
unlink('mardi/fichier') or die('erreur de suppression de fichier ligne '__LINE__);
unlink('mercredi/fichier') or die('erreur de suppression de fichier ligne '__LINE__);

...

tu peux faire un array pour simplifier la tache...

a la place du or die, si tu te sens d'attaque, tu peux utiliser les Exceptions...
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Je me sens d'attaque si tu m'aide un peu :) Tu peux m'expliquer le fonctionnement des exceptions.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
le principe : on essaie de faire une chose, et si on echoue, alors on peut recuperer une exception dans un bloc.


try{
... instructions qui peuvent echouer
}catch (Exception $e){
... utilisation de l'exception
}

pour echouer, on leve une exception : throw new Exception('message');
l'exception levee, elle quitte tout les appels de fonctions jusqu'a trouver un catch qui la couvre.

ensuite, Exception, c'est une classe, donc on peut faire des classes enfant :

class MonException extends Exception{
...
}

et ca permet de recuperer dans un catch plusieurs types d'Exceptions :
try{
... instructions qui peuvent echouer
}catch (MonException $e){
...
}catch (Exception $e){
...
}

histoire de les traiter differement

tu peux voir :
http://www.phpcs.com/codes/EXCEPTION-EXCEPTION-MYSQL-FILEEXCEPTION_43064.aspx
pour avoir un appercu de ce qu'on peut faire de beau avec des Exceptions
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

ça a l'air compliqué je partirais + sur les arrays, tu peux me dire comment il faut procéder et j'essaierai.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
les Exceptions, c'est pour gerer des erreurs... les arrays, pour eviter un code redondant...

$a = array('./', 'lundi/', 'mardi/', ....);

foreach ($tableau as $a){
unlink($a.'fichier') or die('erreur de suppression de fichier ligne '__LINE__);
}

ca te permet de supprimer fichier, dans chaque repertoir.
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Si j'utilise un array il faut qu'uavantça je mette le code de la fonction unlink et apres ceci?
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
je ne comprends pas ta question...

mais tu devrais tenter de faire quelquechose, et vennir avec un code, un message d'erreur et une question precise...
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Voila un code es ce que ça va comme ça?
<?php
$fichier_suppr="classeur.txt"

    unlink($fichier_suppr);
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/bibliotheque/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/lundi/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/mardi/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/mercredi/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/jeudi/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/vendredi/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/samedi/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
        if (file_exists(C:/Program Files/EasyPHP 2.0b1/www/waitingroom/dimanche/$fichier_suppr))/*Le fichier existe dans le planning*/
    {
            unlink($fichier_suppr)                            
    }
?>
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
non, tu as oublie des quotes, et on peut faire beaucoup plus court :
$path='C:/Program Files/EasyPHP 2.0b1/www/waitingroom/';
$ar=array('./', 'lundi', 'mardi', // met ici les autres jours de la semaine
);

foreach ($ar as $a){
$f=$path.$a.$fichier_suppr;
if (file_exists($f)) unlink($f);
}
Messages postés
39
Date d'inscription
mercredi 4 juin 2008
Statut
Membre
Dernière intervention
18 juin 2008

Es ce que tu pourrait juste me commenter ce code pour que je comprenne un peu mieux. Merci