Recuperer les parametres d'une fonction

rimie1
Invité n'ayant pas de compte PHPfrance

17 avr. 2011, 03:46

Bonjour!

Je voudrais recuperer les parametres d'une fonction et verifier si ce parametre contient un mot:
class testClass {
function maFonction1($var1, $var2, $var3)
{
//code
}

$fun = new testClass('valeur1', 'valeur2', 'valeur3'); 

function maFonction2($d1, $d2, $d3, $d4)
{
	// on test si maFonction1 contient par exemple le mot 'formulaire' on affiche un message
}
}
merci

Eléphant du PHP | 127 Messages

17 avr. 2011, 12:27

Salut,

ton code contient une fonction dans une classe. Du coup 2 solutions :
1. tu passes ta classe en static et tu l'appelles sans instanciation (pas de new).
class testClass {
  public static function maFonction($var1, $var2, $var3)
  {
  //code de test
  }
}
testClass :: maFonction('valeur1', 'valeur2', 'valeur3'); 
2. soit tu passes par des variables de classe
class testClass {
 public $var1;
 public $var2;
 public $var3;
 function __construct($var1, $var2, $var3)
 {
   $this -> var1 = $var1;
   $this -> var2 = $var2;
   $this -> var3 = $var3;
 }
 function maFonction()
 {
        // test sur $this -> var1; $this -> var2, etc.
 }
}

// Appel
$fun = new testClass('valeur1', 'valeur2', 'valeur3'); 
$fun -> maFonction();

rimie1
Invité n'ayant pas de compte PHPfrance

18 avr. 2011, 01:25

bonjour nhachet,

ca c'est pour l'appel, je voudrais chercher dans les parametres de la premiere fonction un terme, par exemple:
class testClass {
function maFonction1($var1, $var2, $var3)
{
//code
}

function maFonction2($d1, $d2, $d3, $d4)
{
        // ICI JE VOUDRAIS CHERCHER SI LE PARAMETRE NUMERO 3 CONTIENT UN TERME, PAR EXEMPLE LE MOT 'form'
}
}

$fun = new testClass('valeur1', 'valeur2', 'valeur3');
 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 avr. 2011, 01:42

Salut,

Il s'agit d'une égalité dans un if, qu'est ce que tu ne sais pas faire ?

@+
Il en faut peu pour être heureux ......

rimie1
Invité n'ayant pas de compte PHPfrance

18 avr. 2011, 03:38

<?php

class testClass {
function maFonction1($var1='', $var2='', $var3='')
{
//code
}

function maFonction2($d1='', $d2='', $d3='', $d4='')
{
        // ICI JE VOUDRAIS CHERCHER SI LE PARAMETRE NUMERO 3 CONTIENT UN TERME, PAR EXEMPLE LE MOT 'form'
        
        if(maFonction1()=='valeur1')
        {
        	echo 'Bien';
        }
        else
        {
        	echo 'Non';
        }
}
}

$fun = new testClass('valeur1', 'valeur2', 'valeur3');
$fun->maFonction2('d1', 'd2', 'd3', 'd4');
?>

ViPHP
xTG
ViPHP | 7331 Messages

18 avr. 2011, 08:04

Si je comprends bien tu souhaites avec cette seconde fonction vérifier les paramètres passés à la première ?
Il faut donc que la première enregistre les valeurs dans des variables d'instance.
Voir solution numéro 2 de nhachet.
Et dans ta fonction 2 faire les tests :
if( $this->var1 == $d1 )

Eléphant du PHP | 127 Messages

18 avr. 2011, 09:38

Bonjour à tous,
n'hésitez pas à m'appeler Nicolas plutôt que nhachet ;)

