PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Je n'ai aucune inquiétude...

Et tu démontres, en une seule phrase, ton potentiel d'inutilité d'aide... sur ce post...

Reprenons :

Moi : "j'ai une voiture, je ne sais pas conduire et j'aimerai aller à Paris ?!"
Toi : "Alors, tu vois, la voiture à des roues, elle fonctionne à l'essence, etc. !"
Moi : "Heu, oui, mais je ne sais pas conduire... !"
Toi : "Donc, tu dois passer des vitesses pour faire avancer la voiture..."
Moi : "Heu oui, mais je ne sais, ni comment faire, ni comment ça fonctionne..."
Toi : "Si tu veux, tu peux t'aider du volant !"

Pour conclure, je comprends bien ta démarche d'aide, surtout sur la théorie, mais dans la pratique, tu "me sembles" inutile.
Non pas que tu ne sais pas, puisque tu as démontré, par ta multitude de phrases théoriques que tu étais bien calé en programmation PHP, d'où ta suprématie légendaire sur un novice comme moi, mais que tu ne veux pas.
Donc il est toujours plus facile de dénigrer un travail, certes mal fait, que de le créer !

Pour t'imager, je te vois bien dans ton canapé, bière à la main en regardant un match de football, refaire le match et donner des indications (ordres) aux joueurs contre leur adversaire, en leur expliquant comment ils doivent jouer et se comporter.
J'aime les donneurs de leçons, il me font toujours rire.

Mais MERCI, tout de même, de ton intervention.

PS : "... de s'en vouloir inspirer" = de vouloir s'en inspirer

#2 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Kris,
excuse moi du peu, mais je suis surpris de la démarche que tu as entreprise depuis le début de mon post.
Exemple concret, tu me parles des short-tags PHP, sans même m'en expliquer les aboutissants, mais une fois ton égo atteint, là tu me donnes une explication digne de ce nom.

