J'ai honte mais bon...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : J'ai honte mais bon...

par Thegritch » 18 juil. 2007, 09:24

Un grand merci à vous tous.

Effectivement, le "?>" (de fin donc) généré un espace parasite. (invisible sur mon éditeur).
Cyrano je reprend tes conseils pour la déclaration des erreurs.

En faite le code de base pour la connexion mysql est :
@mysql_connect(HOST, USER, PASS) or die ('erreur');
        @mysql_select_db(BDD) or die ('erreur'); 
Mais au moment où j'ai envoyé le code sur le forum j'avais dans l'idée de mettre une fonction a la place du "DIE" :wink:

[RESOLU] donc...

I'll be back with new hard questions ! HAHAHAHAHAAH *rire evil*

@+ Et merci

par Cyrano » 17 juil. 2007, 21:55

Petit truc : à la fin de ton fichier de classe de connexion tout comme le fichier de configuration, vire complètement le "?>" : c'est la méthode adoptée dans le Zend Framewok précisément pour être sur de ne pas envoyer un espace parasite. Comme ces fichiers ne sont pas sensés envoyer de données vers le navigateur et qu'ils ne contiennent pas de HTML, la fermeture est complètement facultative.

Autre détail : vire les "@" devant tes fonctions MySQL : ces cache-misère sont une abomination pour un développeur. S'il y a des erreurs, on les affiche et on les corrige, on ne les glisse pas discrètement sous le t@pis :P

Ensuite, dans ta classe de connexion, on voit par exemple ceci :
//...
echo "01 : Erreur de connexion avec le serveur : $id"; 
//...
Je suggère la chose suivante : crée une propriété de classe $erreurs (=array() de préférence) et ajoute une méthode getErreurs() qui te renvoie le contenu s'il y en a et remplace le code mentionné par :
//...
$this->erreurs[] = "01 : Erreur de connexion avec le serveur : $id"; 
//...
Allez une dernière pour la route, mais d'autres pourront avantageusement s'en inspirer : fais des concaténations propres :
//...
$this->erreurs[] = "01 : Erreur de connexion avec le serveur : ". $id .";"; 
//...
Bon dev :)

par titerm » 17 juil. 2007, 19:44

Si je puis me permettre, à toi et tout les gros naze de ton espèce, il y a un truc tout bête pour savoir où est le caractère parasite. C'est de le gentiment demander à php.

if(headers_sent($file, $line)) {
 echo "gros naze, un caractère a été emis dans le fichier $file en ligne $line";
}

par Hubert Roksor » 17 juil. 2007, 18:01

Il y a sûrement un saut de ligne à la fin du fichier. Si ton fichier finit par un ?> retire-le complètement, il est facultatif.

par Thegritch » 17 juil. 2007, 17:46

Bonjour,

=> J'ai corrigé le ":" après Location
=> J'ai ouvert avec un éditeur hexadécimal les fichiers sans rien voir au début :(

Je vais hôter les include et refaire la connexion à la BDD dans le fichier et l'extraire petit a petit pour voir d'où provient l'erreur ... se sera long mais je trouverais :)

Mais n'hésitais pas si vous avez des soluc !! je suis preneur.

Edit : non ... le locate fonctionne bien mais bon autant être rigoureux.

@+ TheGritch

par Hywan » 17 juil. 2007, 17:38

Oublier les deux points ne génère pas d'erreur, si ?

par @rthur » 17 juil. 2007, 17:29

Bonjour,

Tu as oublié les deux-points après Location dans ta commande Header...
 header("Location admin_principale.php");

par Hywan » 17 juil. 2007, 17:26

Je connais ton erreur espèce de gros naze ;-)

J'ai nommé ça le caractère invisible lol. Mais c'est peut-être le BOM, je ne suis pas sûr.
Ouvres ton fichier avec un éditeur Hexadécimal. Et au tout début, tu auras 3 caractères à la :-#. Supprimes les, et tout ira bien.

Je ne me rappelle plus de la combinaison, et n'arrive plus à reproduire l'erreur ... Mais tu verras, ce sont les 3 premiers caractères de ton fichier (et évidement, il ne s'affiche pas dans le navigateur, sinon ce n'est pas drôle).

par Thegritch » 17 juil. 2007, 17:25

Voici le code :

Code : Tout sélectionner

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /include/bdd.php:30) in /admin_login.php on line 13 Warning: Cannot modify header information - headers already sent by (output started at /include/bdd.php:30) in /admin_login.php on line 15
La ligne 30 est la dernière du fichier.
La ligne 13 : session_start
La ligne 15 : header()

@+ Thegritch[/php]

Re: J'ai honte mais bon...

par Hubert Roksor » 17 juil. 2007, 16:59

J'ai une erreur "headers already sent".
Poste l'erreur en question, le message devrait contenir le fichier et la ligne où l'output a démarré.

par Invité » 17 juil. 2007, 16:47

Non j'y ai pensé mais pas d'espace superflux.

par zeus » 17 juil. 2007, 16:46

Dans les différents fichiers inclu, tu n'as pas d'espace après le code (après ?>) ?

J'ai honte mais bon...

par Thegritch » 17 juil. 2007, 16:42

Salut,

J'ai une erreur "headers already sent". Alors je sais ce que c'est, je sais ce qu'il faut faire et ne faut pas faire pour l'éviter. Mais là impossible de voir où est mon erreur ... si vous pouviez me dire : "C'est là l'erreur gros naze..!" cela m'arrangerais :(

Voici donc le code (une identification classique à base de session ...
<?php
include_once('include/bdd.php');
if($_POST["login"] != "" && $_POST["mdp"] != "")
{
	$login     = $_POST["login"];
	$pass      = $_POST["mdp"] ;
	$bdd = new bdd();
	$result = $bdd->cls_bdd_affichage("SELECT * FROM sj_utilisateur WHERE login_sj_utilisateur='".$login."' AND mdp_sj_utilisateur='".$pass."'");
	$result = mysql_fetch_object($result) ;
	$bdd->cls_bdd_ending();
	if(is_object($result))
	{
		session_start() ;
		$_SESSION["login"] = $login ;
		header("Location admin_principale.php") ;
	}
	else
	{
		echo"<meta http-equiv=\"Refresh\" content=\"0;URL=erreur.html\">";
	}
}//fin if
?>
le fichier bdd : (c'est lui visiblement gène le header)
<?php
include_once ('path.php');
class bdd{
	function cls_bdd_connexion_serveur(){
		@mysql_connect(HOST, USER, PASS);
		@mysql_select_db(BDD);
	}//fin de la fonction connexion_serveur
	function cls_bdd_ending(){	
		mysql_close();
	}//fin de la fonction cls_bdd_ending	
	function cls_bdd_message_erreur($type,$id){
		switch($type) :
			case "host" :
				echo "01 : Erreur de connexion avec le serveur : $id";
			break;			
			case "bdd" :
				echo "02 : Erreur de connexion avec la base de données : $id";
			break;				
		endswitch;		
	}//fin de la fonction cls_bdd_message_erreur
	function cls_bdd_affichage($query){	
		bdd::cls_bdd_connexion_serveur();
		$result = mysql_query($query);
		return $result;
	}//fin de la fonction
}//fin de la class BDD
?>	
et le fichier path qui lui ne contient rien de bien intéressant :
<?php
define("USER","xx");
define("PASS","xx");
define("HOST","xx");
define("BDD","xx");
?>
Merci de me dire quoi si vous avez vu quelques choses.

@+ Thegritch