[PARTAGE] Copyrighter, créateur de miniatures... et algorithme de tirage au sort !

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
1436101456-ban.png

Hey ! Il y a peu je me suis remis à l'apprentissage du codage ;) J'ai donc fait un petit tour sur OpenClassrooms et je me suis pris un compte Premium (j'ai trouvé un code promo pour 1 mois gratuit :trollface:). En une dizaine de jours j'ai su obtenir 5 certificats, bref, là n'est pas le sujet !

J'ai décidé aujourd'hui de vous faire 3 partages !
  1. Un copyrighter (kézako ?)
  2. Un script qui créer des miniatures
  3. Un script qui effectue un tirage au sort

35e67bdcbc0843a0a5af47b0076f694a.png


Un copyrighter

Qu'est-ce qu'un copyrighter ? Un copyrighter est un script en PHP qui va vous permettre de rajouter votre logo sur une image par incrustation, à la manière d'un copyright... d'où le nom ! Comme une image est bien plus parlante que tous les mots du monde, je vous mettrai un exemple juste en dessous... Mais avant tout, je vous explique son mode de fonctionnement !

Mode de fonctionnement: Pour ce script, vous aurez besoin de 2 images: une image mère (source) et une image fille (destination). Le script marche de la manière suivante: vous vous servez d'une image logo.png (de petite taille de préférence) pour l'incruster sur une image plus grande.

Par exemple, si on prend deux images:
- logo.png =>
- nomdelimage.png =>

Il vous suffira d'aller sur le lien copyrighter.php?image=nomdelimage.png...
... et la magie de PHP opère !
Il ne nous reste plus qu'à enregistrer l'image et on obtient le rendu suivant

- copyright.png =>

Mon exemle n'est pas super jolie, mais il devrait vous donner une idée de ce que contient le script ;)
NB: Ce script est issu de OpenClassroom. !

PHP:
<?php
header ("Content-type: image/jpeg"); // L'image que l'on va créer est un jpeg

// On charge d'abord les images
$source = imagecreatefrompng("logo.png"); // Le logo est la source
$destination = imagecreatefrompng($_GET['image']); // La photo est la destination

// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// On veut placer le logo en bas à droite, on calcule les coordonnées où on doit placer le logo sur la photo
$destination_x = $largeur_destination - $largeur_source;
$destination_y =  $hauteur_destination - $hauteur_source;

// On met le logo (source) dans l'image de destination (la photo)
imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 60);

// On affiche l'image de destination qui a été fusionnée avec le logo
imagepng($destination);
?>

35e67bdcbc0843a0a5af47b0076f694a.png


Un créateur de miniatures

Mode de fonctionnement: Pour ce script, vous aurez besoin de 1 image de taille normale. Le script marche de la manière suivante: il redimensionne l'image que vous avez choisis avec la taille de 100x100px (taille modifiable dans le script)

Par exemple, si on reprend mon image de tout à l'heure
- nomdelimage.png =>

Il vous suffira d'aller sur le lien miniature.php?image=nomdelimage.png...
... et la magie de PHP opère !
Votre image est enregistrée sous le nom mini_nomdelimage.png

- mini_nomdelimage.png =>

Mon exemle n'est pas super jolie, mais il devrait vous donner une idée de ce que contient le script ;)
NB: Ce script est, lui aussi, issu de OpenClassroom. !

PHP:
<?php
$source = imagecreatefrompng($_GET['image']); // La photo est la source
$destination = imagecreatetruecolor(100, 100); // On crée la miniature vide (il faut modifier les valeurs pour la taille de l'image)

// Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);

// On crée la miniature
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);

// On enregistre la miniature sous le nom "mini_nomdufichier.png"
imagepng($destination, "mini_".$_GET['image']);
?>

35e67bdcbc0843a0a5af47b0076f694a.png


Un algorithme de tirage au sort

Suite à une commande, je me suis retrouvé à coder un CMS avec pour thème: le concours... J'ai donc été amené à coder un script de tirage au sort. Je vous partage donc le script en lui-même.

J'ai retiré quelques lignes sur le script d'origine car sinon il faudrait que je vous donne le CMS complet... Et ce n'est pas dans mon intention :trollface:

Bon, pour ce qui est de l'installation du script j'ai simplifié la connexion à la base de donnée, vous aurez juste à remplir les variables... Derien :d:

PHP:
<?php
    // DEBUT CONNEXION BDD
    $hote = "localhost"; // Nom d'hôte de ton hébergeur
    $nom_de_la_bdd = "site"; // Nom de ta base de donnée
    $utilisateur = "root"; // Nom d'utilisateur (connexion bdd)
    $mot_de_passe = ""; // Mot de passe (connexion bdd)
    $bdd = new PDO('mysql:host='.$hote.';dbname='.$nom_de_la_bdd.';charset=utf8', ''.$utilisateur.'', ''.$mot_de_passe.'');
    // FIN CONNEXION BDD

    // Étape 0: Calcul du nombre de participants => stockage dans $idmax
    $compteur = $bdd->query('SELECT COUNT(id) AS nbr FROM participants');
    $participants = $compteur->fetch();
    $idmax = $participants['nbr'];

    // Étape 1: Tirer au sort un nombre compris entre idmin et $idmax
    $idgagnant = mt_rand(1, $idmax);

    // Étape 2: Sélectionner le nom de l'utilisateur dont l'id a été choisi
    $selection = $bdd->query('SELECT * FROM participants WHERE id = '.$idgagnant.'');
    $gagnant = $selection->fetch();

    // Étape 3: Effacer toute la table participants et la remet à 0
    $empty = $bdd->query('TRUNCATE TABLE participants');

    // Étape 5: Afficher les infos du gagnant dans la table gagnants
    $new_winner = $bdd->prepare('INSERT INTO gagnants (pseudo, contact, lot_type, lot_jeux, date) VALUES (:pseudo, :contact, :lot_type, :lot_jeux, :date)');
    $new_winner->execute(array(
        'pseudo' => $gagnant['pseudo'],
        'contact' => $gagnant['contact'],
        'lot_type' => $settings['lot_type'],
        'lot_jeux' => $settings['lot_jeux'],
        'date' => time()
        ));
 
    // Étape 6: On redirige l'utilisateur vers l'accueil
    header('Location: index');
