PHP Achat de points // TrinityCore
Bon, je m’ennuyais m’ennuyais alors je vous ai concocté un petit script d'achat de point qui vient de mon ancien site.
Code PHP :
<?php
// CONFIGURATIONS
    
$array_db = array(
        
'host' => '',    // IP de la base de données
        
'user' => '',        // Nom de compte de la base de donées
        
'pass' => '',    // Mot de passe de la base de données

        
'db_site' => '',        // Nom de la base de données du Site
        
'db_mangos' => '',        // Nom de la base de données du World
        
'db_characters' => '',    // Nom de la base de données du Characters
        
'db_realmd' => '',        // Nom de la base de données du Realmd/Auth
    
);


//VARIABLES

    
$pts = {pts}    //NOM DE LA VARIABLE QUI DONNE LE NOMBRE DE POINTS
    
$pts_achats = {BDD_CONF_POINTS_ACHATS_LEVEL}; // NOMBRE DE POINTS POUR ACHTER UN LEVEL

// CONNEXION (NE PAS TOUCHER)

    
$cxn mysql_connect($array_db['host'],$array_db['user'],$array_db['pass']);
    if (!
$cxn) {
        die(
'Erreur : ' mysql_error());
    }

            if(
$pts $pts_achats) {
                
?>
                    <p><center><font color="darkred">Vous n'avez pas assez de points (Pour acheter des levels il vous faut <?=$pts_achats?> points). <a href="?page=Voter">Voter</a> ou <a href="?page=Acheter_Points">Crediter</a> des points ?</font></center></p><br/><br/>
                <?php
            
}
            else {
                
?>
                <p><center><font color="darkgreen">Achetez des levels pour seulement <?=$pts_achats;?> points ! N'hésitez pas !</font></center></p><br/><br/>
                <?php

                
if(isset($_POST['action'])) {
                    
$db mysql_select_db ($array_db['db_characters'],$cxn);
                    if (!
$db) {
                        die (
'Erreur : ' mysql_error());
                    }

                    
$characters_account mysql_query("SELECT * FROM `characters`  WHERE `name`= '".mysql_real_escape_string($_POST['action'])."' ORDER BY `name` ASC LIMIT 0,10");
                    
$row_characters_name mysql_fetch_array($characters_account);

                    
$level_actuel $row_characters_name['level'];

                    if(
$level_actuel<15) {
                        
$lvl_en_plus 7;
                    }else if(
$level_actuel<28) {
                        
$lvl_en_plus 6;
                    }else if(
$level_actuel<40) {
                        
$lvl_en_plus 5;
                    }else if(
$level_actuel<51) {
                        
$lvl_en_plus 4;
                    }else if(
$level_actuel<61) {
                        
$lvl_en_plus 3;
                    }else if (
$level_actuel==69) {
                        
$lvl_en_plus 1;
                    }else if (
$level_actuel<=78) {
                        
$lvl_en_plus 2;
                    } else {
                        
?>
                            <script type="text/javascript">
                                alert('Vous êtes level 80, vous ne pouvez pas augmenter de level !');
                                document.location.href="?page=Acheter_Level"
                            </script>
                        <?php
                        $erreur_level 
'1';
                    }

                    
$new_lvl $level_actuel+$lvl_en_plus;
                    
$resReqWow mysql_query "UPDATE characters SET level = '".$new_lvl."' WHERE guid='" $row_characters_name['guid'] . "' LIMIT 1" ) or die (mysql_error ());


                    
$db mysql_select_db ($array_db['db_site'],$cxn);
                    if (!
$db) {
                        die (
'Erreur : ' mysql_error());
                    }

                    if(!isset(
$erreur_level)) {
                        
$voting_points_id mysql_query("SELECT * FROM voting_points WHERE id = '".$_SESSION['id']."'");
                        
$row_voting_points_id mysql_fetch_array($voting_points_id);
                        
$points $row_voting_points_id['points'] - $pts_achats;
                        
mysql_query("UPDATE `voting_points` SET `points` = '".$points."' WHERE `id` = '".$_SESSION['id']."'");
                    }

                    
?>
                        <script type="text/javascript">
                            alert('Vous voilà maintenant level <?=$new_lvl?> !');
                            document.location.href="?page=Acheter_Level"
                        </script>
                    <?php    
                
}
                else {
                    
$db mysql_select_db ($array_db['db_characters'],$cxn);
                    if (!
$db) {
                        die (
'Erreur : ' mysql_error());
                    }
                    
$characters_account mysql_query("SELECT * FROM `characters`  WHERE `account`= '".$_SESSION['id']."' ORDER BY `name` ASC LIMIT 0,10");
                
                    if (
mysql_num_rows($characters_account) > 0) {
                        echo 
'
                        <center><div class="news-article">
                            <table class="table" border="0" cellspacing="0" cellpadding="3" width="30%">
                                Choisissez le personnage qui recevra la récompense :
                                <center><tr>
                                    <form action="?page=Acheter_Level#submit" method="post">
                                        <td>
                                            <center><select name="action">
                                                <optgroup label="Mes personnages">'
;
                                                while(
$row_characters_account mysql_fetch_array($characters_account))
                                                {
                                                    echo 
'</optgroup>';             
                                                    echo 
'<option name="nom">'.$row_characters_account['name'].'</option>';
                                                }        
                                            echo 
'
                                            </select></center>
                                        </td>
                                        <td><input type="hidden" name="guid" value="'
.$nom['guid'].'"/></td>
                                        <td><input type="hidden" name="nom" value="'
.$nom['nom'].'"/></td>
                                        <td><input type="hidden" name="level" value="'
.$nom['level'].'"/></td>
                                        <td><center><input type="submit" value="Acheter" /></center></td>
                                    </form>
                                </tr></center>
                            </table>
                        </div><center><br/><br/><br/>'
;
                    }
                }
            }
        
