Aller au contenu


Photo

VMC sur une liste PHP


  • Please log in to reply
13 replies to this topic

#1 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 22 décembre 2013 - 20:00

Bonjour,

Je suis en train de me préparer des exemples de programmation php/MySQL, pour écrire plus efficacement (et toujours pareil). Avec des Exemples de type "Liste" et "Fiche". j'ai fait des exemples de base, des exemples en utilisant la programmation Objet (fallait bien que je m'y mette un jour en php).

Maintenant, je m'essaye à la programmation "Vue Modèle Controleur".

Pour une page de type Fiche, c'est facile (Simple découpage de la version objet).
- Le Modèle, c'est mes classes et les classes d'accès pour mon objet. Ca marche.
- Le Controleur, récupère betement la saisie, fait appel aux modèles pour les appels de lecture, modification, re-lecture, OK. Ensuite, simple appel à la vue.
- La Vue correspond au code html, avec les injections simples de variables.

Pour une page de type Liste, j'ai une difficulté. Comment gérer la boucle de lecture.
1) On effectue la boucle dans le modèle et on alimente un tableau avec toutes les valeurs. Ensuite, on reboucle dans la vue. Ca m'ennerve un chouïa de faire deux boucles.
2) On ouvre la boucle dans le controleur, et c'est la vue qui effectue un appel de la boucle de lecture dans le modèle. Ca me gène parce que la vue ne devrait pas appeler le modèle.
3) Le controleur appelle dans la vue une fonction d'affichage de l'entete, Le controleur effectue la boucle de lecture et appelle une fonction d'affichage des lignes répétées. Ensuite on appelle la fonction d'affichage du pied de page. Mais les fonctions intégrées à la vue ne sont peut-être pas ce qu'il y a de plus classique.

A vos avis ?

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#2 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 22 décembre 2013 - 20:06

Un exemple de ce que j'ai simplement fait en fiche.

La table MySQL est tout ce qu'il y a de plus simple

CREATE TABLE `PhpExple_Test` (
`CleNom` text COLLATE latin1_general_ci NOT NULL,
`ClePrenom` text COLLATE latin1_general_ci NOT NULL,
`Mail`	 text COLLATE latin1_general_ci NOT NULL,
`Telephone` text COLLATE latin1_general_ci NOT NULL
)

Le modèle est le suivant :
<?php
// * * * Classe objet de test * * *
class ZeElement {

public $cleNom = '' ;
public $clePrenom = '' ;
public $mail	 = '' ;
public $telephone = '' ;
public $trouvSQL = false ;

public function __construct($nom, $prenom, $mail, $telephone) {
	 $this->cleNom = $nom ;
	 $this->clePrenom = $prenom ;
	 $this->mail	 = $mail ;
	 $this->telephone = $telephone ;
	 $this->trouvSQL = false ;
}

public function clefVide() {
	 if ($this->cleNom == '' or $this->clePrenom == '') {
		 return true ;
	 } else {
		 return false ;
	 }
}
}

