IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Compteur de téléchargement avec Base de données - Pas à pas


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut Compteur de téléchargement avec Base de données - Pas à pas
    Bonjour à tous !
    Je viens de me lancer dans l'apprentissage de PHP.

    J'ai créé un site web (essentiellement en HTML pour l'instant) dans lequel je mets à disposition des programmes que j'ai créé en java.
    Dans un premier temps je souhaiterais créer un compteur de téléchargements pour mesurer la popularité de mes programmes. Ensuite je créerais une page qui récupérera toutes les infos et les présentera de façon lisible.

    J'ai vu sur le net que je peux faire ce compteur uniquement en PHP via un fichier mais je souhaiterais faire d'une pierre deux coups et m'initier à l'utilisation de bases de données également.

    Mon site est hébergé chez IONOS et j'ai une base de données SQL. J'y ai créé une table nommée "downloads_files" qui contient 3 champs : "id" qui est auto-incrémenté, "filename" qui contient les noms exactes des fichiers téléchargeables sur mon site et "downloaded" qui est à 0 par défaut et que je souhaite incrémenter.

    Pour commencer, le bouton de téléchargement de mon premier programme envoie vers une page appelé "testies.php".
    Voici le contenu de cette page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    	$host_name = 'db5000303469.hosting-data.io';
    	$database = '******'; // Nom de la base caché pour publication
    	$user_name = '******'; // User caché pour publication
    	$password = '******'; // Mot de passe caché pour publication
    	$connect = mysql_connect($host_name, $user_name, $password, $database);
     
      if (mysql_errno()) {
        die('<p>La connexion au serveur MySQL a échoué: '.mysql_error().'</p>');
      } else {
        echo '<p>Connexion au serveur MySQL établie avec succès.</p >';
      }
    ?>
    Les valeurs $host_name, $database, $user_name et $password sont les valeurs fournies par IONOS.

    On est bien d'accord que l'on est au tout début...
    Pourtant j'ai déjà une message d'erreur :
    Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /homepages/7/d218779649/htdocs/testies.php:6 Stack trace: #0 {main} thrown in /homepages/7/d218779649/htdocs/testies.php on line 6
    (la ligne 6 est celle de $connect)

    Je ne comprends pas ce qui cloche...
    Je vous remercie pour votre aide. J'y vais pas à pas pour essayer de bien comprendre et puis je suis convaincu que ça pourra aider beaucoup de débutants comme moi.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    Sur les versions récentes de PHP les fonctions mysql() n'existent plus .
    Elle sont remplacées par mysqli ou encore mieux PDO (venant de java c'est full objet donc peut êtr eplus simple à aborder)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,


    -> FAIRE aussi les EXERCICES proposés, avant de se lancer dans un projet perso.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Merci Grunk pour ces infos. Je vais tout de suite basculer sur PDO car mon site est paramétré pour utiliser la dernière version de php.

    Merci également jreaux62, tu as raison je vais me pencher sur le tuto et les exos. Je suis effectivement peut-être un peu rapide.
    Le truc c'est qu'au lycée j'étais fasciné par l'informatique et je programmais en basic sur ma Casio fx-92. Mais j'étais persuadé que bosser dans l'informatique n'etais pas à ma portée. Or depuis quelques années je m'y suis quand même mis et je me régale. Du coup, à presque 40 ans, j'essaie de rattraper le temps perdu. C'est ce qui explique peut-être côté pressé. 😉

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2015
    Messages : 185
    Points : 54
    Points
    54
    Par défaut
    Je suis finalement venu à bout de mon compteur.
    Voici le compte fonctionnel pour ceux que ça pourrait aider (à adapter à votre cas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
      $host_name = 'votreHostName';
      $database = 'votreDataBase';
      $user_name = 'votreUserName';
      $password = 'votrePassword';
      $filesdir = 'lib/';
      $dbh = null;
     
    // On se connecte à la Base de Données
      try {
        $dbh = new PDO('mysql:host='.$host_name.'; dbname='.$database.';charset=utf8', $user_name, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
      } catch (PDOException $e) {
        echo "Erreur!: " . $e->getMessage() . "<br/>";
        die();
      }
     
    // Récupération du fichier qui a été passé en paramètre
    	$id_fichier = (isset($_GET['f'])) ? trim(intval(sprintf("%d", $_GET['f']))) : 0;
     
    // On vérifie si le fichier existe
    	$req_testFichierExiste = $dbh->prepare("SELECT id, filename, downloaded FROM downloads_files WHERE id= :idFichier LIMIT 1");
    	$req_testFichierExiste->execute(array('idFichier' => $id_fichier));
     
    	$fichier_existe = false; $fichier = array();
    	while ($test = $req_testFichierExiste->fetch())
    	{
    		if ((isset($test['filename'])) && ($test['filename'] != ''))
    		{
    			$fichier_existe = true;
    			$fichier = $test;
    			break;
    		}
    	}
    	$req_testFichierExiste->closeCursor();
     
    	if ($fichier_existe == false)
    		die('Fichier non trouvé.');
     
    // Le fichier existe dans la BDD, on vérifie qu'il existe aussi sur le serveur
    	if ((file_exists($filesdir . $fichier['filename'])) && (is_file($filesdir . $fichier['filename'])))
    	{
     
    // Le fichier existe : on incrémente le compteur de téléchargements
    	$req_augmenterTelechargements = $dbh->prepare("UPDATE downloads_files SET downloaded = (downloaded+1) WHERE id= :idFichier");
    	$req_augmenterTelechargements->execute(array(':idFichier' => $id_fichier));
     
    // Incrémentation effectuée, on envoie le fichier
    	header('Content-Description: File Transfer');
    	header('Content-Type: application/octet-stream');
    	header('Content-Disposition: attachment; filename="'.$fichier['filename'].'"');
    	header('Content-Transfer-Encoding: binary');
    	header('Expires: 0');
    	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    	header('Pragma: public');
    	header('Content-Length: ' . filesize($filesdir . $fichier['filename']));
    	ob_clean();
    	flush();
    	readfile($filesdir . $fichier['filename']);
    	exit();
    }
    ?>
    Petite info, si vous calez un "echo" avant les header, le code ne s'exécutera pas correctement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un compteur d'affichages avec base de données
    Par Skyth dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 1
    Dernier message: 24/09/2018, 23h24
  2. .exe ne fonctionne pas avec base de donnée liée
    Par EclairOChocola dans le forum ADO.NET
    Réponses: 1
    Dernier message: 19/03/2014, 21h47
  3. premier pas pour développement web sous VS 2005 avec base de données (c# ou vb)
    Par pacifiquement dans le forum Développement Web avec .NET
    Réponses: 2
    Dernier message: 01/11/2011, 07h36
  4. CD ROm avec base de données
    Par marcoco dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 10/02/2005, 14h16
  5. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo