Page 1 sur 1

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

Posté : 16 août 2005, 23:21
par cicom
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

Posté : 17 août 2005, 05:32
par HD
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 !

Posté : 17 août 2005, 07:11
par JazzFinder
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.

Posté : 17 août 2005, 10:19
par cicom
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.

Posté : 17 août 2005, 10:54
par Bobulum
Une bonne astuce consiste à faire deux include emboîtés, et à les mettre en chmod 444 sur le serveur (ou lecture seule sous Windows).

moi aussi je peux jouer ?

Posté : 17 août 2005, 11:12
par mere-teresa
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";
		}

Posté : 17 août 2005, 11:17
par Cyrano
Haaaa ben là on parle de développement :D
Merci mere-teresa

Posté : 17 août 2005, 11:17
par Bobulum
Et utiliser un classe c'est encore mieux et plus propre :D .

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

Posté : 17 août 2005, 11:19
par cicom
oué je vois qu'il me reste beaucoup à apprendre. Comme les function, class et return. Vous avez pas de la doc? merci

Posté : 17 août 2005, 11:20
par HD

Posté : 17 août 2005, 11:21
par mere-teresa
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...

Posté : 17 août 2005, 11:21
par Bobulum