Concernant ton problème, je te conseille de te tourner vers les expressions régulières afin de tester si ta variable contient une valeur donnée. Exemple :
if (preg_match("/form/", $this ->var3)) { // blabla } 
Plus simple, tu as le strpos :
if (strpos($this ->var3, 'form')) { // blabla }
Bon courage.

rimie1
Invité n'ayant pas de compte PHPfrance

18 avr. 2011, 13:22

voila l'idee c'est de chercher dans une fonction est ce qu'un mot existe, bref, chercher si le formulaire contient un champ input de type "file", s'il y a un type file je dois rajouter l'attribut enctype a la balise <form>:
<?php

public final function __construct($name, $method='', $action='', $enctype='') {
	
	if($enctype)
		{
			$form = '<form name="'.$name.'" method="'.$method.'" action="'.$action.'" '.$enctype.'>';	
		}
		// je cherche si les inputs contiennent un type file
	elseif (preg_match("/file/", $this->addInput())) 
		{ 
			// si oui on ajoute l'attribut enctype
			$form = '<form name="'.$name.'" method="'.$method.'" action="'.$action.'" '.$enctype.'>';
		}
		
	else
		{
			$form = '<form name="'.$name.'" method="'.$method.'" action="'.$action.'">';
		}
	
	
	
	}

public final function addInput($type, $name='', $value='', $size='', $maxlength='', $checked=''){
	
	switch($type)
	{
		case 'password':
		echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" size="'.$size.'" maxlength="'		.$maxlength.'" id="'.$id.'" class="'.$class.'" />';
		break;
		
		case 'hidden':
		echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" />';
		break;
		
		case 'submit':
		echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" id="'.$id.'" class="'.$class.'" />';
		break;
				
		case 'button':
		echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" id="'.$id.'" class="'.$class.'" />';
		break;
		
		case 'reset':
		echo '<input type="'.$type.'" name="'.$name.'" value="'.$value.'" id="'.$id.'" class="'.$class.'" />';
		break;
		
		case 'file':
		echo '<input type="'.$type.'" name="'.$name.'" />';
  		break;
  		
		}
		

$frm1 = new formulaire('monForm1', '', '', 'ici je vais mettre enctype');
$frm1->addInput('file', 'nomFile', 'valeur'); // file upload

?>

Eléphant du PHP | 127 Messages

18 avr. 2011, 13:54

A la vue de ton code, je te conseille de faire une fonction qui te renvoi le code HTML du formulaire généré.
Actuellement la fonction addInput() t'affiches directement le formulaire via echo. L'idée serait de générer ton formulaire uniquement lorsque tu en auras besoin via une fonction que tu peux appeler render(), generate() ou ce qui te fera plaisir. Voici un petit exemple basé sur ton code :
<?php 
class Form {

	public $infos = array(); 
	public $fields = array();
	
	public function __construct($name, $method = '', $action = '', $enctype = '') {
		
		$this -> infos ['name'] = $name;
		$this -> infos ['method'] = $method;
		$this -> infos ['action'] = $action;
		$this -> infos ['enctype'] = $enctype;
        
    }

    public function addInput($type, $name = '', $value = '', $size = '', $maxlength = '', $checked = '', $class = ''){
        
    	$this -> fields[] = array(
    	   'type' => $type,
    	   'name' => $name,
    	   'value' => $value,
    	   'size' => $size,
    	   'maxlength' => $maxlength,
    	   'checked' => $checked,
    	   'class' => $class
    	);
    }  

    
    public function render() {
        
    	// Détecte si un champ INPUT type file est présent
    	$fileFound = false;
    	foreach ($this -> fields as $field) {
    		if ($field['type'] == 'file') {
    			$fileFound = true;
    			break;
    		}
    	}
    	
    	// Champ FILE détecte
    	if ($fileFound) {
    		$form = '<form name="' . $this -> infos['name'] . '" method="' . $this -> infos['method'] . '" action="' . $this -> infos['action'] . '" '.$this -> infos ['enctype'].'>'; 
    	} else {
    		$form = '<form name="' . $this -> infos['name'] . '" method="' . $this -> infos['method'] . '" action="' . $this -> infos['action'] . '">';
    	}
    	
    	// Champs
    	foreach ($this -> fields as $field) {
        
    		  switch ($field['type']) {
    		      case 'password': 
    		      	   $form .= '<input type="'.$field['type'].'" name="'.$field['name'].'" value="'.$field['value'].'" size="'.$field['size'].'" maxlength="'.$field['maxlength']. '" class="'.$field['class'].'" />';
    		      break;
    		      
    		      case 'file':
                       $form .= '<input type="'.$field['type'].'" name="'.$field['name'].'" />';
                  break;
    		      
    		  }
    		
    	}    	
    	
    	// Fin du formulaire
    	$form .= '</form>';    	
    	
        return $form;
    }
}

$f = new Form('monForm1', '', '', 'ici je vais mettre enctype');
$f -> addInput('file', 'nomFile', 'valeur'); // file upload

echo $f -> render();


rimie1
Invité n'ayant pas de compte PHPfrance

19 avr. 2011, 03:21

merci Nicolas, c'est ce que je cherchais:
// Détecte si un champ INPUT type file est présent
        $fileFound = false;
        foreach ($this -> fields as $field) {
                if ($field['type'] == 'file') {
                        $fileFound = true;
                        break;
                }
        }
merci aux autres, j'ai appris aussi des trucs de leurs reponses :)

Je continuerais sur ce topic Formulaire avec OOP

rimie1
Invité n'ayant pas de compte PHPfrance

20 avr. 2011, 04:18

est ce que vous pouvez m'expliquer ces lignes:
// pourquoi on les a mis dans un tableau?
public $infos = array();
public $fields = array();

// pourquoi on a fait $this->infos['champs'] = $champs et on n a pas fait la methode classique: $this->champs = $champs;
$this -> infos ['name'] = $name;
                $this -> infos ['method'] = $method;
                $this -> infos ['action'] = $action;
                $this -> infos ['enctype'] = $enctype;


// pourquoi on les a mis dans un tableau:
$this -> fields[] = array(
           'type' => $type,
           'name' => $name,
           'value' => $value,
           'size' => $size,
           'maxlength' => $maxlength,
           'checked' => $checked,
           'class' => $class
        );

merci

Eléphant du PHP | 127 Messages

20 avr. 2011, 12:15

// pourquoi on les a mis dans un tableau?
public $infos = array();
public $fields = array();
Ces 2 variables sont en fait des variables d'instance de la classe Form. Cela signifie qu'elles sont propres à chaque objet Form créé (si on créé 2 Form avec $f = new Form(); $f2 = new Form();, $f et $f2 auront chacun des variables $infos et $fields indépendantes).

Le tableau $fields prend du sens car un formulaire est composé de un ou plusieurs champs. L'intérêt du tableau est de pouvoir en ajouter autant que nécessaire.
Le tableau $infos est une préférence personnelle, on aurait très bien pu écrire ceci à la place :
$this -> name = null;
$this -> method = null;
$this -> action = null;
$this -> enctype = null;
Ça rejoint le code ci-dessous :
// pourquoi on a fait $this->infos['champs'] = $champs et on n a pas fait la methode classique: $this->champs = $champs;
$this -> infos ['name'] = $name;
                $this -> infos ['method'] = $method;
                $this -> infos ['action'] = $action;
                $this -> infos ['enctype'] = $enctype;
Qui aurait pu être écrit de la sorte si on avait pas utilisé le tableau $infos mais des variables de classe différentes pour chaque info :
$this -> name = $name;
$this -> method = $method;
$this -> action = $action;
$this -> enctype = $enctype;
Enfin, le code suivant permet d'ajouter un champ dans la liste des champs de notre instance Form. Pour faire simple, on ajoute des champs à notre formulaire. Dans la suite du code on parcourt ce tableau pour générer le formulaire (voir fonction render()).
// pourquoi on les a mis dans un tableau:
$this -> fields[] = array(
           'type' => $type,
           'name' => $name,
           'value' => $value,
           'size' => $size,
           'maxlength' => $maxlength,
           'checked' => $checked,
           'class' => $class
        );
Bon courage

rimie1
Invité n'ayant pas de compte PHPfrance

21 avr. 2011, 04:54

rebonjour Nicolas,
je l'ai fait d'une autre facon, je n'aime pas copier/coller les codes, et je voudrais apprendre:
<?php
class Formulaire {
// Toutes les propriétés du formulaire
	private $form = array();
    private $method; // POST et GET
	private $action;
	private $name;
    private $value;
    private $type = array(); // text, password, button, submit, radio, checkbox
    private $id;
    private $class;
    private $size;
    private $maxlength;
    private $cols;
    private $rows;
    private $enctype;
	private $typeLoop;
	

######################################## Form Start #############################
	public final function __construct($name, $method='', $action='', $enctype='') { //name est obligatoire
		$this->name = $name;
		$this->method = $method;
		$this->action = $action;
		$this->enctype = $enctype;
	
	} // end __construct function
######################################## Form End #############################	

######################################## Inputs Start #############################	
	public final function addInput($type, $name='', $value='', $size='', $maxlength='', $checked=''){ // type est obligatoire

		$this->type = $type;
		$this->name = $name;
		$this->value = $value;
		$this->size = $size;
		$this->maxlength = $maxlength;
		$this->checked = $checked;	
		
		$this->type = array('file', 'password');
        
	}// end addInput function
####################################### Inputs End #############################
	
######################################## Generate Form Start #############################

	public final function generateForm()
		{
		
		echo 'enctype'.$this->enctype.'<br>';
		
		// l'entete du formulaire	
		if($this->enctype)
		{
			//echo $enctype;
			$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'" '.$this->enctype.'>';
		}
		else
		{
			$form = '<form name="'.$this->name.'" method="'.$this->method.'" action="'.$this->action.'">';
		}
	
	
	
	foreach($this->type as $typeLoop)
	{
		echo $typeLoop.'<br>';
		// les inputs
		
		switch($typeLoop)
	{
		
		case 'password':
		$form .= '<input type="'.$this->type.'" name="'.$name.'" value="'.$value.'" size="'.$size.'" maxlength="'		.$maxlength.'" id="'.$id.'" class="'.$class.'" />';
		break;
		
		case 'hidden':
		$form .= '<input type="'.$this->type.'" name="'.$name.'" value="'.$value.'" />';
		break;
		
		case 'file':
		$form .= '<input type="'.$this->type.'" name="'.$name.'" />';
  		break;
		
		// par defaut un text
		default:
		$form .= '<input type="text" name="'.$name.'" value="'.$value.'" size="'.$size.'" maxlength="'.$maxlength.'" id="'.$id.'" class="'.$class.'" />';	
		
		} // end switch
	
	
	
	return $form;
	}
	}// end foreach
	
	
######################################## Generate Form End #############################
} // end class
        
$f = new Formulaire('monForm1', '', '', 'ici je vais mettre enctype');
$f->addInput('file', 'nomFile', 'valeur'); // file upload
$f->addInput('password', 'nomFile', 'valeur'); // file upload


echo $f->generateForm();

 ?>
le probleme dans mon code:
+ Il genere le formulaire avec l'input file,
+ Il met taitau type 'Array'

Code : Tout sélectionner

enctypeici je vais mettre enctype<br>file<br><form name="nomFile" method="" action="" ici je vais mettre enctype><input type="Array" name="" />

Eléphant du PHP | 127 Messages

21 avr. 2011, 11:49

Salut,

malheureusement ton code ne permet pas de gérer plusieurs inputs dans ton formulaire. Il faut absolument que tu passes par un tableau pour stocker tes inputs. Ce tableau sera exploité lors du generate() pour afficher la formulaire.

rimie1
Invité n'ayant pas de compte PHPfrance

22 avr. 2011, 05:01

je l'ai fait dans ma fonction addInput:

// je l'ai mis en array
private $type = array(); // text, password, button, submit, radio, checkbox

public final function addInput($type, $name='', $value='', $size='', $maxlength='', $checked=''){ // type est obligatoire

		$this->type = $type;
		$this->name = $name;
		$this->value = $value;
		$this->size = $size;
		$this->maxlength = $maxlength;
		$this->checked = $checked;	
		
// je l'ai remplis par les types des inputs
		$this->type = array('file', 'password');

// j'ai effectue le loop
foreach($this->type as $typeLoop)
	{
		echo $typeLoop.'<br>';
		// les inputs
		
		switch($typeLoop)
	{