?>

N'oubliez pas un petit point de réputation, sa donne envie de donner plus !

Pour tous bug, veuillez me le rapporter.
Quelques remarques.

1) Les gens se trompent avec les array.
2)
Code :
$pts = {pts}    //NOM DE LA VARIABLE QUI DONNE LE NOMBRE DE POINTS
    $pts_achats = {BDD_CONF_POINTS_ACHATS_LEVEL}; // NOMBRE DE POINTS POUR ACHTER UN LEVEL
Pas forcément évident.
3) utilise exit() au lieu de die()
4) <font est déprécié
5) l'API mysql_* est dépréciée. Utilise PDO ou MySQLi
6) utilise mysql_real_escape_string (ou PDO::quote)
7) aucune vérification si le personnage existe ou pas.
8) Il est possible d'économiser une requête avec CASE
Et du sql injection faisable aussi ... (variable post ...)
Citation :6) utilise mysql_real_escape_string (ou PDO::quote)
Coder en 10 minutes, j'approfondirais qu'en j'aurais le temps. (Quelques bouts de scripts pris du CMS que j'ai envoyé précédemment)

(10-04-2011 10:03)Vendethiel a écrit :  
Citation :6) utilise mysql_real_escape_string (ou PDO::quote)

Je n'utilise pas l'api PDO vu que le CMS envoyé précédemment utilise la librairie "mysql_". Merci pour la faille XSS.

Pour "CASE", je n'ai pas pour habitude d'utiliser de la logique en SQL. Bon, je dois filer. Je m'occupe du code après. (La faille XSS n'est pas sur mon site (Sert à rien d'essayer))
Citation :3) utilise exit() au lieu de die()
Ce sont des alias. Ils font exactement la même chose Clin
J'avoue, de plus le code est assez sale... et mysql_* c'est dépassé...

Comme on le dit souvent, partager c'est bien, mais partager intelligemment c’est mieux. Si tu ne propose pas un code propre, clair et sécurisé (c’est à dire qui passe les tentatives d'attaques les plus bateaux: SQLinjection, Faille upload/GET, XSS...) et bien abstient-toi. (Garde ton code sous le code et peaufine-le)

Je ne te blâme pas mais, si les petits bout de codes comme ça continuent à se propager sur le forum on ne va pas s'en sortir et quand un membre fera une recherche sur des scripts PHP, le taux de réponse satisfaisante sa requête sera plus grande mais pas forcément plus pertinent.

Cordialement.
Je pense que tu as raison. Seulement, je souhaite aider les petits serveurs ou les personnes souhaitant créer des sites web dans l'émulation world of Warcraft.
Cependant, je n'ai pas vraiment le temps de faire des codes simples et complets. Donc, comprenant l'idée de ton message je pense m'abstenir de partager des petits codes sales à tout bouts de champs.
C'est l'idée générale.

Mais si tu as un script complet et propre c'est bien de le partager ! De plus si tu te sens l'âme d'un réacteur, tu peux également remplir le WIKi de zone ému !
J'ai déjà un compte sur le wiki, seulement, je n'ai vraiment pas le temps, je sort tout juste de mes partiels.. Et j'ai pas vraiment de repos. Je pense que vers fin Mai, je serait plus présent et des codes plus présentables seront à dispositions.

Retourner en haut Accueil