2010-01-09 5 views
1

Je suis actuellement en train de construire une classe PHP qui génère un formulaire Web pour des problèmes de flexibilité et de localisation. J'ai de la difficulté à attribuer une clé et une valeur à la liste déroulante; pour une raison quelconque, le foreach semble ne pas avoir de variable de tableau ($ country_list). Voici mon code que j'ai de la difficulté.Générateur de formulaire Web Classe PHP - propriété vide sur foreach

require_once('_include/country_list.php'); 

//drop down form class 
class DropDown 
{ 
    function __construct ($form, $field_label, $field_name, $field_desc, $dropdown_data, $locale){ 
    $this->form = $form; 
    $this->field_label = $field_label; 
    $this->field_name = $field_name; 
    $this->filed_desc = $filed_desc; 
    $this->dropdown_data = $dropdown_data; 
    $this->locale = $locale; 
    } 

    function getNotRequiredData(){ 
    global $notReqArry; //http://stackoverflow.com/questions/1415577/accessing-variables-and-methods-outside-of-class-definitions 
    return $notReqArry[$this->locale]; 
    } 

    function getValue(){ 
    return $_POST[$this->field_name]; 
    } 

    function dropdown(){ 
    $selecedVal = $this->getValue(); 
    $select_start = "<select name=\"$this->field_name\"><option value=\"\">$this->filed_desc</option>"; 
    foreach ($this->dropdown_data as $key=>$value){ 
     $selected = ($key == $selecedVal ? 'selected' : ''); 
     $options = sprintf('<option value="%s" %s >%s</option>',$key,$selected,$value); 
     print $options; 
    } 
    $select_end = "</select>"; 
    return $select_start . $options . $select_end; 
    } 

    function getLabel(){ 
    $non_req = $this->getNotRequiredData(); 
    $req = in_array($this->field_name, $non_req) ? '' : '*'; 
    return $this->field_label ? $req . $this->field_label : ''; 
    } 

    function __toString(){ 
    $label = $this->getLabel(); 
    $field = $this->dropdown(); 
    return $label.$field; 
    } 

} 



function generateForm ($lang,$country_list){ 
    switch($lang) 
    { 
    case 'en-US': 
     //create EN web form 
     echo $textField = new TextField($form, 'Note', 'form_note', '2', '20', '250', 'en-US'); 
     //echo $textField_js = new JsTextField($textField, 'onkeyup', 'return checklength(this,contact_max_warning)', 'Characters typed:'); 
     echo $dropDown = new DropDown ($form, 'Country', 'form_country', '--Select Country--', $country_list, 'en-US'); 
    break; 
    case 'fr-FR': 
     //create FR web form 
    break; 
    case 'de-DE': 
     //create DE web form 
    break; 
    case 'ja-JP': 
     //create JA web form 
    break; 
    default: 
     //create default web form 
     print('foooo'); 
    }; 
} 


<form id="frm_verification" action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST"> 
    <? 
    $lang='en-US'; 
    echo generateForm ($lang,$country_list); 
    ?> 
<p> 
    <input type="button" name="reset" value="Reset"> 
    <input type="submit" name="submit" value="Submit"> 
</p> 
</form> 

et le tableau de country_list.php est comme:

$country_main = array (
      //Main 5 countries at first 
      //Those 5 countries are direct market of my previous company. you can modify whatever you want. 
      "US" => "United States", 
      "UK" => "United Kingdom", 
      "DE" => "Germany", 
      "FR" => "France", 
      "JP" => "Japan",      
); 

Il ne fonctionne pas et je vérifier le journal des erreurs, et il dit:

"PHP Fatal error: Cannot access empty property in..."

Je suis bien sûr que cela vient de mon incompréhension de la classe et de sa déclaration var ou foreach. S'il vous plaît aidez-moi à résoudre ce problème; J'ai vraiment besoin d'aide. (Oui, je suis vraiment nouveau sur PHP)

Répondre

9
foreach ($this->dropdown_data as $key->$value){ 

devrait lire

foreach ($this->dropdown_data as $key=>$value){ 

Notez que le changement de -> à => en $key=>$value. Sinon, votre code tente d'accéder à la propriété value dans l'objet key, ce qui est évidemment invalide car key n'est pas un objet.

+0

Wooops .... lol .... Merci l'homme. – chris

+0

Salut Marek, alors comment imprimer avec succès la liste des pays? Je cherche un exemple mais c'est vraiment difficile à comprendre par moi-même. J'apprécie vraiment l'aide. – chris

0

La variable que vous faites référence à votre liste des pays est mal nommé:

echo generateForm ($lang,$country_list); 

devrait être

echo generateForm ($lang,$country_main); 

comme c'est la façon dont il est défini dans country_list.php.