En aucun cas je ne remets en cause votre savoir-faire, vos compétences et votre énergie à intervenir sur ce forum (ce serait déplacé, mal venu et j'en ai surtout pas la prétention, moi smile ).

Loin de moi que de penser que je suis important et utile à ce forum, mais j'aurais pu ne pas poster la réponse que j'ai acquise, mais je l'ai fait, je ne me suis pas simplement contenter de poster, d'avoir une (mais pas l'unique) solution et de ne jamais revenir sur ce forum.

Je comprends ta démarche de m'expliquer la problématique de mon script que j'ai compris et assimilé dans le virtuel, mais dans les faits, je l'ai bien expliqué, je suis incapable de codé correctement.

Donc certes, j'ai amené une solution qui fonctionne mais qui, je le reconnais, paraît "bancale" de par son contenu "exotique", mais j'ai amené une solution concrète, pas virtuel.

Alors ensuite, il appartient à chacun de prendre, soit le script bancal, soit de prendre le script bancal et tes explications, qui, je le redis, je les comprends dans leurs idéaux de fonctionnement, mais je suis incapable de coder.

Merci pour ta compréhension.

PS : je te l'accorde, mon script ne fonctionne pas sur le fait de supprimer les espaces dans la nomination du fichier, et après relecture, me suis aperçu qu'il n'y avait aucun ligne de code qui ne le réclamait. Merci encore de le voir et par la même occasion, de souligner mon incompétence à pouvoir le coder, ceci sera fort utile pour les futurs débutants PHP.

----------------------------------------------------
À vaincre sans péril, on triomphe sans gloire

#3 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

J'entends bien vos explications, mais :
1/ j'ai fourni le script qui fonctionnait à moitié et je demandais de l'aide pour l'améliorer, donc des faits.
2/ j'ai fini par fournir un script qui fonctionne, mais qui ne convient certainement pas au puriste, mais qui fonctionne tout de même.
3/ je fourni quelque chose, moi, et j'essaye de faire évoluer le script, mais il est plus facile de critiquer que d'apporter des solutions, comme dit plus haut.
4/ heureusement que je n suis pas resté sur ce forum, car c'est un autre forum qui m'a fourni la solution et j'ai pu réadapté mon script en fonction des éléments que l'on m'a fourni.
5/ je comprends qu'il puisse y avoir des abus pour des gens qui demandent des scripts tout prêt à l'emploi, mais ce n'ai pas mon cas, me trompe-je ?

Donc je ne comprends pas la philosophie de votre forum d'entraide, ne pas intervenir car cela se rapporterait à une approche presque commerciale, mais critiquer des gens qui peuvent apporter des solutions concrète, ils se retrouvent rembarrés !

ALORS, dois-je supprimer ma solution ?

#4 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Tu ne le crois pas mais :

- Je ne comprends pas ton allusion sur les balises php ?!

- Depuis le début, je reconnais l'effort de m'aider en essayant de me guider, mais comme expliqué plus haut, je ne sais pas programmer en php, donc tu m'apportes que des critiques sans me donner de solution écrite, mais en montrant mes fautes.
Ne sachant pas programmer, d'où ma démarche sur ce forum, le script restera dans l'état, car je comprends que tu puisses dire qu'il y ait des erreurs, mais en aucun cas tu interagis dessus.
Donc c'est vrai qu'il est plus aisé de critiquer que d'agir, mais c'est comme demander à un bambin de monter dans un avion et lui demander de te conduire où tu veux...
Alors voilà comment je perçois tes interventions, je vois qu'il y a un problème, mais ne sais comment le réparer.

Mais merci de ton aide, de ton temps, car cela aidera surement des gens plus compétent que moi à reprendre et améliorer ce script grâce à tes remarques !
Car je ne saurais le faire améliorer !

#5 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Donc, voici la solution :

<?php
// Taille maximum
$MAX_FILE_SIZE = 100;

// Dossier de destination du fichier
$folder = "upload/";

// Tableau array des différents types
$allowed_types = array(
"image/bmp",
"image/gif",
"image/pjpeg",
"image/jpeg",
"image/jpg",
"image/png",
"image/tiff",
"application/postscript",
"image/psd",
"application/x-shockwave-flash",
"multipart/x-zip",
"application/msword",
"application/excel",
"application/vnd.ms-powerpoint",
"application/pdf",
"text/html",
"text/css",
"audio/aiff",
"audio/mpeg",
"audio/wav",
"audio/x-ms-wma",
"video/msvideo",
"video/avi",
"video/mpeg",
"video/x-ms-wmv"
);

// Variables récupérées par méthode POST du formulaire
$fname = $_FILES['fichier']['name'];
$ftype = $_FILES ['fichier']['type'];
$fsize = $_FILES ['fichier']['size'];
$ftmp = $_FILES ['fichier']['tmp_name'];
$extension_upload = substr( strrchr($_FILES['fichier']['name'], '.') ,1);

// Divers tests afin de savoir si :

// Le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}

// La taille du fichier n'est pas dépassée
else if($fsize > $MAX_FILE_SIZE){$error = 2;}


else
{
      // Si le fichier existe déjà
      if (file_exists('./upload/'.$fname))
    {
    //Si le fichier existe, on rajoute dans son nom, la date et l'heure pour le différencier de la première (comme ça, on est sûr de ne pas avoir 2 images avec le même nom)
    $nom_final= preg_replace("`.$extension_upload`is",date("ldSFY-h.i.s-A").".$extension_upload",$fname);
    }
    else {
    $nom_final=$fname; //l'image n'existe pas on garde le même nom
    }
    //on déplace l'image dans le répertoire final
    if (move_uploaded_file($ftmp,'./upload/'.$nom_final)) {$error = 0;}
    else
    {$error = 3;}
}

// Messages avec apostrophe
$m1 = ' à l\'emplacement suivant : ';
$m2 = htmlspecialchars($m1);


// Switch servant simplement à la gestion des erreures
switch($error){
case'0':
echo("<h3>Fichier correctement envoyé !</h3>");
echo ('<br/>');
echo ('<br/>');
//L'image apparait après validation avec son nom, son emplacement, son type et son poids
echo '<img src="./upload/'.$nom_final.'" border="0" />';
echo "<br/><br/>Le nom dorigine du fichier est '" . $fname . "'.<br/>";
echo "Le fichier a été téléchargé avec succès"  . $m2  . '/upload/'.$nom_final . "'<br/>";
echo "Le type du fichier est '" . $ftype . "'.<br/>";
echo "La taille du fichier est de '" . $fsize . " octets'.<br/>";
echo '<a href="javascript:history.back();" align="center">Retour</a>';
break;
// Les messages des erreurs
case'1':
echo("Format de fichier incorrecte.<br/>");
echo '<a href="javascript:history.back();" align="center">Retour</a>';
break;
case'2':
echo("Fichier trop volumineux.<br/>");
echo '<a href="javascript:history.back();" align="center">Retour</a>';
break;
case'3':
echo("Erreur lors du déplacement du fichier.<br/>");
echo '<a href="javascript:history.back();" align="center">Retour</a>';
break;
}
?>

SUJET [RÉSOLU]

#6 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Alors, comme je le disais plus haut, je n'y connais presque rien en PHP (voire pas du tout), et que je reconnais aisément que le code est du bidouillage de récup de divers scripts qui ne correspondaient pas à mes attentes.

Ceci étant dit, je souhaite, comme dit plus haut, que mon script fasse en sorte que :
1 - il vérifie le type de fichier à mettre sur le serveur (.doc, .pdf, .jpg, etc.) ;
2 - il vérifie le poids du fichier ;
3-  Si ces deux vérifs sont justes, alors on copie le fichier sur le serveur, en vérifiant si le nom du fichier n'est pas existant, au quel cas on le renomme en mettant la date dedans.

Alors, ce qui fonctionne, c'est renommer les fichiers s'ils sont déjà existant (disons, portant le même nom), mais le script me copie sans vérifié, ni le type, ni le poids...

Pour ce qui est de l'accolade {$error = 0;}, effectivement, elle est exotique smile, mais elle fonctionne, car elle fait référence aux lignes 72 à 83 compris (validation avec renseignements après téléchargement).

Ensuite, je comprends vaguement ce que tu me dis concernant l'initialisation à 0 au début, mais je ne sais pas l'interpréter dans mon code, en clair, je ne sais pas programmer cette fonction !

Je souhaite à modifier le nom du fichier, de façon à ne pas écraser un fichier potentiellement existant sur le serveur et portant le même nom.

Merci pour ton aide !


Actualisation :
Au temps pour moi, la ligne 42 ne sert que pour renommer le ficher en aide à la ligne 56.
Ca permet de garder l'extension du fichier et de le renommer avant l'extension

#7 Re : Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Effectivement, je vois bien qu'il faut tester $error avant d'écrire le fichier, mais je ne sais pas comment l'écrire...

Pour moi, la ligne 62 correspond à la copie du fichier si tout est OK avant.

La ligne 42 est censée supprimer les espaces.

Merci.

Bon courage.

#8 Forum Général PHP » Problème de syntaxe » 15-06-2012 13:25:33

Belokanfr
Réponses : 14

Bonjour à tous !

Je me décide enfin à écrire pour trouver une réponse à mon problème.

En effet, cela fait maintenant plus de 2 jours que j'essaye de trouver la bonne syntaxe pour le code ci-dessous.

Voilà ce que je souhaite faire et ce qui fonctionne :

J'ai créé, à partir de divers scripts, un script permettant d'uploader un fichier. En uploadant celui-ci, je souhaite :
1. Vérifier le type de fichier (ex. : pdf, avi, jpg, etc.) et si celui-ci est valide alors on passe à l'étape suivante, sinon on a un message d'alerte.
2. Vérifier son poids, si celui-ci ne dépasse pas un poids maximal et si tel est le cas, alors on a un message d'alerte.
3. Si tous les autres critères sont valides, alors on vérifie si le fichier porte le même nom qu'un fichier existant se trouvant dans le même dossier, et si c'est le cas, alors on ajoute la date à son nom, sinon on copie simplement le fichier avec son nom.
Et si possible, supprimer les espaces dans le fichier par le code suivant :

$extension_upload = substr( strrchr($_FILES['fichier']['name'], '.') ,1);

Ce qui fonctionne :
Le dernier point (n°3) fonctionne, à savoir que j'upload un fichier, s'il n'est pas existant, alors il est copié tel quel, sinon la date est ajoutée à son nom, mais laisse les espaces, donc le code cité ci-dessus ne fonctionne pas.

Mais mon souci, c'est que j'upload tout et n'importe quoi, c'est à dire que je peux uploader des fichiers qui ne se retrouvent pas dans mon tableau d'acceptation, et en plus, j'upload sans tenir compte du poids.

Donc en somme, j'upload sans vérification au préalable, ce qui me fait dire que le script ne tient compte QUE de la partie d'ajout de la date (ligne 53 à 62).

Je me débrouille mieux en html qu'en PHP, mais là, j'ai essayé toutes les combinaisons qui me paraissaient faisables et logiques.

Donc j'en appelle à vos connaissances et à votre savoir-faire.

Un grand merci anticipé à ceux qui prennent de leur temps pour me guider, voire me remettre le script dans une syntaxe correcte.

LES ELEMENTS :
(1- Le html nommé "upload.html" et 2- Le script PHP nommé "ulpoad.php3)


***HTML ***

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Multi-upload facile avec JQUERY</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>
<form enctype="multipart/form-data" action="upload.php3" method="post">
Fichier : <input name="fichier" type="file">
<input type="submit" value="Envoyer">
</form>
</body>
</html>

***PHP***

<?php
// Taille maximum
$MAX_FILE_SIZE = 100;

// Dossier de destination du fichier
$folder = "upload/";

// Tableau array des différents types
$allowed_types = array(
"image/bmp",
"image/gif",
"image/pjpeg",
"image/jpeg",
"image/jpg",
"image/png",
"image/tiff",
"application/postscript",
"image/psd",
"application/x-shockwave-flash",
"multipart/x-zip",
"application/msword",
"application/excel",
"application/vnd.ms-powerpoint",
"application/pdf",
"text/html",
"text/css",
"audio/aiff",
"audio/mpeg",
"audio/wav",
"audio/x-ms-wma",
"video/msvideo",
"video/avi",
"video/mpeg",
"video/x-ms-wmv"
);

// Variables récupérées par méthode POST du formulaire
$fname = $_FILES['fichier']['name'];
$ftype = $_FILES ['fichier']['type'];
$fsize = $_FILES ['fichier']['size'];
$ftmp = $_FILES ['fichier']['tmp_name'];
$extension_upload = substr( strrchr($_FILES['fichier']['name'], '.') ,1);

// Divers tests afin de savoir si :

// Le format de fichier correspond à notre tableau array
if(!in_array($ftype, $allowed_types)){$error = 1;}

// La taille du fichier n'est pas dépassée
if($fsize > $MAX_FILE_SIZE){$error = 2;}

// Si le fichier existe déjà
if (file_exists('./upload/'.$fname))
{
//Si le fichier existe, on rajoute dans son nom, la date et l'heure pour le différencier de la première (comme ça, on est sûr de ne pas avoir 2 images avec le même nom)
$nom_final= preg_replace("`.$extension_upload`is",date("ldSFY-h.i.s-A").".$extension_upload",$fname);
}
else {
$nom_final=$fname; //l'image n'existe pas on garde le même nom
}
//on déplace l'image dans le répertoire final
move_uploaded_file($ftmp,'./upload/'.$nom_final); {$error = 0;}


// Messages avec apostrophe
$m1 = ' à l\'emplacement suivant : ';
$m2 = htmlspecialchars($m1);


// Switch servant simplement à la gestion des erreurs
switch($error){
case'0':
echo("<h3>Fichier correctement envoyé !</h3>");
echo ('<br/>');
echo ('<br/>');
//L'image apparait après validation avec son nom, son emplacement, son type et son poids
echo '<img src="./upload/'.$nom_final.'" border="0" />';
echo "<br/><br/>Le nom dorigine du fichier est '" . $fname . "'.<br/>";
echo "Le fichier a été téléchargé avec succès"  . $m2  . '/upload/'.$nom_final . "'<br/>";
echo "Le type du fichier est '" . $ftype . "'.<br/>";
echo "La taille du fichier est de '" . $fsize . " octets'.<br/>";
echo '<a href="javascript:history.back();" align="center">Retour</a>';
break;
case'1':
echo("Format de fichier incorrect.");
break;
case'2':
echo("Fichier trop volumineux.");
break;
}
?>

MERCI pour toutes vos futures réponses

Belokan

PS : si ce n'est pas le bon endroit pour poster cette demande, merci de m'indiquer dans quelle partie du forum je dois la poster.

Pied de page des forums

Propulsé par FluxBB