Eviter d'avoir à retaper le script de connection à chque foi

Mammouth du PHP | 555 Messages

16 août 2005, 23:21

Bonjour à tous
J'éspère que cete astuce vous aidera et je pense que certains la connaissent
//faites une page php contenant
<?php
   $idConnexion = mysql_connect("adresse du server","user","pass")
	or die("Impossible de se connecter au serveur de bases de données.");
   $connexionReussie = mysql_select_db("avalanch_pchat1",$idConnexion)
   or die("base non trouvee.");
?>
//puis dans les pages ou vous avez besoin de vous connecter à la base de données mettez
include ('page.php');
//ainsi vous n'avez pas à retaper le mysql_conect...
voila
A+ et bon surf!!!!

HD
Mammouth du PHP | 1181 Messages

17 août 2005, 05:32

oui c'est souvent utilisé non seulement pour ne pas retaper ca mais surtout pour, quand tu change d'hebergeur, eviter de modifier les parametres de conexion dans toutes les pages !

Eléphant du PHP | 417 Messages

17 août 2005, 07:11

Faire gaffe toutefois au dédoublement des balises <?php et ?>, source d'erreur assurée!.

Aussi, pour des raisons de sécurité, je te conseille de ne pas donner l'extension .php tout court à ce genre de fichiers. Il est préférable d'opter pour quelque chose du genre: .inc.php ou xyz.php

Pour ma part, mes fichiers de connexion ont des allures plutôt exotiques, du genre: inc_con_123_blabla_456_g_7_.inc.php

Car la plupart d'entre nous, avons plusieurs tables à l'intérieur de la même base, et plusieurs bases. Avoir un système de classement des fichiers de connexion est très pratique, surtout lorsqu'on sy retrouve facilement, par un système de programmation logique (par ex. table et bases différentes selon les sections du site)...tout en s'assurant que ça reste obscur pour les regards indiscrets.

Mammouth du PHP | 555 Messages

17 août 2005, 10:19

JazzFinder, j'ai plus de 75 pages qui utilisent cette petite astuce et les balises <?php ?> ne m'ont jamais posé problème. Sinon je suis d'accord avec toi pour la clarification et obscurisation de ton rangement mais moi je donne le script et le principe et les gens en font ceu qu'ils en veulent.
A+ et bon surf!!!!

Eléphant du PHP | 55 Messages

17 août 2005, 10:54

Une bonne astuce consiste à faire deux include emboîtés, et à les mettre en chmod 444 sur le serveur (ou lecture seule sous Windows).

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 août 2005, 11:12

moi aussi je peux jouer ? (ça fait genre, je bosse, au cas où mon employeur passe ici)

Classe BaseDeDonnees, en français pour pouvoir interroger et manipuler une base MSSQL Server :)

class BaseDeDonnes
{

    public $hote;
    public $utilisateur;
    public $base;
    
    private $pwd;

    function __tostring()
    {
        return "Cette classe permet de définir et manipuler une connexion à la base de données.<br/>";
    }

    function __construct($host, $login, $database, $passwd)
    {
        $this->hote = $host;
        $this->utilisateur = $login;
        $this->base = $database;
        $this->pwd = $passwd;
    }