// * * * Classe management objet de test * * *
class MngrZeElement {

private $link;
public function __construct($link) {
	 $this->link = $link ;
}
public function lectureSQL($cleNom, $clePrenom) {
	 $sql = " SELECT Mail, Telephone" ;
	 $sql .= "	 FROM ". PrefAutor() . "Test" ;
	 $sql .= " WHERE CleNom = '" . mysql_real_escape_string($cleNom, $this->link) . "' " ;
	 $sql .= "	 AND ClePrenom = '" . mysql_real_escape_string($clePrenom, $this->link) . "' " ;

	 $result = mysql_query($sql, $this->link) or die('Erreur Select SQL !'.mysql_error()) ;
	
	 if ($row = mysql_fetch_assoc($result)) {
		 $elt = new ZeElement($cleNom, $clePrenom, $row['Mail'], $row['Telephone']) ;
	
		 $elt->trouvSQL = true ;
	 } else {
		 $elt = new ZeElement($cleNom, $clePrenom, '', '') ;
	
		 $elt->trouvSQL = false ;
	 }
	 return $elt ;
}


public function updateSQL($elt) {
	 $sql = " UPDATE ". PrefAutor() . "Test" ;
	 $sql .= "	 SET Mail	 = '" . mysql_real_escape_string($elt->mail, $this->link)	 . "'" ;
	 $sql .= "	 , Telephone = '" . mysql_real_escape_string($elt->telephone, $this->link) . "'" ;
	 $sql .= " WHERE CleNom = '" . mysql_real_escape_string($elt->cleNom, $this->link) . "' " ;
	 $sql .= "	 AND ClePrenom = '" . mysql_real_escape_string($elt->clePrenom, $this->link) . "' " ;
	 mysql_query($sql, $this->link) or die('Erreur Update SQL !'.mysql_error()) ;
}


public function deleteSQL($elt) {
		 $sql = " DELETE FROM ". PrefAutor() ."Test" ;
		 $sql .= " WHERE CleNom = '" . mysql_real_escape_string($elt->cleNom, $this->link) . "' " ;
		 $sql .= "	 AND ClePrenom = '" . mysql_real_escape_string($elt->clePrenom, $this->link) . "' " ;
	
		 mysql_query($sql, $this->link) or die('Erreur Delete SQL !'.mysql_error()) ;
		
		 $elt->mail	 = '' ;
		 $elt->telephone = '' ;
		 $elt->trouvSQL = false ;
}

public function insertSQL($elt) {
	 $sql = " INSERT INTO ". PrefAutor() . "Test" ;
	 $sql .= " VALUES " ;
	 $sql .= " ( '" . mysql_real_escape_string($elt->cleNom, $this->link) . "'" ;
	 $sql .= " , '" . mysql_real_escape_string($elt->clePrenom, $this->link) . "'" ;
	 $sql .= " , '" . mysql_real_escape_string($elt->mail, $this->link)	 . "'" ;
	 $sql .= " , '" . mysql_real_escape_string($elt->telephone, $this->link) . "'" ;
	 $sql .= " ) " ;

	 mysql_query($sql, $this->link) or die('Erreur Insert SQL !'.mysql_error()) ;
	 $elt->trouvSQL = true ;

}
private $result ;
public function OuvrirListe($ChCleNom, $ChClePrenom) {
	 $cond = "	 WHERE " ;
	 $sql = " SELECT CleNom, ClePrenom, Mail, Telephone " ;
	 $sql .= "	 FROM ". PrefAutor() ."Test" ;
	
	 if ($ChCleNom != '') {
		 $sql .= $cond."CleNom LIKE '%" . mysql_real_escape_string($ChCleNom, $this->link) . "%'" ;
		 $cond = " AND " ;
	 }
	 if ($ChClePrenom != '') {
		 $sql .= $cond."ClePrenom LIKE '%" . mysql_real_escape_string($ChClePrenom, $this->link) . "%'" ;
		 $cond = " AND " ;
	 }
	
	 $sql .= " ORDER BY 2, 1 " ;

	 $this->result = mysql_query($sql, $this->link) or die('Erreur Open SQL !'.mysql_error()) ;

}
public function LireListe() {
	 if ($row = mysql_fetch_assoc($this->result)) {
		 $elt = new ZeElement($row['CleNom'], $row['ClePrenom'], $row['Mail'], $row['Telephone']) ;
		 $elt->trouvSQL = true ;
		 return $elt ;
	 } else {
		 $elt = new ZeElement('', '', '', '') ;
		 $elt->trouvSQL = false ;
		 return $elt ;
	 }
}
}

?>

Ensuite le controleur :

<?php
// * * * Initialisation * * *

session_start();
include 'GestionAutorisation/ParamBase.php' ;
$link = SQLconnex() ;
// * * * Reception de champ * * *
$chCleNom	 = getGETPOST('', 'Nom',	 'ChNom') ;
$chClePrenom = getGETPOST('', 'Prenom', 'ChPrenom') ;
$chMail	 = getGETPOST('', '',		 'ChMail') ;
$chTelephone = getGETPOST('', '',		 'ChTelephone') ;
$submit	 = getGETPOST('', '',		 'submit') ;

// * * * Récupération de la classe et initialisation * * *
require 'Objet04Element.class.php' ;

$mngrElement = new MngrZeElement($link) ;

$element = $mngrElement->lectureSQL($chCleNom, $chClePrenom) ;

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
//	 Mises a jour
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
$majEffectue = '' ;

