Probleme INSERT into

Eléphant du PHP | 89 Messages

04 mars 2010, 16:19

Bonjour
J'essaye de faire un syteme de log de connexion et de déconnexions, et j'ai des problème pour enregistrer ces infos dans ma tables.
dans logout.php
j'appelle la méthode setTimeDeco();
<?php
include ("./user.class.php");
include ("./connexion.class.php");


session_start();

if(isSet($_SESSION['connexion']) && isSet($_SESSION['client'])){
	$a1=$_SESSION['connexion'];
	$a2=$_SESSION['client'];
	$client_bis=unserialize($a2);
	if($client_bis->destroy()){

		$connexion_bis=unserialize($a1);
		$connexion_bis->Connecter();
		$client_bis->setTimeDeco();
		$client_bis->rediriger();
		$connexion_bis->Deconnecter();

	}
	else {
		die ('Impossible de détruire la session');
	}
}

else {
	echo 'Pas de Session courante!!';
}

?>
J'ai une classe connexion.class.php qui me sert pour me connecter a la bdd
et une class user.class.php qui inclut la méthode setTimeDeco(); que voici
<?php

class User{
	private $log_in;
	private $mot_de_pass;
	private $d;
	private $time;
	private $adresse_ip;
	private $id_session;
	private $timeLogout;

	public function __construct($id,$ip,$date,$pl){
		$this->id_session=$id;
		$this->adresse_ip=$ip;
		$this->d=$date;
		$this->log_in=$pl;
		$result=mysql_query("INSERT INTO tbl_user_info VALUES('','.$this->id_session','.$this->adresse_ip','.$this->d','')"); //'.$this->log_in',
		if (!$result){
			throw new exception ('Impossible d enregistrer!');
		}
	}

	public function destroy(){
		unset($_SESSION);
		$test=session_destroy ();
		if($test){
			$this->timeLogout=(date("H:i:s"));
			return TRUE;
		}
		else {
			return FALSE;
		}
	}

	public function rediriger(){
		header ('location: index.html');
	}

	public function setTimeDeco(){
	 $r=mysql_query("INSERT INTO tbl_user_info (deconnexion) VALUES ('','.$this->timeLogout','')");
	 if (!$r){
			throw new exception ('Impossible d enregistrer!');
		}
	}

  }
}
?>
J'ai une exception qui se lance "impossible d'enregistrer"
dans le champ "deconnexion"de ma bdd il m'enregistre 0.
cordialement
Modifié en dernier par ferv21 le 04 mars 2010, 16:42, modifié 1 fois.

Mammouth du PHP | 672 Messages

04 mars 2010, 16:40

Tu peux déjà :

1. Différencier les messages d'exception.
2. Afficher les requêtes en cas d'erreur (ce qui veut dire commencer par les "préparer" dans une variable avant de les passer).
3. Afficher l'erreur mysql.

