Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problemes de tableaux et avec isset...

7 réponses
Avatar
Pierre Kiroul
Bonjour tout le monde,

Voila j'ai deux problèmes, le premier c'est avec isset.
------------------------------
1) Pouvez-vous m'expliquer très clairement ;) la nuance entre ces deux types
d'instructions car j'ai vraiment du mal à la saisir:

$MaVar = "Oui";

if ($MaVar){... etc.

ET

if (isset($MaVar)){... etc.
------------------------------
2) Le second est un problème concernant un exercice dans un bouquin.

Alors ici, c'est un problème de tableaux. Je n'arrive pas a récupérer toutes
les valeurs des tableaux $Supprimer[] et $Renommer[] provenant de mon
formulaire. Par contre, le tableau $NouveauNom[] fonctionne très bien.

Du fait, si par exemple j'ai une liste de trois fichiers et que je veuille
renommer le 1er tout va ben mais là où est le problème c'est lorsque je veux
renommer le 2ème et/ou le troisième sans modifier le 1er. Il me dit dans ce
cas là qu'il n'y a qu'une clé (0) et qu'une valeur dans le tableau
$Renommer[].

Où est le souci d'après vous? (Evitez de me dire que c'est moi) ;)))

Voici le code (reste plus qu'a copier-coller pour tester) :

<html>

<head>
<title>Manipulation des fichiers d'un répertoire (envoi de tableaux depuis
un formulaire)</title>
</head>

<body>
<table border=0 width="80%" cellspacing=2 cellpadding=2 align=center>
<?php

/* Ce script permet d'afficher le nom et la taille des fichiers contenus
dans un répertoire,
de changer leur nom ou de les supprimer. */

if (isset($_POST['Upload']))
{
// Traitement des téléchargements de fichiers
print("<tr><td colspan=4 align=center>Nom du fichier téléchargé :" .
$_FILES['Fichier']['name'] . ".</td></tr>n");
print("<tr><td colspan=4 align=center>Taille du fichier téléchargé :" .
$_FILES['Fichier']['size'] . ".</td></tr>n");
if (copy($_FILES['Fichier']['tmp_name'], "users/" .
$_FILES['Fichier']['name']))
{
print("<tr><td colspan=4 align=center>Votre fichier," .
$_FILES['Fichier']['name'] . ", a été téléchargé.</td></tr>n");
}
else
{
print("<tr><td colspan=4 align=center>Votre fichier, " .
$_FILES['Fichier']['name'] . ", ne peut pas être recopié.</td></tr>n");
}
unlink($_FILES['Fichier']['tmp_name']);
print("<tr><td colspan=4 align=center> </td></tr>n");
}