// * * * Création * * *
if ($submit == 'Créer' and !$element->trouvSQL) {
	
	 $element->mail	 = $chMail ;
	 $element->telephone = $chTelephone ;
	 $mngrElement->insertSQL($element) ;
	 $majEffectue = '<p class="ok">Modification Effectuée.</p>'."\n" ;
	 $element = $mngrElement->lectureSQL($chCleNom, $chClePrenom) ;
}

// * * * Modification * * *
if ($submit == 'Modifier' and $element->trouvSQL) {
	
	 $element->mail	 = $chMail ;
	 $element->telephone = $chTelephone ;
	 $mngrElement->updateSQL($element) ;
	 $majEffectue = '<p class="ok">Modification Effectuée.</p>'."\n" ;
	 $element = $mngrElement->lectureSQL($chCleNom, $chClePrenom) ;
}

// * * * Suppression * * *
if ($submit == 'Confirmer Suppression' and $element->trouvSQL) {
	 $mngrElement->deleteSQL($element) ;

	 $majEffectue = '<p class="ok">Suppression Effectuée.</p>'."\n" ;
	 $element = $mngrElement->lectureSQL($chCleNom, $chClePrenom) ;
}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// * * * Affichage * * *
require 'Vue01FicheVue.php' ;
?>

Et en dernier, la petite vue :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Exemple Liste Objet 2</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="author" content="Mathieu Fay" />
<meta name="generator" content="BorakHTML - http://mfay.free.fr/BorakHTML" />
<meta name="viewport" content="width=500" />
<link href="http://boraklerouge.free.fr/CSS/CSS-Base-2013/Base 2013-08.css"
		 type="text/css" rel="stylesheet" />
<link href="http://boraklerouge.free.fr/CSS/CSS-Base-2013/Impression 2013-08.css"
		 type="text/css" rel="stylesheet" media="print" />
</head>
<body class="fix500">
<div id="page">
<h1>Fiche Objet 2</h1>
<script type="text/javascript" src="ControlFormulaire.js"></script>
<form name="zeform" id="zeform" action="#" method="post" onsubmit="return controlformulaire(this) ;">

<?php
// * * * Message Mise à jour * * *
echo $majEffectue ;

// * * * Affichage des clés en mise à jour * * *
if (!$element->clefVide()) {
	 $prot = 'readonly="readonly"' ;
} else {
	 $prot = '' ;
}

echo '<fieldset><legend>Clés</legend>'."\n" ;
echo '<p>' ;
echo '<label for="ChNom">Nom :</label><br />' ;
echo '<input name="ChNom" id="ChNom" type="text"' ;
echo 'value="' . affich($element->cleNom) . '" class="oblig" ' . $prot ;
echo ' maxlength="32" size="32" />' ;
echo '</p>'."\n" ;

echo '<p>' ;
echo '<label for="ChPrenom">Prénom :</label><br />' ;
echo '<input name="ChPrenom" id="ChPrenom" type="text"' ;
echo 'value="' . affich($element->clePrenom) . '" class="oblig" ' . $prot ;
echo ' maxlength="32" size="32" />' ;
echo '</p>'."\n" ;
if ($element->clefVide()) {
	 echo '<p>' ;
	 echo '<input name="submit" type="submit" value="Choisir" />' ;
	 echo '</p>'."\n" ;
} else {
	 echo '<p>' ;
	 echo '<a href="Objet04Fiche.php">Autres clés</a>' ;
	 echo '</p>'."\n" ;
}
echo '</fieldset>'."\n" ;
// * * * Affichage des données à saisir * * *
if (!$element->clefVide()) {
	 echo '<fieldset><legend>Données</legend>'."\n" ;

	 echo '<p>' ;
	 echo '<label for="ChMail">Mail :</label><br />' ;
	 echo '<input name="ChMail" id="ChMail" type="text"' ;
	 echo 'value="' . affich($element->mail) . '" class="oblig"' ;
	 echo ' maxlength="50" size="50" />' ;
	 echo '</p>'."\n" ;

	 echo '<p>' ;
	 echo '<label for="ChTelephone">Téléphone :</label><br />' ;
	 echo '<input name="ChTelephone" id="ChTelephone" type="text"' ;
	 echo 'value="' . affich($element->telephone) . '" class="oblig"' ;
	 echo ' maxlength="14" size="14" />' ;
	 echo '</p>'."\n" ;

	 echo '</fieldset>'."\n" ;

	 // * * * Boutons de mise à jour * * *
	 echo '<fieldset><legend>Actions</legend>'."\n" ;
	 echo '<p>' ;
	 if ($element->trouvSQL) {
		 if ($submit != 'Supprimer') {
		 echo '<input name="submit" type="submit" value="Modifier" /> - ' ;
		 echo '<input name="submit" type="submit" value="Supprimer" />' ;
		 } else {
		 echo '<input name="submit" type="submit" value="Confirmer Suppression" /> - ' ;
		 echo '<input name="submit" type="submit" value="Annuler" />' ;
		 }
	 } else {
		 echo '<input name="submit" type="submit" value="Créer" />' ;
	 }
	 echo '</fieldset>'."\n" ;
}
?>
<p class="txtCentre">
<a href="Objet04Liste.php">Retour Liste</a> -
<a href="index.html">Retour menu</a>
</p>
</form>
</div>
</body>
</html>