    function connect_to_base()
    {
        if (!($db = sybase_connect($this->hote, $this->utilisateur , $this->pwd)))
        {
            $msg_error .= "connexion impossible";
		        return $msg_error;
	}
        else
        {
            $msg_error .= "Youhou je suis connecté";
            if (!(sybase_select_db($this->base, $db)))
            {
                $msg_error .= "pas de bdd selectionnée";
		        return $msg_error;
            }
            else
            {
                $msg_error .= "bon j'ai selectionné la base :".$this->base;
		return $db;
            }
        }

    }

function poserFormatRes($requete, $methode ="rien",$colonnes=0, $trclass="", $tdclass=0)
{
	if($result=sybase_query($requete)){
		if(substr($requete, 0, 6) == "SELECT" || substr($requete, 0, 6) == "INSERT"  || substr($requete, 0, 6) == "DELETE")
		{
		    if(substr($requete, 0, 6) == "SELECT")
		    {/* Traitement requête de recherche */
			$num = sybase_num_rows($result);

			$leHTML = call_user_func(array(&$this,$methode),$result, $colonnes, $trclass);
			return $leHTML;
		    }
		    elseif(substr($requete, 0, 6) == "INSERT")
		    {
			$num = sybase_affected_rows();
			//echo "Nb de lignes affectées : ".$num."<br />";
		
		//echo "la requete est de type <b>INSERT</b><br />";
			/* Traitement requête d'insertion */
		    }
		    elseif(substr($requete, 0, 6) == "DELETE")
		    {
			echo "DELETE";
			/* Traitement requête de suppression */
		    }
		    /* etc..... */
		}
	}
	else
	{
		echo "bah non\n<br />";
			
	}
}

function make_safe($text)
{
  $text = trim($text);
  $text = str_replace("'", "''", $text);
  return $text;
}



function createTableFromRes($pointeurResultats, $column, $trclass="", $tdclass = 0)
{
/* pointeurResultats provient de la requete posée
/ column est le nombre de colonnes
/ tr class la classe en CSS de TOUTES les lignes
/ td class la classe en CSS de tous les TD, sauf qu'en faisant un tableau, on a les classes de chaque TD (donc par colonne)
/ exemple : 
/ avec $tdclass = array('bleu', 'rouge');
/ <td class="bleu">texxtxe</td><td class="rouge">teste</td>*/
// DEBUG 
//echo "Nb de colonnes du tableau : ".$column."<br />";

$tablo = "";
$i =0;
	while($res = mssql_fetch_array($pointeurResultats))
	{
	$length = sybase_num_rows($pointeurResultats);
	//echo "Longueur des résultats : ".$length."<br />";

	$tablo.="\t <tr class=\"".$trclass."\">\n";
		for($j=0;$j<$column;$j++)
		{
			$tablo.= "\t \t <td class=\"" . $tdclass[$j] . "\">".$res[$j]."</td>\n";
		}
	$tablo.="\t </tr>\n";

	$i++;
	}
	return $tablo;
}

function createSelectFromRes($pointeurResultats){
$contenuSelect= "";
$w = 0;
	while($res = mssql_fetch_array($pointeurResultats))
	{
		$length = count($res[0]);
		for($i=0;$i<$length;$i++){
		if($_POST['IA'] == $res[$i]){
		$selected = 'selected="selected"'.$w;
		}else{
		$selected = 'no';
		}
		$contenuSelect .= '<option value="' . $res[$i] . '" '.$selected.'>'.$res[$i].'</option>';

		}
	$w++;
	}
	return $contenuSelect;
}

function rien($pointeurResultats){
echo "rien";
}
// fin classe
}
Allez, je suis dans un bon jour, je vous mets mon utilisation :)
include("lib/fichier_classe.inc.php");
		$bdd = new BaseDeDonnes("serveur","login", "base", "password");
		if($bdd->connect_to_base())
		{
		// Pour afficher 1 menu déroulant 
		/* definir $requeteSelect */
		$selectRes = $bdd->poserFormatRes($requeteSelect, "createSelectFromRes");
		if(isset($_POST['demonSelect'])){
		/* définir requête $requeteTableauHTML */
		// on définit les id pour chaque cellule d'une ligne
		$tablodesClassesCSSdesColonnes = array('classe_col_n'); /*Mettre autant d'items que de colonnes qu'on veut */
		$tableauRes = $bdd->poserFormatRes($requeteTableauHTML, "createTableFromRes", $nbcolonnesQuonVeut, 'classeCSS', '', $tablodesClassesCSSdesColonnes );
		//DEBUG echo '<table border="1">'.$tableauRes.'</table>';
		}
		}else{
		echo "pas de connexion à la bdd";
		}
Modifié en dernier par mere-teresa le 17 août 2005, 11:31, modifié 2 fois.

Mammouth du PHP | 19672 Messages

17 août 2005, 11:17

Haaaa ben là on parle de développement :D
Merci mere-teresa
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 55 Messages

17 août 2005, 11:17

Et utiliser un classe c'est encore mieux et plus propre :D .

Merci pour l'info mere-teresa :wink: .

Mammouth du PHP | 555 Messages

17 août 2005, 11:19

oué je vois qu'il me reste beaucoup à apprendre. Comme les function, class et return. Vous avez pas de la doc? merci
A+ et bon surf!!!!

HD
Mammouth du PHP | 1181 Messages

17 août 2005, 11:20


Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

17 août 2005, 11:21

Note : si vous n'utilisez pas les classes, la POO et PHP5, vous pouvez reprendre les fonctions, et tout simplement les données de la classe (celles nécessaires à la construction) les mettre dans un fichier externe !

Attention cependant à l'ordre d'utilisation des fonctions, et aux appels objets qui y sont faits.
Hé oui, c'est encore un travail de tout adapter...

Eléphant du PHP | 55 Messages

17 août 2005, 11:21