if (isset($_POST['Supprimer']))
{
// Traitement des suppressions de frichiers.
foreach($_POST['Supprimer'] as $key => $val)
{
$Supprimer[]=$val;
}
for ($i = 0; $i < count($Supprimer); $i++)
{ print("Test 01 :".$Supprimer[$i]." - ".count($Supprimer[$i]));
if (unlink ("users/".$Supprimer[$i]))
{
print("<tr><td colspan=4 align=center>Votre fichier, " . $Supprimer[$i] . ",
a été supprimé.</td></tr>n");
}
else
{
print("<tr><td colspan=4 align=center>Votre fichier, " . $Supprimer[$i] . ",
ne peut pas être supprimé.</td></tr>n");
}
}
print("<tr><td colspan=4 align=center> </td></tr>n");
}

if (isset($_POST['Renommer']))
{ print_r(array_values ($_POST['Renommer'])); //TEST vérification tableaux
print_r(array_values ($_POST['NouveauNom']));
print("<br><hr><br>");
// Traitement des changements des de noms de fichiers.

for ($n = 0; $n < count($_POST['Renommer']); $n++)
{
$AncienNom = $_POST['Renommer'][$n];
$Ancien = "users/$AncienNom";
$Nouveau = "users/".$_POST['NouveauNom'][$n];
if (rename($Ancien, $Nouveau))
{
print("<tr><td colspan=4 align=center>Le nom de votre fichier, " .
$_POST['Renommer'][$n] . ", a été modifié.</td></tr>n");
}
else
{
print("<tr><td colspan=4 align=center>Le nom de votre fichier, " .
$_POST['Renommer'][$n] . ", n'a pas pu être modifié.</td></tr>n");
}
}
print("<tr><td colspan=4 align=center> </td></tr>n");
}

// Formulaire.
print("<form action="fichiers02.php" method=post
enctype="multipart/form-data">n");
print("<tr align=center><td><b>Nom du fichier</b></td><td><b>Taille du
fichier</b></td><td><b>Supprimer</b></td><td><b>Renommer</b><br>(Taper le
nouveau nom de la boîte)</td></tr>n");

// Lire les fichiers dans le répertoire.
$Open = opendir("users");
while($Fichiers = readdir($Open))
{
$NomFichier = "users/" . $Fichiers;
if (is_file($NomFichier))
{
$Taille = filesize("users/$Fichiers");
print("<tr><td>$Fichiers</td><td>$Taille</td><td align=center><input
type=checkbox name="Supprimer[]" value="$Fichiers"> </td><td
align=center><input type=checkbox name="Renommer[]" value=$Fichiers">
<input name="NouveauNom[]"></td></tr>n");
//print("$Supprimer[$n]");
}
}
closedir($Open);

// Option de téléchargement.
print("<tr align=center><td colspan=4> </td></tr>n");
print("<tr align=center><td colspan=4><input type=checkbox name="Upload"
value="Oui">Télécharger un fichier vers le serveur :<input type=file
name="Fichier" size=20></td></tr>n");
print("<tr align=center><td colspan=4><br><input type=submit name="submit"
value="Exécution"></form></td></tr>n");

?>

</body>

</html>
------------------------------
Par avance merci beaucoup à tous ceux (et celles) qui auront passé du temps
à m'aider.

7 réponses

Avatar
Guillaume Bouchard
Pierre Kiroul wrote:
Bonjour tout le monde,


Bonjour.

Voila j'ai deux problèmes, le premier c'est avec isset.
------------------------------
1) Pouvez-vous m'expliquer très clairement ;) la nuance entre ces deux types
d'instructions car j'ai vraiment du mal à la saisir:

$MaVar = "Oui";


Tu met la chaine "Oui" dans ta var

if ($MaVar){... etc.


Tu test si $MaVar renvoie true ou false. Dans le cas present celle-ci
renvoie true vu que false c'est FALSE ou 0 ou pas definit.

if (isset($MaVar)){... etc.


Tu test si ton isset renvoie true ou false. Dans le cas present il
revnoie true car $MaVar est definit, dans le cas contraire, il renverait
false.

Les differences principales.

$MaVar = 0;
1) false
2) true

$MaVar = "0";
1) false
2> true;

$MaVar =.. ( en fait, il n'y a pas de $MaVar)
1) Gros warning
2) false

Bref, dans tout les cas il est deconseillé d'utiliser le cas 1.

------------------------------
Alors ici, c'est un problème de tableaux. Je n'arrive pas a récupérer toutes
les valeurs des tableaux $Supprimer[] et $Renommer[] provenant de mon
formulaire. Par contre, le tableau $NouveauNom[] fonctionne très bien.


Il faut que tu sache que les checkbox n'envoient pas leur valeur si
elles ne sont pas cochées, donc c'est normal que si tu ne coches pas
tout, tu n'es pas toutes les valeurs. Le tableau $NouveauNom est bien
crée car les champs input envoyent bien leurs valeurs, qui est une
chaine vide.

Du fait, si par exemple j'ai une liste de trois fichiers et que je veuille
renommer le 1er tout va ben mais là où est le problème c'est lorsque je veux
renommer le 2ème et/ou le troisième sans modifier le 1er. Il me dit dans ce
cas là qu'il n'y a qu'une clé (0) et qu'une valeur dans le tableau
$Renommer[].


Ce qui semble logique comme je te l'ai dit.

Où est le souci d'après vous? (Evitez de me dire que c'est moi) ;)))


