POO et fichiers

Petit nouveau ! | 9 Messages

13 déc. 2010, 19:04

bonsoir a tout les membres .
bon j ai un probleme c est que j ai conçu 2 class une classe nommé objetpostal et ca sous classe colis est je veux instancier un objet de type colis et le stocké dans un fichier nommé base_donnees_colis lorsque je stocke un ojjet ce derniere est stocké comme suivant:
nomdestinataire1;adresse1;ville1;poids1;recomander1 nomdestinataire2;adresse2;ville2;poids2;recomander2
est moi je veux le stocker comme suivant :
nomdestinataire1;adresse1;ville1;poids1;recomander1
nomdestinataire2;adresse2;ville2;poids2;recomander2
c est a dire je veux faire un retour a la ligne pour extraire chaque instance stocké deja dans le fichier si non comment je peux identifier chaque instance ????????;
voila mon code:

objetpostale.php
<?php
class objetpostale
{
	protected $nomdestination;
	protected $adresse;
	protected $ville;
	protected $recomander;
	public function __construct($n,$a,$v,$r)
	{
		$this->nomdestination=$n;
		$this->adresse=$a;
		$this->ville=$v;
		$this->recomander=$r;
	}
	public  function prix(){}
	public function toString()
	{
		return "le nom du destinataire : ".$this->nomdestination." l adresse du destinataire :".$this->adresse."la ville :".$this->ville." recomander :".$this->recomander;		
	}		
}

?>
colis.php
<?php
include_once 'objetpostal.php';

class colis extends objetpostale
{
	private $poids;
	public function __construct($n, $a, $v,$p,$r)
	{
		parent::__construct($n, $a, $v, $r);
		$this->poids=$p;
	}
	public function toString()
	{
		return parent::toString()."\n poids colis :".$this->poids;		
	}
	public function prix()
	{
		if($this->recomander)
		{
			return 10+($this->poids/100)*8;
		}else 
		return ($this->poids/100)*8;
		
	}
	
	public function  serialiser()
	{
		$direct="d:\base_donnees_colis.txt";
		if(!file_exists($direct) || !is_writable($direct))
		{
			echo "le fichier de stockage n existe pas !!!";
			exit(-1);
		}else 
		{
			if(!$handlef=fopen($direct,"a"))
			{
				echo "imposible d ouvrire le fichier de stockage";
			}
			else
			{
				fputs($handlef,$this->nomdestination.";".$this->adresse.";".$this->ville.";".$this->poids.";"."$this->recomander \n");
		
			}
				}
	}	
}

?>
main.php
<?php
include_once 'colis.php';

$c=new colis("amine","sidi maarouf","casablanca",1500,"oui"."\n");
$d=new colis("smail","ouasis","casablanca",8500,"non"."\n");
$c->serialiser();
$d->serialiser();

$str="";
if(!file_exists("d:\base_donnees_colis.txt"))
{
	echo "impossible de trouver  le fichier";
exit(-1);
	
}
else 
{
if(!$handlef=fopen("d:\base_donnees_colis.txt","r"))
	{
echo "impossible douvrire le fichier";
exit(-1);
		
	}
	else 
	{
	
		while(!feof($handlef))
		{
		$str.=fgets($handlef);	
		}
	echo $str;
		
	}
	
}

?>
merci d avance

ViPHP
xTG
ViPHP | 7331 Messages

13 déc. 2010, 19:29

Euh question... Pourquoi tu les stockes ainsi ? C'est tout à fait illogique de stocker d'une façon où tu seras incapable de différencier le début de la fin.

Moi pour résoudre ton problème je corrigerai la façon de stocker les données avant de vouloir les lire.
Car actuellement le seul moyen est de détecter les espaces, sauf que des espaces tu vas en avoir dans tes autres champs. => impossible d'exploiter un tel fichier !

Petit nouveau ! | 9 Messages

13 déc. 2010, 19:47

tout simplement parce qu il est demandé je n ai pas dis que je vais créer un formulaire ou lutilisateur va saisir les info .les infi saisie il vont me permettre de d instancier un objet colis est de le stocké dans un fichier é je veux a pret imprimer dans une page la liste des colis stocké dans le fichier c est pour ca
mon probleme c est de stocker chaque utilisateur dans une ligne pour que je puisse le récupérer apres merci pour votre réponse.

Petit nouveau ! | 9 Messages

13 déc. 2010, 20:27

ah merci j ai trouvé la solution c est on utilisant le \r a la place \n

ViPHP
xTG
ViPHP | 7331 Messages

13 déc. 2010, 20:29

Content que tu ais fini par trouver le caractère qu'on ne pouvait pas voir dans ton exemple et qui permet d'opérer le travail demandé. :)

Petit nouveau ! | 9 Messages

13 déc. 2010, 20:43

merci pour ton aide Mr
:)