Petit complément, j'ai externalisé HTMLENTITIE par une fonction, parce que selon la version de PHP, je peux avoir des différences de codage. De même, j'utilise une fonction pour la récupération des données, avec en paramètre, la valeur par défaut, l'etiquette pour le GET, l'etiquette pour le POST. J'ai aussi externalisé la connexion SQL qui peut varier selon la version de php (encodage).

function affich($var)
{ // * * html 4 * *
// return htmlentities($var, ENT_COMPAT | ENT_HTML401 ,'ISO-8859-1') ;
// * * xhtml * *
// return htmlentities($var, ENT_COMPAT | ENT_XHTML ,'UTF-8') ;
// * * Pour le test * *
return htmlentities($var, ENT_COMPAT | ENT_XHTML ,'ISO-8859-1') ;
}
// * * * Util Reception * * * * * * * * * * * * * * * * * * * * * * * * *
function getGETPOST($trDef, $trGet, $trPost)
{ if ($trPost != '' and isset($_POST[$trPost]))
{ return (get_magic_quotes_gpc()===1) ? stripslashes($_POST[$trPost]) : $_POST[$trPost] ;
}
if ($trGet != '' and isset($_GET[$trGet]))
{ return (get_magic_quotes_gpc()===1) ? stripslashes($_GET[$trGet]) : $_GET[$trGet] ;
}
return $trDef ;
}

function SQLconnex()
{  $link	 = mysql_connect(BaseHost(), Baselogin(), Basepass()) or die('Erreur de connexion '.mysql_error()) ;
   mysql_set_charset('latin1',$link) ;
   mysql_select_db(Basebase()) or die('Erreur de selection '.mysql_error());
   return $link ;
}

Ce message a été modifié par BorakLeRouge - 22 décembre 2013 - 20:08 .

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#3 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 463 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 23 décembre 2013 - 10:22

Salut Red Borak :)

J'ai pas regardé ton code, mais pour ma part, et de ce que je sais, le controler doit être le plus minimaliste possible et ne pas contenir (trop) de calculs.
Le model devant se charger de ça (c'est un peu son job).
La vue quand à elle devrait effectuer la boucle afin d'afficher une liste (foreach).
Je ne fait quasi jamais de boucles dans mes models par contre, j'interroge la base de données, en effectuant un tri, et en ne demandant que ce dont j'ai vraiment besoin pour la dite liste. Cela me retourne un objet, que je passe, via mon controller à ma vue afin de créer la boucle.

Si cela peut aider :)

MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#4 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 23 décembre 2013 - 10:38

L'exemple porte plutôt sur la fiche. Et là, je n'ai pas de pb.

Donc pour la liste :
OK, dans le modèle je fais un nouvel objet pour la réponse liste, et c'est par cette objet que je boucle. Ca me parait effectivement bien mieux et plus cohérent (et en plus, ça permet de faire des jointures et récupérer plus de colonnes).

Ce message a été modifié par BorakLeRouge - 23 décembre 2013 - 11:42 .

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#5 zekiller28

