[RESOLU] Envoie d'image + vérification des images + diaporama direct

Eléphanteau du PHP | 28 Messages

15 juin 2010, 14:30

Bonjour,

Pour tout ceux que ça intéresse, je vais ici expliquer comment créer un service où les gens envoie les photos, elles sont vérifiées puis envoyées sur le serveur, et enfin, on les voit directement dans un diaporama

Très efficace pour des photos humours pour un anniversaire, ou pour un espace membre (possibilité de changer le répertoire de destination) :)

Page 1 : celle qui contient le formulaire d'envoie [formulaire.php]
A mettre là où vous voulez voir apparaitre le formulaire (entre les bornes [BODY]) : attention > page en php !
<form action="traitement.php" method="post"
 enctype="multipart/form-data">
  <p>Votre photo (autoris&eacute;es : .jpg, .jpeg, .gif, .png)<br />
  <input name="monfichier" type="file" /><br />
  <input value="Envoyer le fichier" type="submit" /> </p>
</form>
La page "traitement.php" est la page qui traitera les données envoyées pas l'internaute.

______________________________________________________________________________
Page 2 : traitement des données [traitement.php]
Cette page vérifiera les données envoyées et les stockera définitivement (ou non) sur votre serveur. Elle affiche aussi si le fichier a bien été enregistré.
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
        // Testons si le fichier n'est pas trop gros
        if ($_FILES['monfichier']['size'] <= 1000000)
        {
                // Testons si l'extension est autorisée
                $infosfichier = pathinfo($_FILES['monfichier']['name']);
                $extension_upload = $infosfichier['extension'];
                $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
                if (in_array($extension_upload, $extensions_autorisees))
                {
                        // On peut valider le fichier et le stocker définitivement
                        move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/' . basename($_FILES['monfichier']['name']));
                        echo "L'envoi a bien été effectué !";
                }
        }
}
?>
Je vais expliquer un peu mon code (malgré qu'il y ai pas mal de commentaires) :
- Avant tout, vérifier qu'un dossier "uploads" est créé dans votre serveur là on se trouve votre page : c'est votre répertoire de destination.

- "monfichier" est le nom donné auparavant à votre formulaire de type file

- "1000000" est la taille du fichier autorisée en ko (à changer selon votre guise)

- Vous pourrez ajouter des extensions, veillez juste à respecter les guillemets ;)

-
echo "L'envoi a bien été effectué !"
peut être remplacer par
echo ""
si vous insérer ce code dans la partie "Head" de votre code html/php (veillez toujours à avoir une extension en .php). Si vous le remplacer, vous pourrez davantage personnaliser la page puisque c'est celle sur laquelle arrive votre internaute une fois le fichier envoyé (pourquoi pas lui proposer un lien retour sur cette page avec un "Votre fichier a bien été envoyé" en plus ^^). Bref, vous me demandrez pour plus d'infos là dessus si besoin.

- Vous pourrez aussi mettre un aperçu ou un récapitulatif à l'internaute sur la page (appel des fonctions "name", vous devez savoir faire, sinon demandez-moi).

______________________________________________________________________________
Page 3 : le diaporama [diaporama.php]
Ici, il va s'agir de faire lire à notre fichier php, notre répertoire "uploads" pour que la simplicité et la rapide soit là et nous éviter d'ajouter sans arrêt les adresses des images (on l'a tous fais en html/javascript ça :D).
<script type="text/javascript">
ejs_photo = new Array;
<?
$a = 0;
$handle = opendir("uploads"); while (($file = readdir())!=false) { clearstatcache(); if($file!=".." && $file!=".") {
echo "ejs_photo[$a] = 'uploads/$file';
";
$a++;
}
}
closedir($handle); ?> function ejs_aff_uploads(num)
{
if(document.getElementById)
{
ejs_fin = "";
if(num!=0)
ejs_fin += "<A HREF=# onClick='ejs_aff_uploads("+(num-1)+");return(false)'>< Précédent</A> ";
if(num!=(ejs_photo.length-1))
ejs_fin += "<A HREF=# onClick='ejs_aff_uploads("+(num+1)+");return(false)'>Suivant ></A>";
document.getElementById("ejs_photo_box").innerHTML = "<CENTER><IMG SRC='"+ejs_photo[num]+"' BORDER=0><BR>"+ejs_fin+"</CENTER>";
}
}
window.onload = new Function("ejs_aff_uploads(0)")
</script>
Heu ... rien à dire là dessus, car il est simple à comprendre :) (enfin je crois)



Bonne chance à vous, en cas de problème ou de questions, n'hésitez pas ;)

Tchouss les amis !

(Provenance du code javascript : editeur javascript
Modifié en dernier par popo79pr le 16 juin 2010, 13:21, modifié 1 fois.
"En informatique, passer de l’évident à l’utile est une définition vivante du mot « frustration »" [Alan Perlis]

Mammouth du PHP | 1511 Messages

16 juin 2010, 11:38

La partie javascript provient du site "editeur javascript", ce serait bien de le préciser ;)