C'est toi ? :)
Non, le souci se situe dans une incomprension du fonctionement des
formulaires.

Voici le code (reste plus qu'a copier-coller pour tester) :


La prochaine fois que tu nous copie colle 200 kilometres de code, esseye
de l'indenter, c'est saoulant de devoir le faire soit même :)

<table border=0 width="80%" cellspacing=2 cellpadding=2 alignÎnter>


Et encore un livre qui apprend le php mais qui ne connait pas l'html,
c'est enervant. Bon... <set mode="extremiste_w3c" value="off" /> sinon
je vais mourir :)


if (isset($_POST['Upload']))


Bon, cette partie fonctionait, ont zap.

foreach($_POST['Supprimer'] as $key => $val)
{
$Supprimer[]=$val;
}
for ($i = 0; $i < count($Supprimer); $i++)


Note, que je trouve que ces boucles sont inutiles :

foreach($_POST['Supprimer'] as $val){
// ton code
}

On evite donc deux boucles avec un for, et une variable i inutile.

Bon, ton code concernant la supression devait fonctioner vu que même
avec ton erreur de formulaire, les noms des fichiers à supprimer
arrivaient bien.

for ($n = 0; $n < count($_POST['Renommer']); $n++)
$Nouveau = "users/".$_POST['NouveauNom'][$n];


Le probleme c'est que $_POST['NouveauNom'] contient tous les fichiers,
alors que $_POST['Renommer'] ne contient que les nom de fichier à renommer.
Il va donc faloir repensser le formulaire.

print("<tr><td>$Fichiers</td><td>$Taille</td><td alignÎnter><input
type=checkbox name="Supprimer[]" value="$Fichiers"> </td><td
alignÎnter><input type=checkbox name="Renommer[]" value=$Fichiers">
<input name="NouveauNom[]"></td></tr>n");
//print("$Supprimer[$n]");


Donc, on ne va s'atarder que sur Renommer[] et NouveauNom.
Pourquoi ne pas construire ta champs de cette manière :

<input type="checkbox" name="Renommer[$i]" value="$Fichiers" /> <input
type="text" name="NouveauNom[$i]" />

(Grouph, html vraiment horrible, c'est même étonant que tu recoives les
variables.)

Cette variable $i sera incrementée de 0 à x en fonction du nombre de
fichiers. Il te suffira par la suite de recuperer l'indice dans
$_POST['Renommer'] dans ton foreach pour trouver celui de
$_POST['NouveauNom'].

foreach($_POST['Renommer'] as $key => $val){
$val; // Nom du fichier
$_POST['NouveauNom'][$key]; // Nouveau nom
}

Si je n'ai pas dit de conneries, je te laisse essayer cela.

<set mode="extremiste_w3c" value="on" />

Je vais quand même mettre mon petit commentaire :

Le html qui tu ecrit est vraiment degeulasse ! Même sans mon coté
extremiste, je trouve que ne pas mettre de type="text" ou d'oublier les
guillemets c'est vraiment mal. Alors je ne te parle pas des
<table><td><b> qui me font bondir de ma confortable chaise.

Le php n'existe pas (dans ce cas de figure) sans l'html, peut etre
faudrait-il connaitre celui-ci avant ? C'est comme dans la vrai vie,
avant de conduire une voiture à 300 km/heure sur l'autoroute, il est
preferable d'avoir le permis.

A bon entendeur.

--
Guillaume.

Avatar
Etienne SOBOLE
"Pierre Kiroul" a écrit dans le message de news:
40dfe6c1$0$30727$
$MaVar = "Oui";

if ($MaVar){... etc.

ET

if (isset($MaVar)){... etc.


tu ajouttes
error_reporting(E_ALL);
au debut de ton script,

puis tu essayes de commenter la ligne
$MaVar = "Oui";

et tu vas tout de suite comprendre la différence !!!

Etienne

Avatar
Thibaut Allender

Le php n'existe pas (dans ce cas de figure) sans l'html, peut etre
faudrait-il connaitre celui-ci avant ? C'est comme dans la vrai vie,
avant de conduire une voiture à 300 km/heure sur l'autoroute, il est
preferable d'avoir le permis.


a ce train la, on ne risque pas de le garder longtemps :)

--
thibaut allender | freelance | web|system developer|designer
+32 496 26 75 76 | http://capsule.org *new version*

Avatar
Pozzo
Guillaume Bouchard wrote:
Je vais quand même mettre mon petit commentaire :

Le html qui tu ecrit est vraiment degeulasse ! Même sans mon coté
extremiste, je trouve que ne pas mettre de type="text" ou d'oublier les
guillemets c'est vraiment mal. Alors je ne te parle pas des
<table><td><b> qui me font bondir de ma confortable chaise.

Le php n'existe pas (dans ce cas de figure) sans l'html, peut etre
faudrait-il connaitre celui-ci avant ? C'est comme dans la vrai vie,
avant de conduire une voiture à 300 km/heure sur l'autoroute, il est
preferable d'avoir le permis.

A bon entendeur.


Ahhhhhhhh quel bonheur de lire ça de temps en temps... :)

--
Pozzo - Heu-Reux :-)

