Aller au contenu
San Andreas Multiplayer
Amir_Games

Mysql to Mysqli

Messages recommandés

Bonjour, bonsoir,

 

 

voila sa fait un petit moment que j'ai plus fais de html/php  et m'y remettant je vois que les anciennes fonctions  de mysql son obsolète

j'avais un code avec des fonctions en mysql qui sont devenu obsolete donc j'aimerais savoir si y a des personnes qui pourraient m'aider niveau code et m'expliquer si possible? 

<?php
session_start(); 

		$inscrits = mysqli_query("SELECT id FROM `srp_players_stats` order by id ") or die(mysqli_error());
		$inscrits1 = mysqli_num_rows($inscrits);
		$voiture = mysqli_query("SELECT id FROM `srp_players_cars` order by id ") or die(mysqli_error());
		$voiture1 = mysqli_num_rows($voiture);
		$admin = mysqli_query("SELECT id FROM `srp_players_admins` order by id ") or die(mysqli_error());
		$admin1 = mysqli_num_rows($admin);
		$ban = mysqli_query("SELECT id FROM `srp_log_bans` order by id ") or die(mysqli_error());
		$baan = mysqli_num_rows($ban);
		if(!empty($_SESSION['login'])){
			$info = mysqli_query("SELECT * FROM `srp_players_stats` WHERE `Name` = '".$_SESSION['login']."'") or die(mysqli_error());
			$info1 = mysqli_fetch_array($info);
		}
    $pub_req = "SELECT * FROM `srp_players_pub` LIMIT 5";
    $pub = mysqli_query($pub_req) or die(mysqli_error());
    $pub1 = mysqli_num_rows($pub);
		
		$date = date("d-m-Y");
		$heure = date("H:i:s");
		$head_title = "Panel du serveur";
?> 

 Bien a vous, 
Amir_Games

Partager ce message


Lien à poster
Partager sur d’autres sites

