Accueil
Forums
Turoriaux
Inscription
Connexion
Fil RSS
Bienvenue invité !
Samedi 22 Novembre 2008

gestionnaire de téléchargement avec catégories



1
Auteur Message
> Posté le : 22/09/2008 15h37
Avatar de abdellah


Groupe : Membres
Messages : 25

Bonjour,
J?aimerai faire un gestionnaire de téléchargement avec catégories mais je ne sais pas comment m?y prendre, voici un exemple de ce que j'aimerai faire (image.jpeg, vidéo.avi) dans rubrique Multimédia (programme.exe, fichier.pdf) dans rubrique Logiciels avec lien vers chaque fichier sous forme d'un tableau regardez cette image pour mieux comprendre


> Posté le : 23/09/2008 15h52
Avatar de abdellah


Groupe : Membres
Messages : 25

Finalement j'ai réussi a faire ce que je voulais j'ai créer deux tables (telechargement et categorie)
+telechargement            
-id
-categorie
-nom
-date
-lien
-clics

+categorie
-id
-nom

ensuite j'ai créer quatre pages (ajouter.php, ajouter_final.php, compteur.php, telechargement.php)

ajouter.php contient le formulaire pour ajouter un fichier a la bdd ajouter_final.php vérifie les champs du formulaire est envoie le fichier
compteur.php permet de compter le nombre de clics
telechargement.php liste les fichiers et nous donne les liens pour le telechargement

tout a l'aire de bien fonctionner mais j'ai un doute sur la sécurité du script c'est pour ça je fait appelle a vous j'aimerai bien que vous jetez un oeil et me dire si vous constater des failles de sécurité et comment les corriger SVP

.---------------------> ajouter.php <---------------------.

Code PHP:
<?php require("config/config.php"); //Les paramètres de connexion ?>
 
<form name="form1" method="post" action="ajouter_final.php">Catégorie: <select name="categorie">
<?php
$connect_db = connect();
$trouve = mysql_query ("SELECT nom,id FROM categorie ORDER BY id");
while ($var = mysql_fetch_assoc ($trouve))
{
$id = $var['id'];
    $nom = $var['nom'];
?>
  <option value="<?php echo $id; ?>"><?php echo $nom; ?></option>
  
  <?php
}
 
// fermer la connexion
close();
?>
</select>*<br>
 
Nom: <input type="text" name="nom">*<br>
 
Date: <input type="text" name="date" value="<?php
$date = date("d-m-Y");
Print("$date");
?>">*<br>
 
Lien: <input type="text" name="lien">*<br>
<input type="submit" name="envoi" value="Ajouter Download"></form>




.---------------------> ajouter_final.php <---------------------.

Code PHP:
 
<?php require("config/config.php"); //Les paramètres de connexion ?>
<?php
$msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis :<br/><br/>";
$msg_ok = "Votre fichier a été ajouté.<br />";
$message = $msg_erreur;
 
// vérification des champs
if (empty($_POST['categorie']))
  $message .= "Catégorie<br/>";
if (empty($_POST['nom']))
  $message .= "Nom<br/>";
if (empty($_POST['date']))
  $message .= "Date<br/>";
if (empty($_POST['lien']))
  $message .= "lien<br/>";
 
// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur))
{
  echo $message;
}
 
// sinon c'est ok
else
{
  foreach($_POST as $index => $valeur) {
  $$index = mysql_real_escape_string(trim($valeur));
}
  
$connect_db = connect();  // connexion a la bdd
 
$sql = "INSERT INTO telechargement VALUES ('', '$categorie', '$nom', '$date', '$lien', '$clics')";
$res = mysql_query($sql);
 
if ($res)
{
  echo $msg_ok;
}
 
else
{
  echo mysql_error();
}
 
}
close(); // On peut fermer la connexion à MySQL
?>
 



.---------------------> compteur.php <---------------------.

Code PHP:
 
<?php require("config/config.php"); //Les paramètres de connexion ?>
<?php
    $connect_db = connect();  // connexion a la bdd
 
    // Lecture du paramètre id
    $id = intval($_GET["id"]);
 
    // Recherche de l'URL correspondant à l'identifiant id
    $requete = "SELECT lien FROM telechargement WHERE id=$id";
    $resultat = mysql_query($requete);
    if ($enreg = mysql_fetch_array($resultat))
{
        // Incrementation du compteur
        $requete = "UPDATE telechargement SET clics=clics+1 WHERE id=$id";
        @mysql_query($requete);
 
        close(); // On peut fermer la connexion à MySQL

        // Redirection vers le lien sélectionné
        header("Location: ".$enreg["lien"]);
        die(); // Inutile de poursuivre...
   }
  
   else {
       echo "le lien n'a pu être trouvé";
        }