Eléphanteau du PHP | 28 Messages

16 juin 2010, 13:22

C'est fait ;)
"En informatique, passer de l’évident à l’utile est une définition vivante du mot « frustration »" [Alan Perlis]

Petit nouveau ! | 5 Messages

01 juil. 2010, 21:25

Bonsoir

J'ai suivi les intructions pour tester ton code .
Tous ce passe bien sauf que dans diaporama.php
je ne voir rien , j'ai une page blanche

Cordialement

ViPHP
ViPHP | 5462 Messages

01 juil. 2010, 21:56

Bonsoir

J'ai suivi les intructions pour tester ton code .
Tous ce passe bien sauf que dans diaporama.php
je ne voir rien , j'ai une page blanche

Cordialement

met <?php a la place de <?

Eléphanteau du PHP | 28 Messages

01 juil. 2010, 22:47

Bonsoir

J'ai suivi les intructions pour tester ton code .
Tous ce passe bien sauf que dans diaporama.php
je ne voir rien , j'ai une page blanche

Cordialement

met <?php a la place de <?

Pour ma part, ça fonctionne très bien ... après, libre à toi de donner le design que tu veux à ta page :)

De plus, si tu veux mettre sur une page (genre, ta page d'accueil) une image aléatoire tirée du répertoire précédemment cité,
voici un petit bout de code bien sympathique (avec un rafraichissement de la page "aleatoire.php" toutes les 5 secondes, pour permettre un petit déroulement de photos) :

1) Tu créés ta page "aleatoire.php"
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="content-type">
  <title></title>
  <meta http-equiv="refresh" content="5; URL=nombre.php">
</head>
<body>
<?
$dossiers = array("uploads","uploads" ); // C'est la seule ligne que tu modifies !!! 
// Tu mets ton/tes dossiers qui contiennent tes images dans un array.
// Il faut 2 dossiers au minimum ou bien si il n'en existe qu'un seul, met 2 fois le même
$nbdossiers = count($dossiers); // Tu recuperes le nombre de dossiers
$randdossier = rand(0,($nbdossiers-1)); // tu fais un random de 0 à ton nombre de dossiers
$rdossier = $dossiers[$randdossier]; // Tu selectionnes un dossier au hasard
$rep = $rdossier."/";
$listfile = array(); // Tu crée un array vide pour y mettre tous les fichiers
$dir = opendir($rep);  // Tu ouvres ton dossier
while ($f = readdir($dir)) // Tu fais une boucle des fichiers de ton dossier
{
  if(is_file($rep.$f) && $f != '.' && $f != '..') // Si le fichier existe
  {
        $ext = substr($rep.$f,-3); // Recuperation de l'extension du fichier
if($ext == 'jpg' || $ext == 'JPG' || $ext == 'png' || $ext == 'PNG' || $ext == 'gif' || $ext == 'GIF' || $ext == 'bmp' || $ext == 'BMP')
// C'est bien une image
                {
                        $listfile[] = $f; // Ajout du fichier dans l'array
                }
  }
}
closedir($dir); // Tu fermes le dossier
$nbfichier = count($listfile); // Tu comptes le nombre de fichiers
$randfichier = rand(0,($nbfichier-1)); // Tu fais un random de 0 à ton nombre de fichier
$rfichier = $listfile[$randfichier]; // Tu selectionnes un fichier au hasard
echo '<p> <div align="center"><img src="'. $rep.$rfichier .'" / height=266px></div>';
?>
</body>
A savoir :
<img src="'. $rep.$rfichier .'" / height=266px>
C'est l'image qui en ressortira : ici, j'ai demandé qu'elle soit redimensionnée pour une hauteur de 266px (tu peux mettre les paramètres en largeur et hauteur de ton choix) : toutes les images de ton répertoire seront ainsi redimensionnée (très pratique, ça évite de passer son temps sur PhotoShop ;))

Ensuite, tu connais les iframes ? C'est tout bête et parfois très utile :)
(Je n'ai pas réussi à intégrer directement "aleatoire.php" dans "index.php", donc j'ai procédé ainsi, et ça marche très bien)

2) Tu créés ton "iframe" dans ta page "index.php" (enfin ta page d'accueil, pas besoin qu'elle soit en php)
Insères ce bout de code là où tu veux voir ton image aléatoire ...
<iframe src="aleatoire.php"
 name="photos" frameborder="no" height="285"
 scrolling="no" width="100%">Cadres local
</iframe>
Alors : à changer :
- Height et Width : en sachant que l'image est mieux si n'est pas scrollée dans ton iframe


Des questions ? Hésites pas :)

Bises à vous ^^
"En informatique, passer de l’évident à l’utile est une définition vivante du mot « frustration »" [Alan Perlis]

ViPHP
ViPHP | 5462 Messages

02 juil. 2010, 03:26

