Aller au contenu

pacci

Membre
  • Compteur de contenus

    8
  • Inscrit(e) le

  • Dernière visite

Réputation sur la communauté

0 Neutre

Information du profil

  • Société
    PACCI
  1. Bonjour à tous. J'ai recherché une class de Collection en PHP comme un arraylist en JAVA. N'ayant pas trouvé j'ai commencé à développer la mienne. Celle-ci ne marche pas donc je m'en remet à vous pour savoir si je ne suis pas partie dans la ré-invention de la roue et si il existe une class par défault dans PHP le faisant. Je vous propose mon code : <?php /* * Class métier de collection * une collection est un tableau d'objets sur lequel on attribut des traitements */ class Collection{ private $objets; // Tableau qui va être renvoyer private $num=0; // Nombre d'occurence private $classe; // Constructeur, créer un tableau public function Collection($class){ $this->classe = $class; $this->objets=array(); } // Retourne le nombre d'éléments de la collection public function Cardinal(){ $i=0; foreach($this->objets as $tbl){ $i++; } return $i; } // Vérifie si l'objet existe dans la collection public function Existe($Objet){ $lenght = $this->Cardinal() - 1; for($i=0;$i>=$lenght;$i++){ if($Objet == $this->objets[$i]){ // On arrête le traitement et on renvoi .vrai. return true; } } // Si on sort de la boucle, l'objet n'est pas dans le tableau return false; } // Retourne l'index de l'objet passé en paramètre dans la collection // Le premier objet de la collection à pour index 0 public function Index($Objet){ $lenght = $this->Cardinal() - 1; for($i=0;$i>=$lenght;$i++){ if($Objet == $this->objets[$i]){ return $i; } } // Si on sort de la boucle, l'objet n'est pas dans le tableau return false; } // Retourne l'objet qui se trouve à l'index passé en paramètre public function DonnerObjet($k){ $lenght = $this->Cardinal() - 1; echo'<script type="text/javascript">window.alert(\''.$lenght.'\');</script>'; // Si le paramètre est plus grand que la taille du tableau alors routourne .faux. if($k > $lenght){return false;} else{ for($i=0;$i>=$lenght;$i++){ if($i == $k){ //echo'<script type="text/javascript">window.alert(\''.$i.'\');</script>'; return $this->objets[$i]; } } // Si on sort de la boucle, l'objet n'est pas dans le tableau return false; } } // Ajoute un objet à la collection public function AjouterObjet($Objet){ $this->objets[] = $Objet; } // Remplace dans la collection l'objet figurant à l'index passé en paramètre par l'objet en paramètre public function RemplacerObjet($i,$Objet){ $lenght = $this->Cardinal() - 1; // Si $i est inférieur ou supérieur à la taille de la collection alors on retourne .faux. // Sinon on remplace et on retourne .vrai. if($i < $lenght || $i > $lenght){return false;} else{ $this->objets[$i] = $Objet; return true; } } // Supprime l'objet passé en paramètre public function SupprimerObjet($Objet){ $lenght = $this->Cardinal() - 1; // Taille for($i=0;$i>=$lenght;$i++){ if($this->objets[$i]==$Objet){ // array_splice(tableau, ligne, nb_doccurence_a_supprimer) $this->objets = array_splice($this->objets, $i, 1); return true; } } return false; } } ?> En fonctionnement : $Contact1 = new Contact('1', 'Dupond1', 'Ricardo1', '00 00 00 00 00', 'quelqueschose_AT_quelquechose.com', '00 00 00 00 00'); $Contact2 = new Contact('1', 'Dupond2', 'Ricardo2', '00 00 00 00 00', 'quelqueschose_AT_quelquechose.com', '00 00 00 00 00'); $Contact3 = new Contact('1', 'Dupond3', 'Ricardo3', '00 00 00 00 00', 'quelqueschose_AT_quelquechose.com', '00 00 00 00 00'); $CC = new Collection('Contact'); // Ca marche $CC->AjouterObjet($Contact1); $CC->AjouterObjet($Contact2); $CC->AjouterObjet($Contact3); echo $CC->Cardinal(); //Ca marche et m'affiche bien 3 /* echo $CC->Index($Contact2); //marche pas devrais me donner 1 echo $CC->DonnerObjet(2)->getNom()); //devrai me donner Ricardo3 */ Voyant les buggs, j'ai stoppé les tests. Merci d'avance pour vos réponses.
  2. Gestion de la pagination

    Bonjour à tous. La pagination peut devenir un vrai casse tête en terme d'implémentation. On ne se souvient pas souvent du code, c'est récurent etc... Bon je vous propose ma solution. J'ai développé une classe de traitement pour le SQL. <?php /* * Class d'utilisation du SQL | CURSEUR * Auteur : Maxime Di Meglio * Date : Fevrier 2011 * Commentaire : - Cette classe est écrite pour le SGBDR MySql ; * - La classe Exception (Class système) est utilisé dans le script * * Liste des méthodes : * fonction Sql($host, $user, $password, $bdd) | CONSTRUCTEUR * fonction Connect() | méthode de connexion * fonction GetHost() | Renvoi l'host * fonction GetUser() | Renvoi l'utilisateur en cours * fonction GetBdd() | Renvoi la bdd utilisé * fonction GetPassword() | Renvoi le mot de passe de connexion * fonction GetNb() | Renvoi le nombre d'occurence d'une requête * fonction Query($requete:ch de char) | Execute la requete * fonction Select($requete:ch de char | Méthode pour traiter les requêtes select * fonction Call($flag:booléen) | Affiche la liste des méthodes et attribut */ class Sql{ private $date; private $host; private $user; private $bdd; private $password; private $connect; // Prend la valeur true si la connexion est établie sinon false private $select_bdd; // Prend la valeur de .true. si la BDD existe et que l'on arrive à se connecter sinon .false. protected $nb; // Retourne le nombre de résultat de la dernière requete requete // Tableau contenant les messages d'erreur protected $exception=array( 0=>'La connexion au serveur est impossible', 1=>'La connexion à la base de données est impossible', 2=>'La requête doit contenir une chaine de charactère non vide', 3=>'L\'intérogation a échoué, vérifiez la requête en paramètre', 4=>'L\'adresse e-mail n\'est pas valide' ); // Constructeur : initialise les attributs public function Sql ($host, $user, $password, $bdd){ $this->host = $host; $this->user = $user; $this->password = $password; $this->bdd = $bdd; $this->connect = false; $this->select_bdd = false; $this->date = date('Y-m-d-G-i'); } // Méthode de connexion au serveur et à la BDD public function Connect(){ $this->connect = mysql_connect($this->host, $this->user, $this->password) or die('N\'a pas pu se connecter au serveur mysql'); if(!$this->connect){throw new Exception ($this->exception[0],0);return false;} else{ $this->select_db = mysql_select_db($this->bdd, $this->connect) or die('N\'a pas pu se connecter à la base de données'); if(!$this->select_db){ $this->connect=false; throw new Exception ($this->exception[1],1); return false; } else{ return true; } } } public function SetDate($timestamp, $flag){ if($flag){$this->date = date('Y-m-d-G-i', $timestamp);} else{$this->date = date('Y-m-d-G-i', time());} } public function GetDate(){ return $this->date; } // Récupérer le nom du serveur public function GetHost(){ return $this->host; } // Récupérer l'utilisateur public function GetUser(){ return $this->user; } // Récupérer la bdd public function GetBdd(){ return $this->bdd; } // Récupérer le mot de passe public function GetPassword(){ return $this->password; } // Récupère le nombre d'occurences renvoyé par une requete public function GetNb(){ return $this->nb; } /**********************************************************/ // Modifier le nom du serveur public function SetHost($host){ $this->host = $host; } // Modifier l'utilisateur public function SetUser(){ $this->user = $user; } // Modifier la bdd public function SetBdd(){ $this->bdd = $bdd; } // Modifier le mot de passe public function SetPassword(){ $this->password = $password; } // Methode d'intérogation de la bdd public function Query($requete){ if(empty($requete) || $requete == '' || !is_string($requete)){ throw new Exception ($this->exception[2],2); } $query = mysql_query($requete); if(!$query){ throw new Exception ($this->exception[3],3); return false; } else{ return $query; } } // Méthode pour traiter les requêtes select public function Select($requete){ $d = array(); $query = $this->Query($requete); $this->nb = mysql_num_rows($query); if($query){ if($this->nb == 1){ $r = mysql_fetch_assoc($query); $d[] = $r; } else{ while($r = mysql_fetch_assoc($query)){ $d[] = $r; } } return $d; } else{ return false; } } //Retourne le nombre d'enregistrement total d'une table public function Count($table){ $query = mysql_query('SELECT COUNT(*) AS total FROM '.$table.';'); $result = mysql_fetch_assoc($query); return $result['total']; } //retourne le nombre de page (à utiliser avec la methode pagination) public function Nbpage($table, $nb){ $count = $this->Count($table); $nombreDePages=ceil($count/$nb); return $nombreDePages; } //fonction de pagination public function Pagination($table, $nb, $getpage, $requete){ $count = $this->Count($table); $nombreDePages=ceil($count/$nb); if(isset($getpage)){ $pageActuelle=intval($getpage); if($pageActuelle>$nombreDePages){ $pageActuelle=$nombreDePages; } } else{ $pageActuelle=1; } $premiereEntree=($pageActuelle-1)*$nb; $requete .= ' LIMIT '.$premiereEntree.', '.$nb.';'; $result = $this->Select($requete); return $result; } // Affichage des methodes et attributs de la class Sql public function Call($flag=true){ $resultat = '------ Liste des méthodes et des attributs de la class Sql ------\n'; $resultat .= '\n **Liste des attributs de la class Sql** \n'; $resultat .= ' protected $host:ch de char | Nom du serveur \n protected $user:ch de char | Utilisateur de la bdd \n protected $bdd:ch de char | Nom de la bdd \n protected $password:ch de char | Mot de passe de connexion \n protected $connect:booléen | Renvoie .vrai. si la connexion au serveur marche sinon .faux. \n protected $select_bdd | Renvoie .vrai. si on accède à la BDD sinon faux \n protected $nb; | Nombre d\'occurence de la dernière requete executé \n protected $exception:tbl de ch | Tableau dans lequel les messages d\'exceptions sont enregistrés \n'; $resultat .= '\n **Liste des méthodes de la class Sql** \n'; $resultat .= 'public function Sql ($host:ch de char, $user:ch de char, $password:ch de char, $bdd:ch de char) | CONSTRUCTEUR \n'; $resultat .= 'public function Connect() | Connexion au SGBDR \n'; $resultat .= 'public function GetHost() | Retourne le nom du serveur \n'; $resultat .= 'public function GetUser() | Retourne le nom de l\'utilisateur \n'; $resultat .= 'public function GetBdd() | Retourne le nom de la BDD \n'; $resultat .= 'public function GetPassword() | Retourne le mot de passe de la BDD \n'; $resultat .= 'public function GetNb() | Retourne le nombre d\'occurence de la dernière requête \n'; $resultat .= 'public function SetHost($host) | Modifier l\'host \n'; $resultat .= 'public function SetUser($user) | Modifier l\'utilisateur \n'; $resultat .= 'public function SetBdd($bdd) | Modifier la bdd \n'; $resultat .= 'public function SetPassword($password) | Modifier le mot de passe de la BDD \n'; $resultat .= 'public function Query($requete:ch de char) | Execute la requête \n'; $resultat .= 'public function Select($requete:ch de char) | Retourne un tableau pour les requete de type select \n'; $resultat .= 'public function Pagination($table:chaine de char, $nb:entier, $getpage:entier, $requete:chaine de char) | retourne un tableau pour la pagination'; $resultat .= 'public function Call($flag:booléen) | Retourne la liste et les méthodes de la class, flag = .vrai.=> saut de ligne en html \n'; if($flag){return nl2br($resultat);}else{return $resultat;} } } ?> Comme vous pouvez voir on a la méthode publique Pagination($table:chaine de char, $nb:entier, $getpage:entier, $requete:chaine de char) : tableau et la méthode publique Nbpage($table : chaine de char, $nb : entier) : entier Utilisation : $db = new Sql($host, $user, $password, $bdd); $requete = 'SELECT mes_champs FROM mes_tables WHERE criteres_de_restriction'; $page = 1; // Pour la premiere page sinon récupérer un POST ou un GET $nb_occurences = 12; $result = $db->Pagination('matable',$nb_occurences , $page, $requete); // Pagination des résultat retourne un tableau $nb_page = $db->Nbpage('contact', 12); // Nombre de page total foreach ($result as $key => $value) { //Parcoure du tableau .... } Si vous voyez des améliorations/erreurs de la class (peut être la passer en static ?), n'hésitez pas à me contacter par MP.
  3. Je fais un récap' Pour changer la class de la ligne : <td><input type="checkbox" id="select<?php echo $i; ?>" onchange="if(this.checked){this.parentNode.parentNode.className='ligne-hover';}else{this.parentNode.parentNode.className = 'class-courante';}"/></td> Pour avoir la checkbox maître qui permet de le check des autres checkbox : var checkAll = function() // Fonction de Callback { var checked = arguments[0].checked; // Pour récupérer les paramètres de fonction de manière dynamique var col = document.getElementsByTagName("input"); // Tableau (ou collection) qui récupère les checkbox et les renseigne dans "col" for(var i=0;i<col.length;i++) // Pour i=0 à nombre_d_elements_récupérés pas 1 faire ... { if(col[i].parentNode.nodeName == "TD") // Si l'élément parent est une cellule td (et non th) ... { col[i].checked = checked; // On check toutes les checkbox col[i].onchange(); // On change toutes les checkbox en associant la méthode "onchange" à notre tableau } } }; Utilisation : <th><input type="checkbox" onclick="checkAll(this)"></th> <!-- Checkbox maître --> Tout fonctionne chez moi, merci à tous et en particulier à Neroth ! Sujet résolut une fois pour toute.
  4. Merci Neroth pour ton conseil qui est de taille ! N'étant pas familier avec la syntaxe Javascript ton post vas m'éviter pas mal de bugg ! Dans la continuité du post j'ai un nouveau problème lié à la gestion des checkbox (fait ch*er ces checkbox !) j'ai le code suivant en entête de tableau : <tr id="entete"> <th><input type="checkbox" onclick="checkAll(this)"></th> <th>Id</th> <th>Nom</th> ... </tr> Qui se traduit par cette image : J'aimerai avoir : J'ai trouvé sur internet une fonction permettant le checkbox maître : function checkAll(master){ var checked = master.checked; var col = document.getElementsByTagName("input"); for (var i=0;i<col.length;i++) { col[i].checked = checked; } } La fonction marche bien et me check toutes mes lignes. Code d'une ligne : <td> <input type="checkbox" id="select<?php echo $i; ?>" onchange="if(this.checked){document.getElementById(<?php echo $i; ?>).className='ligne-hover';}else{document.getElementById('<?php echo $i;?>').className = '<?php echo $class ;?>';}"/></td> J'ai pensé logiquement que la ligne: col.checked = checked; dans la fonction change l'état de la checkbox donc que le changement de class se fait naturelement. Mais il en est autrement... J'ai essayé : col.className = "ligne-hover"; dans ma boucle mais ça fait rien de plus. Si quelqu'un a une idée je suis preneur : var idée : booléen Si (idée) alors afficher("youpi") Sinon tant que (!idée) alors on réfléchie ... afficher("morbleu de saperlipopette") fin tant que Fin Si Les gars faut m'aider j'en ai marre que mon cerveau m'affiche "morbleu de saperlipopette". Merci d'avance.
  5. Merci Neroth le problème venait de là. C'est dans ces moments là qu'on se sent c*n ! J'ai galéré pendant plus de trois semaines pour un problème de majuscule. Edit : Sujet résolu merci à tous pour vos réponses.
  6. Bonjour, Merci de vos réponses du coup j'ai ré-adapté mon code : Code PHP: $i = 1; foreach ($result as $key => $value) { if($i%2==0){$class='paire';}else{$class='impaire';}?> <tr class="<?php echo $class;?>" id="<?php echo $value['id'];?>"> <td><input type="checkbox" name="select[]" onchange="if(this.checked){document.getElementById('<?php echo $value['id'] ?>').ClassName = 'ligne-hover';}else{document.getElementById('<?php echo $value['id'];?>').ClassName = '<?php echo $class ;?>';}"/></td> <td><?php echo $value['id'];?></td> <td><?php echo $value['nom'];?></td> <td><?php echo $value['prenom'];?></td> <td><?php echo $value['tel'];?></td> <td><?php echo $value['mail'];?></td> <td><?php echo $value['portable'];?></td> <td><?php echo $value['entreprise'];?></td> <td><?php echo $value['nom_type'];?></td> <td> <span onmouseover="document.edit<?php echo $value['id'];?>.src='icone/edit-hover.png'" onmouseout="document.edit<?php echo $value['id'];?>.src='icone/edit.png'"> <img class="icone" src="icone/edit.png" name="edit<?php echo $value['id'];?>" onclick="modifier('<?php echo $value['id'];?>')"/> </span> </td> <td> <span onmouseover="document.delete<?php echo $value['id'];?>.src='icone/delete-hover.png'" onmouseout="document.delete.<?php echo $value['id'];?>.src='icone/delete.png'"> <img class="icone" src="icone/delete.png" name="delete<?php echo $value['id'];?>" onclick="if(window.confirm('Etes-vous sûr de vouloir supprimer le contact <?php echo $value['nom'];?> <?php echo $value['prenom'];?> ?')) {supprimer_contact('<?php echo $value['id'];?>');}else{return false;}"/> </span> </td> </tr> <?php $i++; } echo '</table></form>'; Je n'avais pas erreurs au niveau de l'interprétation donc je pense qu'ils s'y sont retrouvés . Par ce qu'une image vaut mieux qu'un grand discours.... La ligne se mets en rouge sur le hover. Maintenant je veux qu'il se mette en rouge sur le click de chekbox. J'ai essayé avec onChange, ça marche toujours pas. Il y a une API Prototype pour le faire mais je n'ai pas le droit de l'utiliser c'est un projet scolaire ! Firebug ne détecte aucune erreur. Je pense à une erreur de logique mais je n'arrive pas à voir où c'est. Merci de votre aide et des futures réponses. Cordialement.
  7. Bonjour. Merci de ta réponse. J'utilise déjà prototype pour divers application "entreprise" et ce framework est génial, notamment pour l'ajax. Cependant ce projet est scolaire je dois être apte à gérer les évènements de manière classique. J'utilise Firebug (sous FF4), il ne me met aucune erreur. Ayant fait 2 jours de recherche et ayant testé plusieurs solutions, ça ne fait toujours pas ce que je veux. Je pense à une erreur dans la gestion du checkbox dans onclick="if(this.checked)... Je suis toujours preneur des solutions proposées. Merci d'avance.
  8. Bonjour. Pour ma PTI évènementiel que je dois présenter au BTS, j'ai choisi de présenter un programme répertoire codé en AJAX (XHTML/CSS). Pour le moment le programme marche, mais je dois rajouter des interactions (conseil de mon prof d'info). Je me suis dit que je vais mettre des checkbox devant mes lignes de contact et faire une suppression multiple. Le système marche, mais dans l'optique de rajouter de l'intuitivité, lorsque je clique sur le checkbox, je veux changer la class de ma ligne. j'ai testé : Code PHP : <?php ... if($i%2 == 0){$class='paire';}else{$class='impaire';} echo ' <tr class="'.$class.'" id="'.$value['id'].'"> <td><input type="checkbox" name="select[]" onclick="if(this.checked){document.getElementById(\''.$value['id'].'\').ClassName = \'ligne-hover\';}else{document.getElementById(\''.$value['id'].'\').ClassName = \''.$paire.'\'}"/></td> ... ?> code CSS : #content #tableau .paire{background:-moz-linear-gradient(top, #C9C9C9, #A0A0A0, #C9C9C9);text-align:center;font-size:14px;} #content #tableau .ligne-hover{background:-moz-linear-gradient(top, #D14D4D, #770202, #D14D4D);text-align:center;color:#FFFFFF;font-size:14px;} Ma ligne devrai se mettre en rouge lorsque je check ma checkbox, mais ce n'est pas le cas Je suis preneur de toutes explications. Merci d'avance.
×