?>



.---------------------> telechargement.php<---------------------.

Code PHP:
 
<?php require("config/config.php"); //Les paramètres de connexion ?>
<?php
$categorie = intval($_GET['categorie']);
?>
 
<?php
/**
/* Paramètres de pagination */

$nb_nouv_par_page = $nbre_page;        /* Nombre de nouvelles qui seront affichées sur chaque page */
$url = "./telechargement.php?categorie=$categorie&page=";
 
/* On détermine quelle est la page qui est actuellement affichée */
$page_en_cours    = isset($_GET['page']) ? intval($_GET['page']) : 0;
$page_affichee    = ($page_en_cours + 1);
 
$connect_db = connect();  // connexion a la bdd
 
/* Requête pour compter les nouvelles présentes dans notre base de données */
$sql_nb = "SELECT COUNT(*) FROM `telechargement` WHERE categorie=". $categorie ." ";
 
/* Exécution de la requête et récupération du résultat */
$resultat_1 = mysql_query($sql_nb);
$nb_nouvelles = mysql_result($resultat_1, 0);
 
/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */
$nb_pages = ceil($nb_nouvelles / $nb_nouv_par_page);
 
/**
Nous disposons maintenant de suffisament d'éléments pour créer notre barre de navigation.
Première chose à vérifier : avons-nous plusieurs pages, et au moins une ?
*/

if($nb_pages > 0)
{
    /* On définit une variable qui contiendra les données de navigation */
    $barre_nav = "";
    /* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */
    if($nb_pages > 1)
    {
        /**
        Nous avons plusieurs pages: nous allons afficher successivement les liens vers
        les pages précédentes s'il y en a, la page en cours et les liens vers les pages
        suivantes. Nous aurons une barre sous la forme : 1 | 2 | 3 etc.. en liens clicables
        sauf pour la page en cours dont nous mettrons le chiffre en gras
         */

        if($page_en_cours > 0)
        {
            for($i = 0; $i < $page_en_cours; $i++)
            {
                $p = $i + 1;
                $barre_nav .= "<a href="". $url . $i ."" title="page ". $p ."">". $p ."</a> | ";
            }
        }
        /**
        On affiche la page en cours : notez le (+ 1) : pour les calculs, nous partons d'une
        page 0 mais pour l'internaute, il est préférable de commencer à la page 1, donc on incrémente
         */

        $barre_nav .= "<strong>". $page_affichee ."</strong>";
        /* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */
        if(($page_affichee) < $nb_pages)
        {
            /* Il reste encore d'autres pages à afficher */
            $nb_suivantes = $nb_pages - ($page_affichee);
            for($j = ($page_affichee); $j < $nb_pages; $j++)
            {
                $p = $j + 1;
                $barre_nav .= " | <a href="". $url . $j ."" title="page ". $p ."">". $p ."</a>";
            }
        }
        
        /* On peut définir en plus la situation dans une autre variable à afficher ailleurs */
        $page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages.";
    }
    else
    {
        /* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */
        $barre_nav .= "page 1/1";
    }
    /**
    On peut maintenant afficher notre page. On va commencer par récupérer les informations
    On doit définir à partir de quelle nouvelle on doit récupérer les données dans la clause LIMIT.
     */

    $debut = $page_en_cours * $nb_nouv_par_page;
    $sql_n = "SELECT * FROM telechargement WHERE categorie=". $categorie ." LIMIT ". $debut .", ". $nb_nouv_par_page .";";
    $nouvelles = mysql_query($sql_n);
?>
 
 
 
 
<table id="la_table">
   <colgroup>
        <col span="1" width="auto" style="background-color:#dedfdf" />
     <col span="1" width="375" style="background-color:#f1f1f1" />
        <col span="1" width="100" style="background-color:#dedfdf" />
<col span="1" width="100" style="background-color:#f1f1f1" />

  </colgroup>
 
   <thead> <!-- En-tête du tableau -->
       <tr>
       <th>DL</th>
           <th>Nom</th>
           <th>Date</th>
   <th>Clics</th>
  
       </tr>
   </thead>
   <tbody> <!-- Corps du tableau -->
<p><?php echo($page_affichee); ?></p>
<?php
    while($nouv = mysql_fetch_assoc($nouvelles))
    {
?>
<tr>
<td><a href="compteur.php?id=<?php echo $nouv['id']; ?>"><img src="../forum/img/styleoriental/Download.png" width="15" height="15" border="none" /></a></td>
<td><a href="compteur.php?id=<?php echo $nouv['id']; ?>"><?php echo $nouv['nom']; ?></a></td>
<td><?php echo $nouv['date']; ?></td>
<td><?php echo $nouv['clics']; ?></td>
<tr>
 
<?php
    }
    /* on libère la mémoire */
    mysql_free_result($resultat_1);
    mysql_free_result($nouvelles);
    /* On peut fermer la connexion à MySQL */
    close(); // On peut fermer la connexion à MySQL
    /* On affiche maintenant la barre de navigation */
?>
<p class="navigation"><?php echo($barre_nav); ?></p>
 
 
</tbody>
</table>
 
 
 
<?php
}
else
{
    /**
    Nous n'avons aucune page, on peut alors afficher un message autre
    sans devoir nous préoccuper de la navigation
     */

   echo "Aucun fichier dans cette catégorie";
}
?>
 