j'aurai tendance a dire que ca va pas, le "<?" + l'"iframe", c'est des vielles pratique y'a 10 ans ok, mais au bout d'un moment faut être a jour :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 juil. 2010, 08:20

y'a 10 ans ok, mais au bout d'un moment faut être a jour :wink:
C'est pas une histoire d'être à jour, c'est surtout que ces pratiques sont problématiques.

Mettre un <?, ça s'appelle "utiliser des shorts open tags, et c'est déprécié depuis longtemps.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 5 Messages

02 juil. 2010, 14:43

Bonsoir

Voila mon contenu de diaporama.php

[javascript]<script type="text/javascript">
ejs_photo = new Array;
<?php
$a = 0;
$handle = opendir("uploads"); while (($file = readdir())!=false) { clearstatcache(); if($file!=".." && $file!=".") {
echo "ejs_photo[$a] = 'uploads/$file';
";
$a++;
}
}
closedir($handle); ?>
function ejs_aff_uploads(num)
{
if(document.getElementById)
{
ejs_fin = "";
if(num!=0)
ejs_fin += "<A HREF=# onClick='ejs_aff_uploads("+(num-1)+");return(false)'>< Précédent</A> ";
if(num!=(ejs_photo.length-1))
ejs_fin += "<A HREF=# onClick='ejs_aff_uploads("+(num+1)+");return(false)'>Suivant ></A>";
document.getElementById("ejs_photo_box").innerHTML = "<CENTER><IMG SRC='"+ejs_photo[num]+"' BORDER=0><BR>"+ejs_fin+"</CENTER>";
}
}
window.onload = new Function("ejs_aff_uploads(0)")
</script>[/javascript]

Mais j'ai toujours une page blanche.

Eléphanteau du PHP | 28 Messages

02 juil. 2010, 14:50

Ton répertoire s'appelle comment ?!

Et on ne critique pas mes pratiques, elles font leurs preuves lol
"En informatique, passer de l’évident à l’utile est une définition vivante du mot « frustration »" [Alan Perlis]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 juil. 2010, 15:25

Et on ne critique pas mes pratiques, elles font leurs preuves lol
Tout à fait, comme tant d'autres choses. Mais quand une fonctionnalités est dépréciée, ce n'est pas pour embêter les gens, mais pour des causes précises.
Dans le cas présent, ça évite de mélanger les balises si tu as un interpréteur ASP et PHP sur le même serveur. Ou encore que si tu gères un fichier XML en PHP, il faille passer par une bidouille pour la balise d'entrée.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 5 Messages

02 juil. 2010, 15:42

SAlut

Désolé j'ai pas critiqué tes pratiques.
Juste que je n'arrive pas à afficher chez moi .
J'ai pas changer le nom "uploads" car je veux voir d'abord avant de faire
mes modifications selon mes besoins.
je precise que j'arrive a uploader mes fichiers sans probleme
ils sont bien visibles dans le repertoire uploads.
Cordialement

Eléphanteau du PHP | 28 Messages

02 juil. 2010, 16:45

Ah j'ai trouvé le probleme :)

Ajoute :
      <div id="ejs_photo_box"></div>
Au début de ton code. Ce qui donne (avec mon code de départ)
      <div id="ejs_photo_box"></div>
      <script type="text/javascript">
ejs_photo = new Array;
<?
$a = 0;
$handle = opendir("uploads"); while (($file = readdir())!=false) { clearstatcache(); if($file!=".." && $file!=".") {
echo "ejs_photo[$a] = 'uploads/$file';
";
$a++;
}
}
closedir($handle); ?> function ejs_aff_uploads(num)
{
if(document.getElementById)
{
ejs_fin = "";
if(num!=0)
ejs_fin += "<A HREF=# onClick='ejs_aff_uploads("+(num-1)+");return(false)'>< Précédent</A> ";
if(num!=(ejs_photo.length-1))
ejs_fin += "<A HREF=# onClick='ejs_aff_uploads("+(num+1)+");return(false)'>Suivant ></A>";
document.getElementById("ejs_photo_box").innerHTML = "<CENTER><IMG SRC='"+ejs_photo[num]+"' BORDER=0><BR>"+ejs_fin+"</CENTER>";
}
}
window.onload = new Function("ejs_aff_uploads(0)")
      </script>
Dis moi si ça marche mieux :)

Bises :)
"En informatique, passer de l’évident à l’utile est une définition vivante du mot « frustration »" [Alan Perlis]

Petit nouveau ! | 5 Messages

02 juil. 2010, 18:31

Ok merci
Là ça marche impeccable .

ViPHP
ViPHP | 3300 Messages

02 juil. 2010, 18:37

Ton répertoire s'appelle comment ?!

Et on ne critique pas mes pratiques, elles font leurs preuves lol
quand tu partages du code publiquement, vaut mieux t'assurer que c'est clean ou avoir une certaine capacité à prendre des coups virtuels, dans ton cas je te conseille d'apprendre à encaisser :)
Fait du php depuis que ca existe ou presque :)