zekiller28

    Admin qui mord

  • Administrateurs
  • PipPipPipPipPipPipPipPipPip
  • 10 624 Messages :
  • Configuration:Toutes sortes de Mac du PPC à l'Intel et toute sorte de MacOS X De Panther Client à Maverick.
  • Sexe:Masculin
  • Localisation:Saint-Hilarion (78)

Posté 23 décembre 2013 - 11:38

Les gars, faut décrocher, c'est les fêêêêteux !!!!!!! :zz-big-back:
Le site de ToolsX
Le site de ToolsXOptimizer

Apple Certified Mac Management Basics 10.12
Apple Certified Mac Management Basics 10.9 English
Apple Certified Mac Integration Basics 10.9 English
Apple Certified Associate Mac Integration 10.8
Apple Certified Mac Management Basics 10.8

#6 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 23 décembre 2013 - 21:28

On s'en fout des fêtes :)

Ok, test d'une liste (bon ça, fait deux boucles, mais ça marche).

Le controleur : (pas gros)

<?php
// * * * Initialisation * * *

   session_start();
   include 'GestionAutorisation/ParamBase.php' ;
   $link = SQLconnex() ;
// * * * Reception de champ * * *
   $ChCleNom	 = getGETPOST('', 'Nom',	  'ChNom') ;
   $ChClePrenom  = getGETPOST('', 'Prenom',   'ChPrenom') ;
   $submit	   = getGETPOST('', '',		 'submit') ;

// * * * Affichage de la Liste * * *
   require 'Vue02Element.class.php' ;
   $mngrElement = new MngrZeElement($link) ;
   $Lignes = $mngrElement->LectureListe($ChCleNom, $ChClePrenom) ;
   require 'Vue02ListeVue.php' ;
?>

Ensuite, ce que j'ai ajouté dans le modèle (la classe est dans post précédent) :

   public function LectureListe($ChCleNom, $ChClePrenom) {
	  $cond = "	 WHERE " ;
	  $sql  = "    SELECT CleNom, ClePrenom, Mail, Telephone " ;
	  $sql .= "	  FROM ". PrefAutor() ."Test" ;
	 
	  if ($ChCleNom != '') {
		 $sql .= $cond."CleNom LIKE '%" . mysql_real_escape_string($ChCleNom, $this->link) . "%'" ;
		 $cond = " AND " ;
	  }
	  if ($ChClePrenom != '') {
		 $sql .= $cond."ClePrenom LIKE '%" . mysql_real_escape_string($ChClePrenom, $this->link) . "%'"  ;
		 $cond = " AND " ;
	  }
	 
	  $sql .= " ORDER BY 2, 1 " ;
   
	  $result =  mysql_query($sql, $this->link) or die('Erreur Open SQL !'.mysql_error()) ;

	  while($row = mysql_fetch_object($result)) {
		 $Lignes[] = $row;
	  }
	  return $Lignes ;
   }

Et la vue :

<?php
// * * * * * * * * * * * * * * * * * * * * * * *
// * * * Entête * * * * * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * *

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
   <title>Exemple Liste Objet 2</title>
   <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
   <meta name="author" content="Mathieu Fay" />
   <meta name="generator" content="BorakHTML - http://mfay.free.fr/BorakHTML" />
   <meta name="viewport" content="width=500" />
   <link href="http://boraklerouge.free.fr/CSS/CSS-Base-2013/Base 2013-08.css"
		 type="text/css" rel="stylesheet" />
   <link href="http://boraklerouge.free.fr/CSS/CSS-Base-2013/Impression 2013-08.css"
		 type="text/css" rel="stylesheet" media="print" />
</head>
<body class="fix900">
<div id="page">
<h1>Liste Objet 2</h1>
<script type="text/javascript" src="ControlFormulaire.js"></script>
<form name="zeform" id="zeform" action="#" method="post" onsubmit="return controlformulaire(this) ;">
<p><label for="ChNom">Nom : </label>
<input name="ChNom" id="ChNom" type="text" value="<?php echo affich($ChCleNom); ?>" maxlength="32" size="32" />
-
<label for="ChPrenom">Prénom : </label>
<input name="ChPrenom" id="ChPrenom" type="text" value="<?php echo affich($ChClePrenom); ?>" maxlength="32" size="32" />
-
<input name="Envoi" id="Envoi" type="submit" value="Afficher" />
</p>
<table class="centre">
<tr><th>Prénom Nom</th><th>Mail</th><th>Téléphone</th></tr>
<tr class="impair"><td colspan="3"><a href="Vue02Fiche.php">Créer Fiche</a></td></tr>