Avatar
Pierre Kiroul
Je m'excuse d"être débutantn mais vous, vous n'avez jamais gu l'être... je
vous admire.

Merci.

"Pozzo" a écrit dans le message de
news:40e11ab8$0$21022$
Guillaume Bouchard wrote:
Je vais quand même mettre mon petit commentaire :

Le html qui tu ecrit est vraiment degeulasse ! Même sans mon coté
extremiste, je trouve que ne pas mettre de type="text" ou d'oublier les
guillemets c'est vraiment mal. Alors je ne te parle pas des
<table><td><b> qui me font bondir de ma confortable chaise.

Le php n'existe pas (dans ce cas de figure) sans l'html, peut etre
faudrait-il connaitre celui-ci avant ? C'est comme dans la vrai vie,
avant de conduire une voiture à 300 km/heure sur l'autoroute, il est
preferable d'avoir le permis.

A bon entendeur.


Ahhhhhhhh quel bonheur de lire ça de temps en temps... :)

--
Pozzo - Heu-Reux :-)



Avatar
Pozzo
Pierre Kiroul wrote:
Je m'excuse d"être débutantn mais vous, vous n'avez jamais gu l'être... je
vous admire.


Je ne vois vraiment pas le rapport avec ma remarque... qui concernait
une remarque d'ordre général sur HTML/PHP et pas une critique spécifique
à votre code. Quand on débute il est normal de faire des erreurs... mais
si on ne supporte pas les critiques - constructives - on va avoir du mal
à s'améliorer... Le php c'est bien mais le HTML c'est indispensable.
Donc pour un débutant, avant de commencer avec le PHP, savoir écrire du
HTML propre et correct et comprendre les interractions entre serveur
web, PHP, HTML et javascript (notamment qui génère quoi, qui interprete
quoi, qui stocke quoi, qui échange quoi) me semble indispensable.

PS : Vous quotez comme un goret ;-)

--
Pozzo - Il vous en prie

Avatar
Olivier Miakinen
Le 02/07/2004 10:10, Pozzo répondait à Pierre Kiroul :

[...]
si on ne supporte pas les critiques - constructives - on va avoir du mal
à s'améliorer... [...]


Je suis d'accord avec ça (comme avec le reste de ta réponse, d'ailleurs).

PS : Vous quotez comme un goret ;-)


Là, pour que la critique soit constructive, il faut lui donner les
moyens de savoir comment s'améliorer :
http://www.giromini.org/usenet-fr/repondre.html

[ copie et suivi vers fr.usenet.usages, groupe non modéré ]