Rediriger vers une page de maintenance si problème

Fermé
Mica - Modifié par Mica le 18/06/2013 à 17:08
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 - 18 juin 2013 à 21:22
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.

A voir également:

8 réponses

mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 16:45
Bonjour,
tu as surement un try catch entourant ta connexion a ta database. Dans le catch tu mets ta redirection.
1
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
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 17:01
Peux tu mettre ton code de connexion a ta base?
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 17:32
A quoi correspond ton $this?
Et la fonction connect() en haut c'est toi qui l'a écrit?
0
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
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 17:51
Dans la fonction connect, entouré cette partie par un try catch
$this->connection = $this->load->database("account", true);

0
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
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 18:49
Oui essaye comme sa
0
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
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 18:53
Il faut mettre des accolades
0
Oui mais je ne vois pas comment les mettres sur ce coup la.
0
mahdu972 Messages postés 229 Date d'inscription jeudi 14 juin 2012 Statut Membre Dernière intervention 3 août 2014 18
18 juin 2013 à 21:22
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