Gerer facilement vos requetes d’insertion depuis un formulaire
Dans ce premier article, je vais aborder un petit tuto qui permet de gagner par mal de temps quand on développe en php, notament au niveau la gestion des formulaire.
La premiere astuce concerne a passé les variables dans un tableau. Pour ce faire dans le champ name de vos formulaires new[titre], new[contenu]
exemple :
1 2 3 4 5 | <form method="post" action=""> <label>Titre :</label> <input type="text" name="new[titre]" /> <label>Contenu :</label> <input type="text" name="new[contenu]" /> <input type="submit" name="send" value="Enregistrer" /> </form> |
Maintenant nous allons voir comment recuperer les codes et créer une requete d’insertion ou d’update facilement sans avoir a ce ecrire tous les champs. Ils faut que les champs de votre formulaire est le même nom que le champ dans votre base de données.
1 2 3 4 5 6 7 8 | <?php $new = $_POST['new']; // Traitement et verifation de votre new include = 'functions_query.php'; mysql_query(CreateQueryInsert($new, ma_table_de_news)); ?> |
Le fichier functions_query.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php /* * Genere une requete INSERT */ function CreateQueryInsert($array, $table){ $ChampDB = ''; $ValeurChamp = ''; foreach($array as $key => $value){ if($ChampDB == '') $ChampDB .= '`'.$key.'`'; else $ChampDB .= ',`'.$key.'`'; if($ValeurChamp == '') $ValeurChamp .= ' '. $value .' '; else $ValeurChamp .= ','. $value .''; } return 'INSERT INTO '. $table .' ('. $ChampDB .') VALUES ('. $ValeurChamp .')'; } /* * Genere une requete UPDATE * @param mixed $array * @param string $table * @param string $condition exemple : id = MyId AND cond2 = 'MyCondition' */ function CreateQueryUpdate($array, $table, $conditions = ''){ global $db; $ChampDB = ''; $ValeurChamp = ''; foreach($array as $key => $value){ if($ChampDB == '') $ChampDB .= '`'.$key .'` = '. $value .' '; else $ChampDB .= ',' . $key .' = '. $value .' '; } return "UPDATE ". $table ." SET ". $ChampDB ." WHERE ". $conditions ; } ?> |
J’ai codé ces fonctions car j’en avais marre d’écrire les requêtes, et de plus de cette manière vous évitez les erreurs et gagner pas mal de temps.
Dans un prochaine article, je vous donnerai la nouvelle class j’utilise pour la création de requête et l’utilisation de PDO
Cette fonction peut être améliorer en créant des requêtes préparées et/ou en protégeant les données
Avancement de vashark
Le site a été mise a jour (http://va.sharkphp.com). Vous pouvez testé vous meme les fonctionnalités en vous créant un compte ou en utilisant le compte de démo : demo/demodemo.
Les fichiers de configuration sont disponibles dans votre profil. Actuellement seul fspassenger et flightkeeper sont disponible.
Nouveau projet SharkVa
Bonjour,
Un petit article vous présenter un nouveau projet : SharkVa.
SharkVa est CMS pour les virtual airlines leur permettant de créer leur site. SharkVa utilise le framework maison, que j’ai retravaillé pour ce CMS et qui sera ensuite repris pour sharkphp et immophp.
Actuellement sharkva prend déjà an charge l’envoie de pirep depuis :
- fspassenger
- FlightKeeper
Le live Acards de flightkeeper est également pris en charge à fin de suivre les vols en cours.
C’est actuellement les deux seuls logiciel que j’ai a disposition, si des personnes souhaitent la prise en charge d’autre logiciel, contacter moi à fin qui je codes le service.
Clause LIMIT sur Mysql

Un petit article sur la clause limit de mysql.
Pourquoi parler de cette clause, simplement si un jour vous souhaitez changer de SGBDR, il peut être pratique d’utiliser dès le départ les bonne syntaxe.
MySql autorise l’ecriture de cette clause de cette façon :
SELECT c1, c2 FROM ma_table WHERE 1=1 LIMIT 0,10
ce qui vous retournera les 10 premiers enregistrements dans votre table. Le soucis avec cette syntaxe c’est qu’elle ne va pas marché avec postgreSQL et autre SGBDR
Pour corriger ce problème on peut utiliser la mot clé OFFSET. Maintenant la même requête, mais qui sera « compatible » avec plus de SGBDR
SELECT c1, c2 FROM ma_table WHERE 1=1 LIMIT 10 OFFSET 0
Cette requête est identique a la première mais va fonctionner sous postgreSQL
Ce qui est dommage c’est que malgré les normes SQL qui existe, chaque SGBDR a plus ou moins ça propre syntaxe qui empêche une portabilité total du code.
Une des solutions pour éviter ce problème est l’utilisation d’ORM de type doctrine. Le soucis avec cette solution et l’apprentissage de l’ORM et un autre qui moindre mais qui reste tout de même de taille sont les performances.
Quelques liens sur les performances orm, pdo, mysql_* :
http://www.incapable.fr/conseil-mysql-19
http://vincent-lecomte.blogspot.com/2011/01/web-php-zend-benchmark-pdo-vs-doctrine.html