<?php
// * * * * * * * * * * * * * * * * * * * * * * *
// * * * Repetitive * * * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * *
foreach($Lignes as $Ligne) {
?>
<tr class="<?php echo $cl ?>">
  
<td><a href="Vue02Fiche.php?Nom=<?php echo affich($Ligne->CleNom); ?>&Prenom=<?php echo affich($Ligne->ClePrenom); ?>">
<?php echo affich($Ligne->CleNom); ?> <?php echo affich($Ligne->ClePrenom); ?></a></td>
  
<td><? echo affich($Ligne->Mail); ?></td>
  
<td><? echo affich($Ligne->Telephone); ?></td></tr>

<?php
}
// * * * * * * * * * * * * * * * * * * * * * * *
// * * * Pied * * * * * * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * *
?>

</table>
<p class="txtCentre"><a href="index.html">Retour menu</a></p>
</form>
</div>
</body>
</html>
<?php
// * * * * * * * * * * * * * * * * * * * * * * *
// * * * Fin * * * * * * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * * *
?>

Effectivement, j'aime bien comme ça. Malgrès la présence de deux boucles.

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#7 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 463 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 23 décembre 2013 - 22:21

Bravo Borak,

Mais plus je regarde ton code, plus je me dis que tu devrait vraiment essayer avec code igniter ;)
Allez, rejoins-nous ! :P

MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#8 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 23 décembre 2013 - 22:41

Les frameworks ne passeront pas par moi :) (ou alors bien plus tard, quand je serai plus à l'aise).

Ce message a été modifié par BorakLeRouge - 23 décembre 2013 - 22:47 .

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#9 FredoMkb

FredoMkb

    ...bosseigne...

  • Membres
  • PipPipPipPipPipPipPip
  • 2 645 Messages :
  • Configuration:iMac-SowLeopard
  • Sexe:Masculin
  • Localisation:StÉ
  • Passions:À part rien, absolument tout le reste !

Posté 24 décembre 2013 - 07:58

Mais plus je regarde ton code, plus je me dis que tu devrait vraiment essayer avec code igniter ;)
Allez, rejoins-nous ! :P


Punaise... je me suis fait exactement la même réflexion... c'est qu'on en deviendrait carrément fainéants avec la simplicité de CI... et puis, après tout, ce n'est pas plus mal, franchement ! :D

N'est pas peur Borak, ça ne change rien au plaisir de coder et de concevoir ces propres mécaniques, après une adaptation, quelque peu déroutante au début je l'avoue, à l'architecture du framework, le reste est vraiment assez simple à intégrer et, avec ton niveau en Php, ce sera même du plaisir, je t'assure... :up:

Bon, je n'ai pas d'actions chez Ellislab, d'ailleurs, ils comptent apparemment toujours refiler le bébé à une autre boîte, sauf que ça fait des mois qu'ils l'ont annoncé et que rien n'est encore fait... pendant ce temps, la version 3 continue d'avancer, dommage qu'il n'y ait pas un planning clair concernant sa sortie officielle...

Bref, il faut voir CodeIgniter (ou autre) comme une simple boîte à outils, qui te facilite la vie de développeur, en te proposant tout un tas de librairies déjà prêtes, personnalisables au besoin, on perd certes un peu en performances brutes, mais qu'est-ce qu'on gagne en confort !!! :yahoo:

Allez Borak, test-le au moins un peu, tu verras, tu changeras sûrement d'avis (comme moi d'ailleurs)...

;)
Fredo
"Un pas à la fois me suffit..." Gandhi
"Il n'y a rien de plus inutile que quelque chose d'inexistant. Il n'y a rien de plus utile que de tenter de le créer." FredoMkb

#10 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 463 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 24 décembre 2013 - 14:52

Content que Fredo ce soit familiarisé avec CI :)

l'énorme avantage de CodeIgniter sur la plupart des autres Frameworks, c'est que cela reste du PHP, rien ne t'empêches d'avoir ton code php comme tu as l'habitude de faire, au milieu du framework (très bon, pour commencer).
Par la suite, ben la documentation étant une merveille en soit, l'apprentissage n'en est que plus aisé :)

