PHP 4/5 -> Array (pas de liste ?) [Résolu] - PHP - Programmation
Marsh Posté le 20-03-2007 à 09:47:48
ton code n'aide pas beaucoup...on ne connait pas ta classe htmlOptionGroup, on ne connait pas le type de $form, on ne sait pas quelle requête tu fais, etc...
Marsh Posté le 20-03-2007 à 12:07:08
Voici le code du formulaire :
$requete = "SELECT opt_id, opt_nom FROM options_util";
$reponse = mysql_query($requete);
//=================================
// Création du formulaire.
//=================================
// Entête.
$form = new htmlForm('Utilisateur', '?add=1', 'post', 'return verif_form(this)');
$form->setReadOnly($lecture);
// Champs de saisi.
$form->addHidden('id', $id);
$form->addText('nom', 'Nom :', 75, '', $nom);
$form->addText('prenom', 'Prenom :', 75, '', $prenom);
$form->addText('login', 'Login :', 20, '', $login);
$form->addText('password', 'password :', 6, '', $password);
// -- Options utilisateur.
$opt_util = new htmlOptionGroup();
while($resultat=mysql_fetch_array($reponse))
$opt_util->appendChild( new htmlOption('checkbox', 'options_util[]', $resultat['opt_id'], $resultat['opt_nom'], array_key_exists($resultat['opt_id'], $temp_options_util)));
$form->addOptionsGroup('options_util[]', 'Modifications :', $opt_util);
// Button "Save/Cancel/Delete".
$form->addButtonSave();
$form->addButtonCancel();
if($id) $form->addButtonDelete();
// Affichage du formulaire.
$form->display();
Et voici les classes (c'est pas moi qui l'est fait), je serais pas trop l'expliqué, je comprend pas grand chose à tout ce basare :
<?php
class htmlOptionGroup extends tree {
/// Retourne le code html généré pour l'affichage du groupe d'options.
function getHtml($readonly=false){
$html = '';
foreach( $this->childNodes as $child ){
$html .= $child->getHtml($readonly);
}
return $html;
}
/// Retourne le script JavaScript permettant le cochage/décochage assisté
/// Nécessite les classes JavaScript présentes dans le fichier cascOptions.js.
function getCascOptions(){
$script = "\n<script type=\"text/javascript\"><!--\n";
foreach( $this->childNodes as $child ){
$script .= "var ".$child->getJavaScriptId()." = new cascOption('".$child->getId()."');\n";
foreach( $child->childNodes as $subchild )
$script .= $subchild->getJavascript( $child->getJavaScriptId() );
}
$script .= "//--></script>\n";
return $script;
}
}
/** Option html, quelle soit de type checkbox ou radio.
*
* Cette classe est utilisée pour créer des options/sous options en cascade.
* L'ajout de sous options s'effectue via la méthode \c appendChild héritée de treeNode.
*
*/
class htmlOption extends treeNode {
var $type;
var $name;
var $id;
var $javascript_id;
var $value;
var $label;
var $checked;
var $title;
/// Constructeur
/// \param type Type d'option, radio ou checkbox
/// \param name Nom du champ
/// \param value Valeur du champ
/// \param label Libellé du champ
/// \param checked Booléen indiquant si l'option est pré-sélectionnée ou non
/// \param title Contenu de l'info bulle qui s'affichera lors du passage de la souris sur le champ
function htmlOption($type,$name,$value,$label,$checked=NULL,$title=NULL){
$this->type = $this->validType($type) ? $type : 'checkbox';
$this->name = $name;
$this->id = str_replace( '[', '', str_replace( ']', '', $name ) ).'-'.$value;
$this->javascript_id = str_replace( '-', '', $this->id );
$this->value = $value;
$this->label = $label;
$this->checked = $checked;
$this->title = $title ? $title : $label;
}
/// Retourne le code html généré pour l'affichage de l'option.
function getHtml($readonly=false){
$title = htmlspecialchars($this->title,ENT_QUOTES);
$checked = $this->checked ? ' checked="checked" ' : '';
$disabled = $readonly ? ' disabled' : '';
if( $this->type=='select' ){
if( sizeof($this->childNodes) ){
$html = "\t\t".'<optgroup label="'.$this->label.'">'."\n";
foreach( $this->childNodes as $child ){
$selected="";
if($child->checked)
$selected = "selected";
$html .= "\t\t\t".'<option '.$selected.' value="'.$child->value.'">'.$child->label.'</option>'."\n";
}
$html .= "\t\t</optgroup>\n";
}else{
$html = "\t\t".'<option '.$checked.' value="'.$this->value.'">'.$this->label.'</option>'."\n";
}
}else{
$html = "<input type=\"".$this->type."\" $disabled class=\"".$this->type."\" name=\"".$this->name."\" value=\"".$this->value."\" id=\"".$this->id."\" title=\"".$title."\" $checked /> <label id=\"lbl_".$this->id."\" for=\"".$this->id."\" title=\"".$title."\">".htmlspecialchars($this->label)."</label><br />";
if( $this->hasChildNodes() ){
$html .= '<div class="childOptions">';
foreach( $this->childNodes as $child ){
$html .= $child->getHtml($readonly);
}
$html .= '</div>';
}
}
return $html;
}
Marsh Posté le 20-03-2007 à 12:13:10
joker. Un paté de code comme ça dont tu avoues que tu n'es pas l'auteur et que tu ne le comprends pas, je refuse de le lire.
Marsh Posté le 20-03-2007 à 12:19:48
Ben on m'a demander d'utiliser ces classes pour mes formulaires mais on m'a pas expliqué comment ça marchait vraiment.
J'ai essayé de mettre en rouge ce qui me semblait important.
Marsh Posté le 20-03-2007 à 12:21:21
PIGs_DarkSith a écrit : on m'a pas expliqué comment ça marchait vraiment. |
Et t'as pas songé un instant à chercher, à aller lire des docs toussa?
Marsh Posté le 20-03-2007 à 12:22:20
'tain, j'adore me dire qu'il y a des gens pour qui c'est normal de considérer la programmation comme de la magie vaudou...
Marsh Posté le 20-03-2007 à 12:27:22
Citation : Et t'as pas songé un instant à chercher, à aller lire des docs toussa? |
On m'a dit que j'avais pas besoin de comprendre comment marchait les classes.
Moi je suis nul en orienté objet, j'ai bien essayé de comprendre mais j'ai du mal.
La doc, ben si y'a une quelques part je suis preneur ^^.
Bon j'efface ce qui me semble pas important.
Marsh Posté le 23-03-2007 à 19:54:46
Après avoir bien re-re-regardé le code je pense que mon problème viens de la gestion de l'orienté objet en PHP 5 (en particulier à l'héritage car il semblerait que le soucis vienne avec une classe héritante même si je suis pas doué en OO).
Je suis sur un serveur Xamp en PHP 5 et lors de mon stage je travaillais en PHP 4.
Est-il possible dans le "php.ini" de faire en sorte que mon serveur Xamp gère l'orienté objet comme si je travaillais en PHP 4 et non en PHP 5 ?
Merci d'avance.
Edit :
// -- Options utilisateur.
$opt_util = new htmlOptionGroup();
while($resultat=mysql_fetch_array($reponse))
$opt_util->appendChild( new htmlOption('checkbox', 'options_util[]', $resultat['opt_id'], $resultat['opt_nom'], array_key_exists($resultat['opt_id'], $temp_options_util)));
$form->addOptionsGroup('options_util[]', 'Modifications :', $opt_util);
Le problème viens des lignes en rouge, si je comment y'a aucun différence. La boucle fonctionne bien par contre, j'ai testé en remplaçant le "$opt_util..." par un echo "test".
Donc j'ai soit un soucis soit avec la classes htmlOptionGroup, soit avec la fonction appendChild, soit avec la classe htmlOption... A savoir que les 2 classes sont hérités dans la classes treeNodes à laquelle appartient ma fonction.
Marsh Posté le 20-03-2007 à 02:37:08
Bon voilà, je vous explique mon problème.
J'ai créer une base de connaissances avec une gestion des utilisateurs.
Quand on édite le profil d'un utilisateur on peut lui définir les droits sur différentes parties du site.
J'ai développer ça dans une entreprise ou j'ai fais mon stage de BTS et mon site marchait nickel.
Seul soucis, j'ai récupérer les sources et est tout installé sur un serveur Xamp.
Tout marche marchel nickel sauf que pour la liste des droits des utilisateurs au lieu d'avoir un truc du genre :
[] Droits sur la partie 1
[] Droits sur la partie 2
[] Droits sur la partie 3
[] Droits sur la partie 4
........
J'ai ceci :
[] Array
J'ai essayé sur Wamp en PHP 4 et j'ai bien ma liste avec les cases à cocher mais j'ai pleins d'autres bugs ailleurs
Donc j'aimerais pouvoir faire marché mon site avec Xamp mais impossible de résoudre le problème.
Voici le code :
// -- Options utilisateur.
$opt_util = new htmlOptionGroup();
while($resultat=mysql_fetch_array($reponse))
$opt_util->appendChild( new htmlOption('checkbox', 'options_util[]', $resultat['opt_id'], $resultat['opt_nom'], array_key_exists($resultat['opt_id'], $temp_options_util)));
$form->addOptionsGroup('options_util[]', 'Modifications :', $opt_util);
Je pense que mon soucis pourrait se résoudre très simplement en modifiant le fichier php.ini mais pas la moindre idée d'où il faut aller bidouiller.
Merci d'avance.
Message édité par PIGs_DarkSith le 24-03-2007 à 00:21:39