POO: cree une variable globale ?

Eléphanteau du PHP | 14 Messages

06 juil. 2006, 15:04

Bonjour tout le monde,

alors, j essaie de comprendre un peu comment marche la POO et je me suis lance dans la creation d une petite classe qui permet de faire des formulaires et de les checker...
enfin bon, c est le concept et c est pour m entrainer plus qu autre chose (enfin si jamais ca sert en meme temps lol...), je commence tout juste.

je recupere les variables du formulaire cree avec extract mis a EXTR_SKIP (dites-moi si c est pas la meilleure methode)

le souci se pose au niveau de cette extraction des variables.
je voudrais qu elle soit accessible dans la classe pour toutes les fonctions mais je n y arrive pas... pour l instant je remets la ligne dans chaque fonction ce qui est pas top...

voila les bouts de ma class si quelqu un sait comment faire... (php5 de pref)

class html_form 
{

function post()
{
$extracteur= extract($_POST,EXTR_SKIP);
}
 
function input($type,$input_name,$maxlength,$size)
{
  if($type=="text") 
  {
  echo "<input type=\"text\"";
  if(!empty($input_name)){echo "name=\"$input_name\"";}
  if(!empty($maxlength)){echo "maxlength=\"$maxlength\"";}
  if(!empty($size)){ echo "size=\"$size\"";}

 $extracteur= extract($_POST,EXTR_SKIP);

   if(is_array($extracteur))
   {
   echo "value=\"".$$input_name."\"";
   echo "/>";
   }
   else
   {
   $input_send="";
   echo "value=\"\"";
  echo "/>"; 	
  }
 } 
}

function check_input($contents, $field_name)
{
  $extracteur= extract($_POST,EXTR_SKIP);
  if(isset($$field_name))
  {
   if ($contents=="mail")
    { 
    if (!preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,6}$!", $$field_name))
     {
      echo '<br /><div style="color:red; font-size:10px;">pas bonne adresse mail</div>';}
     }
    }
 }

//appelle a la classe
$html_form= new html_form;
$html_form-> post();
$html_form-> formulaire('test','post','Class_valid.php');
$html_form-> input('text','mail','15','20');
$html_form-> bouton('submit','nom','envoie');
$html_form-> check_input('mail','mail');
bon, ca doit pas etre le summum de la prog, je me doute...

comme vous voyez je declare extract 3 fois : dans la fonction post, fonction input, fonction check_input.
je voudrais declarer extract qu une seule et unique fois et faire appel comme ca $this->extracteur (ou autrement lol)

merci d avance !

Eléphant du PHP | 332 Messages

06 juil. 2006, 17:48

1) ta fonction post ne retourne rien
function post() 
{ 
$extracteur= extract($_POST,EXTR_SKIP); 
return $extracteur;
} 
ensuite, tu peux utiliser
function input($type,$input_name,$maxlength,$size) 
{ 
  if($type=="text") 
  { 
  echo "<input type=\"text\""; 
  if(!empty($input_name)){echo "name=\"$input_name\"";} 
  if(!empty($maxlength)){echo "maxlength=\"$maxlength\"";} 
  if(!empty($size)){ echo "size=\"$size\"";} 

$extracteur = this->post();
Ou alors, tu crées une variable d'instance
function post() 
{ 
$this->extracteur= extract($_POST,EXTR_SKIP); 
} 
et ensuite, tu utilises
if(is_array($this->extracteur) {
Un petit tour par ici ? http://www.php.net/manual/fr/language.oop5.php

Eléphanteau du PHP | 14 Messages

07 juil. 2006, 03:26

Merci Henri !

Je vais essayer comme tu as indique !

pour le lien, merci aussi! meme si j avais regarde avant dans la doc de php.net. mais n etant pas familier avec les termes, je ne savais pas trop quoi chercher pour decrire ce que je veux faire!

Eléphanteau du PHP | 14 Messages

07 juil. 2006, 08:22

apres essaie, que cela soit l une ou l autre methode de declaration que tu m as propose, je n arrive plus a faire prendre en compte :$$input_name et $$field_name. il me retourne une erreur selon laquelle la variable n est pas declaree...

JS
Eléphanteau du PHP | 47 Messages

07 juil. 2006, 13:34

Pourquoi '$$' ?
$$input_name et $$field_name
if(isset($$field_name)) ....
    if (!preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,6}$!", $$field_name))

Eléphanteau du PHP | 14 Messages

07 juil. 2006, 16:24

Bonjour JS,

Je mets '$$' pour ces variables parce qu extract recupere le nom de l input et sa valeur.

normalement, on peut faire comme ca avec un formulaire en post et un input text avec nom='mail' :

$mail=(isset($_POST['mail']))? $mail=$_POST['mail']:$mail='';

puis on renvoie $mail dans value.

la fonction extract verifie l existence du POST et cree automatiquement une variable avec pour nom, le name de l input. donc ca cree automatiquement $mail => valeur de value

donc c est un tableau, un array.
$extracteur= array(mail=>'[email protected]');

on peut obtenir la valeur de mail de deux manieres:
$extracteur['mail'] ou $mail.

dans ma fonction $input_field est le nom de linput a traiter donc

$input_field='mail';

echo $input_field;

va retourner 'mail'.

hors je veux $mail donc $$input_field...

mais bon, c est peut etre pas la meilleure methode et pas la bonne explication