Viens Borak, vieeeeens :P

par exemple tu peux écrire un lien en html
<a href="<?php echo $mon_lien; ?>" alt="lien" title="lien">Mon lien</a>

ou utiliser la fonction toute prête qui donnerai ça :
<?php echo anchor($mon_lien, 'lien', 'Mon lien'); ?>

pour la requête SQL, dans le model, cela donnerait un truc du genre (attention, code d'exemple non testé) :
function get($search = null) {
$this->db->order_by('lastname');
$this->db->like('firstname', $search);
$q = $this->db->get('ma_table');
return $q->result();
}
cette requête est automatiquement sécurisée.

coté controller, on pourrai avoir un truc genre :
$this->data['liste'] = $this->ma_table_m->get();
$this->load->view('ma_vue', $this->data);

et dans la vue "ma_vue", on aura une boucle classique à effectuer sur notre variable "$liste" (passée par le controller), contenant nos infos.

et c'est presque tout !

À l'usage, je n'ai plus que 2 soucis avec codeigniter (si on peut dire), c'est que l'on manipule essentiellement des array(), et que j'obtiens parfois des tableaux standard, ou des tableaux d'objets, et que je me mélange assez souvent... (mais bon, c'est pas bien sorcier non plus :P )
donc soit je doit faire un truc genre
<?php echo $liste['name']; ?>
soit
<?php echo $liste->name; ?>
et parfois, les deux se retrouvent imbriqués :
<?php echo $liste['animaux']->name; ?>
mais le souci serait identique en php pur, sauf qu'avec un framework, je trouve que l'on manipule pluss de tableaux (et c'est tant mieux finalement) :)

MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#11 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 24 décembre 2013 - 14:58

Non, c'est un truc de gros feignant :)

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#12 FredoMkb

FredoMkb

    ...bosseigne...

  • Membres
  • PipPipPipPipPipPipPip
  • 2 645 Messages :
  • Configuration:iMac-SowLeopard
  • Sexe:Masculin
  • Localisation:StÉ
  • Passions:À part rien, absolument tout le reste !

Posté 24 décembre 2013 - 15:32

À l'usage, je n'ai plus que 2 soucis avec codeigniter (si on peut dire), c'est que l'on manipule essentiellement des array(), et que j'obtiens parfois des tableaux standard, ou des tableaux d'objets, et que je me mélange assez souvent... (mais bon, c'est pas bien sorcier non plus :P )


C'est vrai que, moi aussi, j'ai trouvé ça un peu "confusant" parfois, du coup, dans un premier temps j'avais décidé de tout passer en mode "array", notamment les résultats de la base de données avec les fonctions "result_array" et "row_array", puis, à l'usage, je me suis aperçu que l'écriture en mode "objet" était bien plus simple et rapide à faire, du coup, désormais je converti tous les "array" en "objets" avec une petite fonction que j'ai placé dans une librairie perso (que je "autoload" au chargement du programme) :

class Perso {
// Fonction pour retourner un tableau en objet
public function arr2obj($a, $r = null) {
foreach ($a as $k => $v) {
$r[$k] = is_array($v) ? (object) array_map(__METHOD__, $v) : $v;
}
return $r;
}

}

Puis, dans le contrôleur je fais juste un :

$data['data'] = $this->perso->arr2obj($monArray);

:)

Ce message a été modifié par FredoMkb - 24 décembre 2013 - 15:36 .

Fredo
"Un pas à la fois me suffit..." Gandhi
"Il n'y a rien de plus inutile que quelque chose d'inexistant. Il n'y a rien de plus utile que de tenter de le créer." FredoMkb

#13 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 463 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 24 décembre 2013 - 15:38

Non, c'est un truc de gros feignant :)

ouiiiii !!!!!
et alors ? :D

MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#14 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 24 décembre 2013 - 19:17

Bon, on va dire que je n'ai pas le courage :)

Sinon, les extraits que j'ai vu ne m'ont pas tenté. Mais j'aime trop le php tout court et tout brut.

En tant qu'informaticien de gestion, la base, c'est les listes et les fiches. Une fois que j'ai de bon exemple des deux, je duplique à foison...

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...





0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)