?>

CREATE TABLE `participants` (
`id` int(11) NOT NULL,
`pseudo` varchar(255) NOT NULL,
`contact` text NOT NULL,
`ip` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `gagnants` (
`id` int(11) NOT NULL,
`pseudo` varchar(255) NOT NULL,
`contact` text NOT NULL,
`ip` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

35e67bdcbc0843a0a5af47b0076f694a.png

Voilà ! J'espère que ces 3 petits scripts vous font plaisir ! Pour les deux premiers vous pouvez remercier OpenClassrooms, j'ai juste modifié les 2 scripts en une minute pour y rajouter la fonctionnalité $_GET['image']... Pour le script de tirage j'ai fait ça en une vingtaine de minutes de mémoire :mmh:

Pour le topic en revanche j'aurais mit une bonne heure donc j'espère que ce sujet ne va pas rester sans réponses :rofl2:... :'(

À bientôt ;)

1436490803-certified.png
 

Rivals

Ancien staff
Inscription
27 Août 2016
Messages
1 705
Réactions
895
Points
13 104
Rien qu'à voir le header, je n'ai pas envie de lire le reste : "LE NUMERO 1 MONDIAL EN MATIERE DE REDACTION" :suspect:
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Rien qu'à voir le header, je n'ai pas envie de lire le reste : "LE NUMERO 1 MONDIAL EN MATIERE DE REDACTION" :suspect:
Le slogan humoristique de mon ancienne team REO n'est pas une "blague hyper drôle de la mort qui tue omg" mais ça ne justifie pas un commentaire qui n'a rien à voir avec le sujet du topic :wasntme:
Bonne continuation quand même ^^
 

Rivals

Ancien staff
Inscription
27 Août 2016
Messages
1 705
Réactions
895
Points
13 104
Le slogan humoristique de mon ancienne team REO n'est pas une "blague hyper drôle de la mort qui tue omg" mais ça ne justifie pas un commentaire qui n'a rien à voir avec le sujet du topic :wasntme:
Bonne continuation quand même ^^
Si ça n'avait aucun rapport avec le topic je ne commenterai pas, le header est présent sur le topic il fait parti de celui-ci :)

De plus, je ne vois pas l'intérêt de C/C du code déjà présent sur un autre site internet
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Si ça n'avait aucun rapport avec le topic je ne commenterai pas, le header est présent sur le topic il fait parti de celui-ci :)
J'évite de rentrer dans ce genre de débats car nous avons tous les deux un points de vu différent. Cette discussion n'a aucun intérêt, si tu souhaites la continuer, envoie moi un message privé pour qu'on en discute plutôt que de répondre... Merci
 

WWT | VectorXHD

Premium
Inscription
4 Janvier 2013
Messages
485
Réactions
148
Points
7 263
Le code du tirage au sort est loiiiinnnnnnn d'être sécuriser il vaut mieux utiliser une requète préparer au lieu du query
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Le code du tirage au sort est loiiiinnnnnnn d'être sécuriser il vaut mieux utiliser une requète préparer au lieu du query

Je ne vois que 3 query qui proviennent tous droits de la base de donnée, donc qui ne sont pas manipulable par l'utilisateur...

Je propose simplement l'algorithme du tirage et non pas le script en entier (formulaire etc). Si le formulaire est sécuisé je ne vois pas en quoi le script peut présenter une faille :mmh:

De plus, comme je l'ai dit dans mon topic, j'ai retiré des lignes du script original avec notamment une fonction qui sécurise l'accès à cette requête (if (isset($_SESSION['username']) && $user['rank'] >= 2)).

Je donne l'algorithme et c'est donc à vous de parfaire le script pour le rendre sécurisé ^^

Sinon, si malgré tout tu observe qu'il y a une faille dans le script je t'invite à m'en informer pour que je puisse la corriger et présenter un script sécurisé.

Merci pour ton commentaire !
 

WWT | VectorXHD

Premium
Inscription
4 Janvier 2013
Messages
485
Réactions
148
Points
7 263
$selection = $bdd->query('SELECT * FROM participants WHERE id = '.$idgagnant.'');
$gagnant = $selection->fetch();

Perso c'est juste sa qui me dérange même si le client ne peux pas changer sa il faut toujours prendre le moins de risque en tout cas pour moi je ne sais pas si j'ai la meilleur manière de coder :D

Perso j'aurais fait une requete preparer avec un $selection->execute(array($idgagnant)); ^^
 

Paul GTP

Légende vivante
VIP
Inscription
15 Août 2013
Messages
6 194
Réactions
7 545
Points
24 772
Perso c'est juste sa qui me dérange même si le client ne peux pas changer sa il faut toujours prendre le moins de risque en tout cas pour moi je ne sais pas si j'ai la meilleur manière de coder :D

Perso j'aurais fait une requete preparer avec un $selection->execute(array($idgagnant)); ^^
Le $idgagnant est une valeur obtenue par une fonction mt_rand() il n'y a donc rien à craindre à ce sujet là x) On code de manière différentes mais nos deux versions sont correctes :p
 
Haut