=>
        public function __construct($id,$ip,$date,$pl){
...
// On commence par mettre la requête dans une variable
                $this->requete="INSERT INTO tbl_user_info VALUES('','.$this->id_session','.$this->adresse_ip','.$this->d','')";
                $result=mysql_query($this->requete); //'.$this->log_in',
                if (!$result){
// En cas d'erreur on affiche le maximum d'informations
                        throw new exception ('Impossible d enregistrer!<br />Requete = '.$this->requete.'<br />Erreur = '.mysql_error());
                }
Attention !
Pense à modifier le comportement pour la mise en exploitation : il vaut mieux éviter de donner des informations sur la structure des tables aux utilisateurs.
A la limite, tu peux utiliser une variable pour déterminer si tu es en test ou en exploit'...

Eléphant du PHP | 89 Messages

04 mars 2010, 16:45

Okay merci beaucoup pour ce commentaire, je vais insérer tout cela et je vous tiens au courant. :roll:
cordialement

Eléphant du PHP | 89 Messages

04 mars 2010, 16:58

En effet votre aide ma beaucoup aidé dans le sens ou j'ai vu l'erreur mysql.
donc j'ai réctifier ma class user en lui ajoutant mysql-error(); ce qui nous donne ceci:
<?php

class User{
	private $log_in;
	private $mot_de_pass;
	private $d;
	private $time;
	private $adresse_ip;
	private $id_session;
	private $timeLogout;
	private $requete;
	private $requete1;

	public function __construct($id,$ip,$date,$pl){
		$this->id_session=$id;
		$this->adresse_ip=$ip;
		$this->d=$date;
		$this->log_in=$pl;
		$this->requete="INSERT INTO tbl_user_info VALUES('','.$this->id_session','.$this->adresse_ip','.$this->d','')"; //'.$this->log_in',
		$result=mysql_query($this->requete);
		if (!$result){
			throw new exception ('Impossible d enregistrer! </br>Requete = '.$this->requete.'<br />Erreur = '.mysql_error());
		}
	}

	public function destroy(){
		unset($_SESSION);
		$test=session_destroy ();
		if($test){
			$this->timeLogout=(date("H:i:s"));
			return TRUE;
		}
		else {
			return FALSE;
		}
	}
    
	public function getTime(){
	echo $this->timeLogout;	
		
	}
	
	public function rediriger(){
		header ('location: index.html');
	}


	public function setTimeDeco(){
	$this->requete1="INSERT INTO tbl_user_info (deconnexion) VALUES ('','.$this->timeLogout','')";
	  $r=mysql_query($this->requete1);
		if (!$r){
			throw new exception ('Impossible d enregistrer!</br> Requete = '.$this->requete.'<br />Erreur = '.mysql_error());
		}
	}

	/*public function setUpdate(){
		$result=mysql_query("INSERT INTO tbl_user_info VALUES('','.$this->id_session','.$this->adresse_ip','.$this->d','')");
		if (!$result){
		throw new exception ('Impossible d enregistrer!');
		}
		}*/

}

?>
et donc quand je me déconnecter, il doit normalement m'enregistrer l'heure de déconnexion: mais j'ai l'erreur suivante:

Fatal error: Uncaught exception 'Exception' with message 'Impossible d enregistrer!</br> Requete = INSERT INTO tbl_user_info VALUES('','.cae57joe39hsap3ogc74kvhot7','.127.0.0.1','.2010-03-04','')<br />Erreur = Column count doesn't match value count at row 1' in D:\Programme\wamp\www\exo\user.class.php:52 Stack trace: #0 D:\Programme\wamp\www\exo\logout.php(16): User->setTimeDeco() #1 {main} thrown in D:\Programme\wamp\www\exo\user.class.php on line 52

Mammouth du PHP | 672 Messages

04 mars 2010, 17:46

Fatal error: Uncaught exception 'Exception' with message 'Impossible d enregistrer!</br> Requete = INSERT INTO tbl_user_info VALUES('','.cae57joe39hsap3ogc74kvhot7','.127.0.0.1','.2010-03-04','')<br />Erreur = Column count doesn't match value count at row 1' in D:\Programme\wamp\www\exo\user.class.php:52 Stack trace: #0 D:\Programme\wamp\www\exo\logout.php(16): User->setTimeDeco() #1 {main} thrown in D:\Programme\wamp\www\exo\user.class.php on line 52
C'est une problème de SQL.
Donc, voir ICI, mais le problème est bien décrit :
En gros, tu essayes d'insérer un nouvel enregistrement, mais le nombre de colonnes que tu essayes d'insérer ne colle pas avec le nombre de colonnes de la table.

Pour en dire plus, il faudrait avoir la structure de ta table tbl_user_info...

Eléphant du PHP | 89 Messages

04 mars 2010, 18:09

Oui voici le screen:
Image

Eléphant du PHP | 89 Messages

04 mars 2010, 20:58

Dois-je renseigner l'id?

Eléphanteau du PHP | 31 Messages

04 mars 2010, 21:14

Bonjour,

Mis à part les points en trop dans les valeurs, ta requête SQL parait correcte.

Tu es certain d'avoir donné la bonne structure de table ? Tu es bien connecté à la base de données dont tu as donné un screen ?