J'te conseil d'utiliser PDO (http://php.net/manual/fr/book.pdo.php).

 

Pour la connexion à ta base de données ça se passe comme ça : 

$config['bdd_host'] = 'localhost';
$config['bdd_user'] = 'root';
$config['bdd_password'] = 'root';
$config['bdd_database'] = 'samp';

$bdd = new PDO('mysql:host=' . $config['bdd_host'] . ';dbname=' . $config['bdd_database'] . ';charset=utf8', $config['bdd_user'], $config['bdd_password']);

 

Ensuite pour les requêtes, ce n'est pas très compliqué il faut juste prendre le coup de main.

$sql = $bdd->prepare("SELECT COUNT(*) FROM utilisateurs WHERE email = :email AND password = :password LIMIT 1");
$sql->execute(array(':email' => $email, ':password' => md5($password)));
$resultat = $sql->rowCount();

$sql = $bdd->prepare("SELECT * FROM utilisateurs WHERE email = :email AND password = :password LIMIT 1");
$sql->execute(array(':email' => $email, ':password' => md5($password)));
$resultat = $sql->fetchAll();

$sql = $bdd->prepare("SELECT id FROM utilisateurs WHERE email = :email AND password = :password LIMIT 1");
$sql->execute(array(':email' => $email, ':password' => md5($password)));
$resultat = $sql->fetch();

Voila, j'espère t'avoir aidé. Tu as juste à reprendre le modèle que je t'es laissé ici.

Partager ce message


Lien à poster
Partager sur d’autres sites
<?php
	session_start();
	
	$date = date('d-m-Y');
    $heure = date('H:i:s');
    $head_title = "Panel du serveur";
	
	$config['bdd_host'] = 'localhost';
	$config['bdd_user'] = 'root';
	$config['bdd_password'] = 'root';
	$config['bdd_database'] = 'samp';

	$bdd = new PDO('mysql:host=' . $config['bdd_host'] . ';dbname=' . $config['bdd_database'] . ';charset=utf8', $config['bdd_user'], $config['bdd_password']);
       
	  
	  
	$sql = $bdd->prepare("SELECT id FROM srp_players_stats ORDER BY id");
	$sql->execute();
	$inscrits = $sql->rowCount();
	
	$sql = $bdd->prepare("SELECT id FROM srp_players_cars ORDER BY id");
	$sql->execute();
	$voiture = $sql->rowCount();
	
	$sql = $bdd->prepare("SELECT id FROM srp_players_admins ORDER BY id");
	$sql->execute();
	$admin = $sql->rowCount();
	
	$sql = $bdd->prepare("SELECT id FROM srp_log_bans ORDER BY id");
	$sql->execute();
	$ban = $sql->rowCount();
	
	$sql = $bdd->prepare("SELECT * FROM srp_players_pub LIMIT 5");
	$sql->execute();
	$pub = $sql->fetchAll();
	
    if(!empty($_SESSION['login'])){
		$sql = $bdd->prepare("SELECT * FROM srp_players_stats WHERE Name = :name LIMIT 1");
		$sql->execute(array(':name' => $_SESSION['login']));
		$info1 = $sql->fetchAll();
    }
?>

 

Voila, je t'es traduit t'es requêtes

Partager ce message


Lien à poster
Partager sur d’autres sites

@Nitram  j'ai essayer comme ceci,  et sa fonctionne  sauf pour la pub. 

 

$inscrits = $bdd->prepare("SELECT id FROM srp_players_stats order by id ");
		$inscrits->execute(array(':id' => $id,));
		$inscrits1 = $inscrits->rowCount();
		$voiture = $bdd->prepare("SELECT id FROM srp_players_cars order by id ");
		$voiture->execute(array(':id' => $id,));
		$voiture1 = $voiture->rowCount();
		$admin = $bdd->prepare("SELECT id FROM srp_players_admins order by id ");
		$admin->execute(array(':id' => $id,));
		$admin1 = $admin->rowCount();
		
		$ban = $bdd->prepare("SELECT id FROM srp_log_bans order by id ");
		$ban->execute(array(':id' => $id,));
		$baan = $ban->rowCount();
		if(!empty($_SESSION['login'])){
				$info = $bdd->prepare("SELECT * FROM `srp_players_stats` WHERE `Name` = '".$_SESSION['login']."'");
				$info->execute(array(':Name' => $Name,));
				$info1 = $info->fetchAll();	
		}
		
		$pub = $bdd->prepare("SELECT id FROM srp_players_stats order by id ");
		$pub->execute(array(':id' => $id,));
		$pub1 = $pub->fetch();

 

Partager ce message


Lien à poster
Partager sur d’autres sites

T'as requête n'est pas correcte et il faut changé le code dans la partie HTML ducoup.

 

$sql = $bdd->prepare("SELECT * FROM srp_players_pub LIMIT 5");
$sql->execute();
$pub = $sql->fetchAll();
<div class="alert alert-info">
	<strong>Pub des joueurs: </strong>
    <? if(count($pub) > 0): ?>
    	<marquee scrollamount="5" direction="left">
        <? foreach($pub as $data) { ?>
        	Pseudo: <strong><?= $data['Name']; ?></strong>  
           	Pub: <strong><?= $data['Pub']; ?></strong>     
            Numéro: <strong><?= $data['Numero']; ?></strong>   
        <? } ?>
        </marquee>
	<? else: ?>
     Aucune pub posté par nos joueurs!
	<? endif; ?>
</div>

Comme ça normalement ça devrait fonctionner.

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites

@Nitram et la sécurité, j'imagine que c'est négligeable ?

Lorsqu'on apprend à programmer en PHP, il est extrêmement important d'être toujours à l’affût des éventuelles failles de sécurité.

La connexion à la base de données est la plus importante et doit se faire comme ceci:

<?php 

	try 
	{
		$databaseInfo = array("DATABASE_HOST" => "localhost", "DATABASE_DATA" => "arp", "DATABASE_USER" => "root", "DATABASE_PASS" => "");
		$database = new PDO("mysql:host=".$databaseInfo['DATABASE_HOST'].";dbname=".$databaseInfo['DATABASE_DATA'], $databaseInfo['DATABASE_USER'], $databaseInfo['DATABASE_PASS']);
		$database->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	}
	catch(Exception $error)
	{
		die("<center><h1>Erreur de connexion à la base de données:</h1><br><h3>".$error->getMessage()."</h3></center>");
	}

?>

Si on apprend mal dès le départ, c'est comme ça qu'on se forge de mauvaises habitudes.

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est vrai tu as raison c'est mieux comme tu as fais mais j'ai surtout pensé à faire au plus simple pour qu'il puisse comprendre le principal sans être embrouillé par autre chose.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 22/8/2016 à 18:27, Nitram a dit :

Oui c'est vrai tu as raison c'est mieux comme tu as fais mais j'ai surtout pensé à faire au plus simple pour qu'il puisse comprendre le principal sans être embrouillé par autre chose.

La simplicité et la sécurité peuvent être alliées ;) 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je ne comprend pas le mysqli n'est pas obsolète mais le mysql oui et à ce que je vois sur ton code tu es déjà sur mysqli ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Le mieux est de faire une classe PHP de connexion à la base de données avec PDO qui est plus simple, rapide et sécurisé pour les requêtes :
 