> Posté le : 24/09/2008 08h17
Avatar de Maxime34


Groupe : Membres
Messages : 121

Salut, ton script m'intéresse mais je ne pourrais pas t'aider sur la sécurité du script, mais pourrais-je l'utiliser poour mettre des fichiers à disposition des Admins de mon site ???

Maxime


> Posté le : 24/09/2008 12h10
Avatar de abdellah


Groupe : Membres
Messages : 25

Citation: Maxime34
Salut, ton script m'intéresse mais je ne pourrais pas t'aider sur la sécurité du script, mais pourrais-je l'utiliser poour mettre des fichiers à disposition des Admins de mon site ???


oui tu peux t'en servir si tu veux 

> Posté le : 26/09/2008 14h06
Avatar de abdellah


Groupe : Membres
Messages : 25

alors quoi de neuf 

> Posté le : 26/09/2008 21h28
Avatar de Maxime34


Groupe : Membres
Messages : 121

Merci pour ton script, mais pour la sécurité, je ne peux absolument pas t'aider désolé 

Maxime


> Posté le : 26/09/2008 23h38
Avatar de abdellah


Groupe : Membres
Messages : 25

Citation: Maxime34
Merci pour ton script, mais pour la sécurité, je ne peux absolument pas t'aider désolé 


t'inquiète j'ai eu ma réponse sur un autre forum et est-ce qu'il parait ya pas de souci a ce faire 

> Posté le : 27/09/2008 09h17
Avatar de Maxime34


Groupe : Membres
Messages : 121

Ok juste, pourrais tu faire un zip, avec tous les fichiers bdd et config.php compris STP 

Maxime


> Posté le : 27/09/2008 12h04
Avatar de abdellah


Groupe : Membres
Messages : 25

voici les tables

Code MYSQL:
-- phpMyAdmin SQL Dump
-- version 2.11.6
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Sam 27 Septembre 2008 à 12:00
-- Version du serveur: 5.0.51
-- Version de PHP: 5.2.6
 
 
--
-- Base de données: `download`
--
 
-- -.------------------------------------------------------
 
--
-- Structure de la table `categorie`
--
 
CREATE TABLE `categorie` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `nom` VARCHAR(255) NOT NULL DEFAULT '',
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
 
-- -.------------------------------------------------------
 
--
-- Structure de la table `telechargement`
--
 
CREATE TABLE `telechargement` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `categorie` VARCHAR(255) NOT NULL DEFAULT '',
  `nom` VARCHAR(255) NOT NULL DEFAULT '',
  `DATE` VARCHAR(255) NOT NULL DEFAULT '',
  `lien` VARCHAR(255) NOT NULL DEFAULT '',
  `clics` VARCHAR(255) NOT NULL DEFAULT '',
  KEY `id` (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=254 ;
 


et le config.php

Code PHP:
<?php
 
$host_db = "localhost"; // nom de votre serveur
$user_db = "root"; // nom d'utilisateur de connexion à votre bdd
$password_db = ""; // mot de passe de connexion à votre bdd
$bdd_db = "download"; // nom de votre bdd
 
function connect()
{
global $host_db,$user_db,$password_db,$bdd_db;
$connect_db = mysql_connect($host_db,$user_db,$password_db);
mysql_select_db($bdd_db,$connect_db);
return $connect_db;
}
 
function close()
{
global $connect_db;
mysql_close($connect_db);
}
 
$nbre_page = '24';//Ceci est le nombre de fichier (telechargement) à afficher par page
 
?>

> Posté le : 27/09/2008 13h38
Avatar de Maxime34


Groupe : Membres
Messages : 121

Merci Beaucoup, je te remercie pour ce script php 

Maxime


1