Rediriger vers une page de maintenance si problème

Mica -  
mahdu972 Messages postés 247 Statut Membre -
Bonjour,

Je viens à vous car je rencontre un problème et j'aimerais un petit coup de main de connaisseurs.
J'utilise un site internet que j'ai coté avec mes connaissances + quelques fonctions trouvées sur internet et je but sur une fonction.
En effet, j'aimerais que mon site redirige vers une page ( maintenance/index.html ) si mon site n'arrive pas à se connecter à sa base de données.
Mon site est hébergé sur un serveur A qui va chercher ses informations dans une base de données installée sur le serveur B.
J'utilise actuellement un .htaccess qui redirige tout vers le fichier "index.php"
- Ce dernier se connecte à la base de données et affiche les informations.
- Cependant mon hébergeur du serveur B rencontre quelques problèmes actuellement ce qui fait que mon site web tourne dans le vide puis affiche un message d'erreur.

Je souhaite donc, en cas de non connexion à la database distante que mon site nous redirige vers /maintenance/index.html

Je vous remercie d'avance pour votre aide.

8 réponses

  1. mahdu972 Messages postés 247 Statut Membre 18
     
    Bonjour,
    tu as surement un try catch entourant ta connexion a ta database. Dans le catch tu mets ta redirection.
    1
  2. Mica
     
    Je n'ai pas compris mahdu972
    Pourrais tu être un peu plus précis s'il te plait ?
    Sinon je te remercie pour la réponse très rapide :)
    0
  3. mahdu972 Messages postés 247 Statut Membre 18
     
    Peux tu mettre ton code de connexion a ta base?
    0
  4. Mica
     
    Alors, lors de mon problème de connexion j'ai un soucis dans cette fonction :

    public function initialize($where = false)
     {
      $this->connect();
    
      if(!$where)
      {
       $query = $this->connection->query(query("get_account_id"), array($this->session->userdata('id')));
      }
      else 
      {
       $query = $this->connection->query(query("get_account"), array($where));
      }
      
      if($query->num_rows() > 0)
      {
       $result = $query->result_array();
       $result = $result[0];
     
       $this->id = $result["id"];
       $this->username = $result["username"];
       $this->sha_pass_hash = $result["password"];
       $this->email = $result["email"];
       $this->joindate = $result["joindate"];
       $this->last_ip = $result["last_ip"];
       $this->last_login = $result["last_login"];
       $this->expansion = $result["expansion"];
    
       return true;
      }
      else 
      {
       $this->id = 0;
       $this->username = "Visiteur";
       $this->sha_pass_hash = "";
       $this->email = ""; 
       $this->joindate =  "";
       $this->last_ip =  "";
       $this->last_login = "";
       $this->expansion = 0;
    
       return false;
      }
     }

    A la ligne 68 qui est celle-ci :
    $query = $this->connection->query(query("get_account_id"), array($this->session->userdata('id')));


    Je ne sais pas trop si ça suffira ou si je dois donner d'autres informations ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. mahdu972 Messages postés 247 Statut Membre 18
     
    A quoi correspond ton $this?
    Et la fonction connect() en haut c'est toi qui l'a écrit?
    0
  7. Mica
     
    Alors voici le fichier complet pour la connexion

    <?php
    
    class External_account_model extends CI_Model
    {
    	private $connection;
    	private $id;
    	private $username;
    	private $sha_pass_hash;
    	private $email;
    	private $joindate;
    	private $last_ip;
    	private $last_login;
    	private $expansion;
    	private $account_cache;
    
    	public function __construct()
    	{
    		parent::__construct();
    		
    		$this->account_cache = array();
    
    		if($this->user->getOnline())
    		{
    			$this->initialize();
    		}
    		else
    		{
    			$this->id = 0;
    			$this->username = "Guest";
    			$this->sha_pass_hash = "";
    			$this->email = ""; 
    			$this->joindate =  "";
    			$this->last_ip =  "";
    			$this->last_login = "";
    			$this->expansion = 0;
    		}
    	}
    
    	public function getConnection()
    	{
    		$this->connect();
    
    		return $this->connection;
    	}
    	
    	public function connect()
    	{
    		if(empty($this->connection))
    		{
    			$this->connection = $this->load->database("account", true);
    		}
    	}
    	
    	public function initialize($where = false)
    	{
    		$this->connect();
    
    		if(!$where)
    		{
    			$query = $this->connection->query(query("get_account_id"), array($this->session->userdata('id')));
    		}
    		else 
    		{
    			$query = $this->connection->query(query("get_account"), array($where));
    		}
    		
    		if($query->num_rows() > 0)
    		{
    			$result = $query->result_array();
    			$result = $result[0];
    	
    			$this->id = $result["id"];
    			$this->username = $result["username"];
    			$this->sha_pass_hash = $result["password"];
    			$this->email = $result["email"];
    			$this->joindate = $result["joindate"];
    			$this->last_ip = $result["last_ip"];
    			$this->last_login = $result["last_login"];
    			$this->expansion = $result["expansion"];
    
    			return true;
    		}
    		else 
    		{
    			$this->id = 0;
    			$this->username = "Guest";
    			$this->sha_pass_hash = "";
    			$this->email = ""; 
    			$this->joindate =  "";
    			$this->last_ip =  "";
    			$this->last_login = "";
    			$this->expansion = 0;
    
    			return false;
    		}
    	}
    
    	/**
    	 * Create a new account
    	 * @param String $username
    	 * @param String $password
    	 * @param String $email
    	 */
    	public function createAccount($username, $password, $email, $expansion, $isHashed = false) 
    	{
    		$this->connect();
    
    		$sha_pass_hash = $this->user->createHash($username, $password);
    
    		$data = array(
    			column("account", "username") => $username,
    			column("account", "password") => ($isHashed) ? $password : $this->user->createHash($username, $password),
    			column("account", "email") => $email,
    			column("account", "expansion") => $expansion,
    			column("account", "last_ip") => $this->input->ip_address(),
    			column("account", "joindate") => date("Y-m-d")
    		);
    
    		// Fix for ArcEmu
    		if(get_class($this->realms->getEmulator()) == "Arcemu")
    		{
    			$data['banned'] = 0;
    		}
    
    		$this->connection->insert(table("account"), $data);
    
    		// Fix for TrinityCore RBAC (or any emulator with 'rbac' in it's emulator filename)
    		if(preg_match("/rbac/i", get_class($this->realms->getEmulator())))
    		{
    			$userId = $this->user->getId($username);
    			$this->connection->query("INSERT INTO rbac_account_groups('accountId', 'groupId', 'realmId') values (?, 1, -1)", array($userId));
    		}
    
    		$this->updateDailySignUps();
    	}
    
    	private function updateDailySignUps()
    	{
    		$query = $this->db->query("SELECT COUNT(*) AS 'total' FROM daily_signups WHERE 'date'=?", array(date("Y-m-d")));
    
    		$row = $query->result_array();
    
    		if($row[0]['total'])
    		{
    			$this->db->query("UPDATE daily_signups SET amount = amount + 1 WHERE 'date'=?", array(date("Y-m-d")));
    		}
    		else
    		{
    			$this->db->query("INSERT INTO daily_signups('date', amount) VALUES(?, ?)", array(date("Y-m-d"), 1));
    		}
    	}
    
    	/**
    	 * Get the banned status
    	 * @param Int $id
    	 * @return Boolean
    	 */
    	public function getBannedStatus($id)
    	{
    		$this->connect();
    
    		$query = $this->connection->query(query("get_banned"), array($id));
    
    		if($query->num_rows() > 0)
    		{
    			$row = $query->result_array();
    
    			return $row[0];
    		}
    		elseif(query('get_ip_banned'))
    		{
    			//check if the ip is banned
    			$query = $this->connection->query(query("get_ip_banned"), array($this->input->ip_address(), time()));
    			
    			if($query->num_rows() > 0)
    			{
    				$row = $query->result_array();
    
    				return $row[0];
    			}
    			else
    			{
    				return false;
    			}
    		}
    	}
    	
    	/**
    	 * Get the rank
    	 * @param String $value
    	 * @param Boolean $isUsername
    	 * @return int
    	 */
    	public function getRank($value = false, $isUsername = false)
    	{
    		$this->connect();
    
    		if(!$value)
    		{
    			$value = $this->getId();
    		}
    		elseif($isUsername)
    		{
    			$value = $this->getId($value);
    		}
    		
    		$query = $this->connection->query(query("get_rank"), array($value));
    
    		if($query->num_rows() > 0)
    		{
    			$row = $query->result_array();
    
    			if($row[0]["gmlevel"] == "")
    			{
    				$row[0]["gmlevel"] = 0;
    			}
    			
    			return $row[0]["gmlevel"];
    		}
    		else
    		{
    			return 0;
    		}
    	}
    
    	/**
    	 * Check if an username exists
    	 * @param String $username
    	 * @return Boolean
    	 */
    	public function usernameExists($username)
    	{
    		$this->connect();
    
    		$count = $this->connection->from(table("account"))->where(array(column("account", "username") => $username))->count_all_results();
    		
    		if($count)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    
    	/**
    	 * Get total amount of accounts
    	 * @return Int
    	 */
    	public function getAccountCount()
    	{
    		$this->connect();
    
    		$query = $this->connection->query("SELECT COUNT(*) as 'total' FROM ".table("account"));
    		$row = $query->result_array();
    
    		return $row[0]['total'];
    	}
    
    	/**
    	 * Check if an user id exists
    	 * @param Int $id
    	 * @return Boolean
    	 */
    	public function userExists($id)
    	{
    		$this->connect();
    
    		$count = $this->connection->from(table("account"))->where(array(column("account", "id") => $id))->count_all_results();
    		
    		if($count)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    
    	/**
    	 * Check if an email exists
    	 * @param String $email
    	 * @return Boolean
    	 */
    	public function emailExists($email)
    	{
    		$this->connect();
    
    		$count = $this->connection->from(table("account"))->where(array(column("account", "email") => $email))->count_all_results();
    		
    		if($count)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	
    	/*
    	| -------------------------------------------------------------------
    	|  Setters
    	| -------------------------------------------------------------------
    	*/
    	public function setUsername($oldUsername, $newUsername)
    	{
    		$this->connect();
    
    		$this->connection->where(column("account", "username"), $oldUsername);
    		$this->connection->update(table("account"), array(column("account", "username") => $newUsername));
    	}
    	
    	public function setPassword($username, $newPassword)
    	{
    		$this->connect();
    
    		$this->connection->where(column("account", "username"), $username);
    
    		if(column("account", "v") && column("account", "s") && column("account", "sessionkey"))
    		{
    			$this->connection->update(table("account"), array(
    				column("account", "v") => "", 
    				column("account", "s")  => "", 
    				column("account", "sessionkey") => "", 
    				column("account", "password") => $newPassword
    				)
    			);
    		}
    		else
    		{
    			$this->connection->update(table("account"), array(column("account", "password") => $newPassword));
    		}
    	}
    	
    	public function setEmail($username, $newEmail)
    	{
    		$this->connect();
    
    		$this->connection->where(column("account", "username"), $username);
    		$this->connection->update(table("account"), array(column("account", "email") => $newEmail));
    	}
    	
    	public function setExpansion($username, $newExpansion)
    	{
    		$this->connect();
    
    		$this->connection->where(column("account", "username"), $username);
    		$this->connection->update(table("account"), array(column("account", "expansion") => $newExpansion));
    	}
    	
    	public function setRank($userId, $newRank)
    	{
    		$this->connect();
    
    		$this->connection->where(column("account", "id"), $userId);
    		$this->connection->update(table("account_access"), array(column("account_access", "gmlevel") => $newRank));
    	}
    	
    	/*
    	| -------------------------------------------------------------------
    	|  Getters
    	| -------------------------------------------------------------------
    	*/
    	public function getId($username = false)
    	{
    		if(!$username)
    		{
    			return $this->id;
    		}
    		else 
    		{
    			$this->connect();
    			
    			$this->connection->select(column("account", "id", true))->from(table("account"))->where(column("account", "username"), $username);
    			$query = $this->connection->get();
    			
    			if($query->num_rows() > 0)
    			{
    				$result = $query->result_array();
    			
    				return $result[0]["id"];
    			}
    			else 
    			{
    				//Return id 0
    				return false;
    			}
    				
    		}
    	}
    	
    	/**
    	 * Get the username
    	 * @param Int $id
    	 * @return String
    	 */
    	public function getUsername($id = false)
    	{
    		if(!$id)
    		{
    			return $this->username;
    		}
    		else
    		{
    			$this->connect();
    			
    			$this->connection->select(column("account", "username", true))->from(table("account"))->where(array(column("account", "id") => $id));
    			$query = $this->connection->get();
    			
    			if($query->num_rows() > 0)
    			{
    				$result = $query->result_array();
    			
    				return $result[0]["username"];
    			}
    			else 
    			{
    				return "Unknown";
    			}
    		}
    	}
    
    	/**
    	 * Get the username
    	 * @param Int $id
    	 * @return String
    	 */
    	public function getInfo($id = false, $fields = "*")
    	{
    		if(!$id)
    		{
    			$id = $this->id;
    		}
    
    		if($fields != "*" && !is_array($fields))
    		{
    			$fields = preg_replace("/ /", "", $fields);
    			$fields = explode(",", $fields);
    			$fields = columns("account", $fields);
    		}
    	
    		$this->connect();
    		
    		$this->connection->select($fields)->from(table("account"))->where(array(column("account", "id") => $id));
    		$query = $this->connection->get();
    		
    		if($query->num_rows() > 0)
    		{
    			$result = $query->result_array();
    		
    			return $result[0];
    		}
    		else 
    		{
    			return false;
    		}
    		
    	}
    	
    	public function getShaPassHash()
    	{
    		return $this->sha_pass_hash;	
    	}
    	
    	public function getEmail($id = false)
    	{
    		if($id == false)
    		{
    			return $this->email;
    		}
    		else
    		{
    			// Check if it has been loaded already
    			if(array_key_exists($id, $this->account_cache))
    			{
    				return $this->account_cache[$id]['email'];
    			}
    			else
    			{
    				$this->connect();
    				
    				$this->connection->select(column("account", "username", true).','.column("account", "email").','.column("account", "joindate"))->from(table("account"))->where(array(column("account", "id") => $id));
    				$query = $this->connection->get();
    				
    				if($query->num_rows() > 0)
    				{
    					$result = $query->result_array();
    					$this->account_cache[$id] = $result[0];
    
    					return $result[0]["email"];
    				}
    				else
    				{
    					$this->account_cache[$id]["email"] = false;
    					
    					return false;
    				}
    			}
    		}
    	}
    	
    	public function getJoinDate()
    	{
    		return $this->joindate;
    	}
    	
    	public function getLastIp()
    	{
    		return $this->last_ip;
    	}
    
    	public function getExpansion()
    	{
    		return $this->expansion;
    	}
    }


    Je n'ai pas créé moi même cette partie du site. Mes compétences ne me le permettent pas malheureusement.
    Je suis désolé si je ne donne pas les bons fichiers :s
    0
  8. mahdu972 Messages postés 247 Statut Membre 18
     
    Dans la fonction connect, entouré cette partie par un try catch
    $this->connection = $this->load->database("account", true);

    0
    1. Mica
       
      Merci pour l'aide que vous m'apportez.
      Est ce que ceci conviendrait ?

      	public function connect()
      	{
      		if(empty($this->connection))
      		{
      			try  
       			{
      			$this->connection = $this->load->database("account", true);
      			}
      			catch (Response.Redirect("maintenance/index.html")); 
      		}
      	}
      0
    2. mahdu972 Messages postés 247 Statut Membre 18
       
      Oui essaye comme sa
      0
    3. Mica
       
      A priori j'ai une erreur de syntace et j'arrive pas à comprendre pourquoi.
      La ligne en question :
      catch (Response.Redirect("maintenance.html")); 

      Rappel de la fonction complète :
      	public function connect()
      	{
      		if(empty($this->connection))
      		{
      			try  
       			{
      			$this->connection = $this->load->database("account", true);
      			}
      			catch (Response.Redirect("maintenance.html")); 
      		}
      	}
      0
    4. mahdu972 Messages postés 247 Statut Membre 18
       
      Il faut mettre des accolades
      0
    5. Mica
       
      Oui mais je ne vois pas comment les mettres sur ce coup la.
      0
  9. mahdu972 Messages postés 247 Statut Membre 18
     
    public function connect()
    {
    if(empty($this->connection))
    {
    try
    {
    $this->connection = $this->load->database("account", true);
    }
    catch ()
    {
    Response.Redirect("maintenance.html")
    }
    }
    }

    et dans les parenthèses du catch il faut mettre l'exception qui est levé lorsqu'il y a un problème de connexion.
    0