<?php

namespace models;

use \PDO;
use \Exception;

// Abstract pour ne pas pouvoir instancier la classe.
abstract class DB {

    // L'instance de PDO.
    private static $PDO;

    // Configurations de connexion.
    const CONST_HOST = "127.0.0.1";
    const CONST_DB = "stock";
    const CONST_CHARSET = "UTF8";
    const CONST_USER = "root";
    const CONST_PASS = "";

    // Demande connexion à la base de données avec les constantes.
    // Notez que l'on verifie si notre private est vide ou sans instance de PDO.
    final protected static function DBConnection() {
        try {
            if (!isset(self::$PDO) || !((self::$PDO) instanceof PDO)) {
                self::$PDO = new PDO("mysql:host=" . self::CONST_HOST . ";dbname=" . self::CONST_DB . ";charset=" . self::CONST_CHARSET . ";", self::CONST_USER, self::CONST_PASS);
            }
        } catch (Exception $ex) {
            return [false, $ex->getMessage()];
        }
    }

    // Récupération de notre private avec un getter.
    // Notez que l'on vérifie si une instance de PDO est présente.
    final protected static function DBGetConnection() {
        try {
            if (isset(self::$PDO)) {
                if ((self::$PDO) instanceof PDO) {
                    return (self::$PDO);
                } else
                    throw new Exception("DBGetConnection() as no instance of PDO.");
            } else
                throw new Exception("DBGetConnection() could return a null value.");
        } catch (Exception $ex) {
            return [false, $ex->getMessage()];
        }
    }

    // final pour éviter les surcharges des classes filles.
    // protected pour éviter les appels de classes que ne sont pas filles. (héritage)
    // static pour à ne pas avoir a instancier la classe pour utiliser cette fonction.
  
    // DB::DBConnection();
    // $pdo = DB::GetConnection();
}

Ensuite les classes filles qui utiliserons notre classe mère de connexion par exemple :

<?php

namespace models;

require_once("DB.php");

use \PDO;

// Vous noterez que la classe hérite de la classe DB pour avoir accès aux protected.
class DBPersonnage extends DB {

    // Je n'ai pas créé de classe Personnage, c'est un exemple pour vous, on passe une instance de
    // personnage avec comme champs : nom, prenom, âge.
    public static function add(\entities\Personnage $personnage) {
        DB::DBConnection();
        $pdo = DB::DBGetConnection();

        try {
            // http://php.net/manual/fr/pdo.begintransaction.php
            $pdo->beginTransaction();

            $pre = $pdo->prepare("INSERT INTO PERSONNAGE(id, nom, prenom, age) VALUES(DEFAULT, :nom, :prenom, :age);");
            $pre->bindValue(":nom", $personnage->getNom(), PDO::PARAM_STR);
            $pre->bindValue(":prenom", $personnage->getPrenom(), PDO::PARAM_STR);
            // Je vous ai mis un champ INT pour que vous compreniez que bindValue attend donc un int et non un string
            // par défault string.
            $pre->bindValue(":age", $personnage->getAge(), PDO::PARAM_INT);
            $pre->execute();

            // http://php.net/manual/fr/pdo.commit.php
            $pdo->commit();
            return [true, ""];
        } catch (Exception $ex) {
            // http://php.net/manual/fr/pdo.rollback.php
            $pdo->rollBack();
            return [false, $ex->getMessage()];
        }
    }
    
    // Les transactions sont pratiques uniquement lors de multiples requêtes liées : création d'un personnage et de son inventaire si l'un échoue l'autre doit aussi échouer.
    // Ici ce n'est qu'un exemple d'utilisation des transactions pour votre culture sur PDO.
}

Notez que le DBConnection() n'est pas obligatoire sur chaque fonction vous pouvez très bien faire en sorte que la classe fille lors de son instanciation (__construct) demande une connexion puis utiliser celle-ci tout le long des requêtes.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×