Labyz : labyrinthes à volonté !
Ça y est, mon site sur les labyrinthes est enfin sorti :
Cliquez sur le texte à gauche, et vous verrez l’image d’origine.
Cliquez sur l’image à droite, et vous verrez le labyrinthe calculé.
Ça y est, mon site sur les labyrinthes est enfin sorti :
Cliquez sur le texte à gauche, et vous verrez l’image d’origine.
Cliquez sur l’image à droite, et vous verrez le labyrinthe calculé.
Question : est-il possible d’accéder à des variables $_POST
en Javascript ?
Réponse simple et directe : non.
Pourquoi ? C’est simple : la variable POST
est quelque chose qui est envoyé par le client, pour le serveur. C’est le client qui l’envoie. Il est possible, avant d’envoyer un formulaire au serveur, de regarder est sur le point de partir. On peut le faire notamment en JavaScript, ou faire d’autres manipulations, mais on ne recevra jamais côté client des variables de formulaire dans un POST
.
Votre fichier « php.ini » n’est pas chargé au démarrage d’Apache sous Windows Vista ?
Pas de problème. C’est très simple. Éditez votre fichier Apache de configuration, habituellement httpd.conf
.
Juste avant la ligne de directive qui dit de charger le module Apache, il faut ajouter la directive PHPIniDir "C:/PHP"
qui précise où doit se situer le fichier php.ini
.
Exemple :
PHPIniDir "C:/PHP"
LoadModule php5_module "C:/PHP/php5apache2_2.dll"
Je ne vous parle pas de l’autre méthode moins efficace : lancer Notepad en tant qu’administrateur, ouvrir le fichier php.ini
puis le sauver sous le répertoire C:\Windows
(c’est le répertoire de configuration par défaut de php).
Je viens de passer plus de deux heures complètes avant de réussir ce qui me prend en temps normal, sur Linux et Windows XP, 5 minutes. Décidément, Vista est vraiment de la daube sous tous les points de vue.
C’est valable pour WordPress 2.5.1. Je ne sais pas pour les autres versions.
Lorsque vous voulez tout déplacer d’un répertoire vers un autre, et que vous ne voulez rien perdre de vos articles, c’est plutôt simple. Soit vous faites la modification avant de déplacer le répertoire, dans votre outil d’administration, soit vous… êtes dans le pétrin.
Mais plus maintenant !
Le principe est de modifier toute la configuration de votre WordPress par la nouvelle.
Voilà le cas typique : j’ai déplacé tout de :
http://olivier.pons.free.fr/wordpress/
vers :
http://olivier.pons.free.fr/
Solution : il vous faut ouvrir le fichier
wp-includes/functions.php
et aller à la fonction
wp_load_alloptions()
Juste après cette ligne :
$wpdb->suppress_errors($suppress);
vous y ajoutez l’affichage de toutes vos options :
echo "<pre style=\"text-align:left\">".var_export($alloptions_db,true)."</pre>";
Puis vous retournez sur votre blog et vous rafraichissez. Vous allez voir toute une série d’options apparaitre.
Cherchez lesquelles ont une valeur qui contient l’ancien répertoire.
Il vous faut transformer ces options sous cette forme :
$wpdb->update($wpdb->options, array( 'option_value' => 'valeur nouvelle adresse' ), array( 'option_name' => 'nom de l'option', 'autoload' => 'yes'));
et coller cela à la place de votre ligne qui affiche les variables (« echo … ») que je vous ai dit de mettre en début d’article.
Par exemple, mes deux options à appliquer étaient celles-ci :
$wpdb->update($wpdb->options, array( 'option_value' => 'http://olivier.pons.free.fr' ), array( 'option_name' => 'siteurl', 'autoload' => 'yes')); $wpdb->update($wpdb->options, array( 'option_value' => 'http://olivier.pons.free.fr' ), array( 'option_name' => 'home', 'autoload' => 'yes'));
Ensuite, vous rafraichissez votre page, et hop, tout est écrit en base de données.
Après vérification que tout fonctionne, il ne vous reste plus qu’à supprimer toutes les lignes
$wpdb->update()
qui ne servent plus à rien.
Les 5 premiers conseils viennent d’ici
Les 5 conseils suivants venaient de ce lien d’http://www.hackingajax.com/2008/02/13/5-more-ways-to-be-a-better-php-developer/ mais il est mort…
Souvent, un développeur PHP inexperimenté va sauter sur IRC et poser une question sur Freenode##php. Et si la question est facile, il aura une réponse rapidement. Au début. Parce que par la suite, il va être bombardé de réponses du style « LOL », « ROFL », « Va apprendre PHP et reviens », « Vas te documenter un minimum », « On n’est pas ton prof personnel », etc. Donc, comment devenir un meilleur développeur PHP ? Dans ce post, je vais mettre en avant cinq façons d’être un meilleur développeur, d’être plus productif, d’écrire moins de code et de faire ainsi plus de choses avec vos applications web. Il y a toujours quelque chose de nouveau à apprendre quand on parle de développement PHP. Nouvelles fonctions internes, nouveaux frameworks, nouveaux design patterns, nouveau styles de documentation. Ci-suivent quelques-unes des façons les plus efficaces pour vous aider à être un meilleur développeur PHP.
C’est toujours plus dur de lire du code que de l’écrire.(Joel Spolsky) ?
Attention, ce qui suit ne s’applique pas systématiquement partout, mais il faut avoir cela en tête dans certaines occasions.
Ci-suivent deux possibilités de codes qui font exactement la même chose : vous allez certainement me dire : le code 2 est très nettement moins bien que le code 1, à savoir que si on veut rajouter quelque chose dans le 1 c’est une ligne alors que dans le 2 c’est quatre lignes. Eh bien c’est vrai, mais il faut garder le code 2 qui est plus long et qui semble se répéter de manière inutile. Pourquoi, me demanderez-vous ? Je vais vous dire pourquoi :
Si, si, je ne plaisante pas. Si vous avec un patron qui vous dit, une bonne fois pour toutes : « Voilà les champs qu’on utilisera cela ne changera pas », et, surtout, que c’est vrai, alors vous pouvez vous faire plaisir et factoriser au maximum. A l’inverse, un patron qui arrive et qui vous dit « Voilà les champs qu’on utilisera cela ne changera pas », et, le connaissant vous savez que c’est faux, alors utilisez le code 2. Cela m’arrive tout le temps : « Au fait Olivier j’ai oublié de te dire : il y a un nouveau champ garantie qui est, en réalité un pourcentage d’une autre garantie et il faut s’assurer que l’autre existe vraiment ». Si vous avez adopté le code 1 avec ce genre de patron, vous êtes fichu : Ce code n’est pas prévu pour gérer des exceptions.
Dernier argument pour le code 2 : il est beaucoup plus compréhensible que le code 1. Beaucoup, beaucoup, beaucoup. Et si quelqu’un doit prendre le relai après vous, votre objectif en tant que professionnel, c’est de lui faciliter la tâche au maximum. Donc… vive le code 2 !
private function CreerTableauValeursGarantie($gar,$tab)
{
foreach ($tab as $fc_aff=>$tab_get) {
if ($gar->$fc_aff()) {
foreach ($tab_get as $idx=>$fc_get) {
$ret[$idx]=$gar->$fc_get();
}
}
}
}
$tab_gar[$id_g][$idp_idf] =
$this->CreerTableauValeursGarantie($gar, array(
'getAffSurmortalite' => array(
VAL_SURMORTALITE => 'getTauxSurprime2'),
'getAffSurprime1' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_1 => 'getSurprimeAddDuree1',
VAL_SURPRIME_ADDITIONNELLE_TAUX_1 => 'getSurprimeAddTaux1'),
'getAffSurprime2' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_2 => 'getSurprimeAddDuree2',
VAL_SURPRIME_ADDITIONNELLE_TAUX_2 => 'getSurprimeAddTaux2'),
'getAffSurprime3' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_3 => 'getSurprimeAddDuree3',
VAL_SURPRIME_ADDITIONNELLE_TAUX_3 => 'getSurprimeAddTaux3'),
'getAffSurprime4' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_4 => 'getSurprimeAddDuree4',
VAL_SURPRIME_ADDITIONNELLE_TAUX_4 => 'getSurprimeAddTaux4'),
'getAffSurprime5' => array(
VAL_SURPRIME_ADDITIONNELLE_DUREE_5 => 'getSurprimeAddDuree5',
VAL_SURPRIME_ADDITIONNELLE_TAUX_5 => 'getSurprimeAddTaux5'),
'getAffExclusionsPathos' => array(
VAL_GAR_EXCLUSIONSPATHOS => 'getExclusionsPathologies' ),
'getAffExclusionsSports' => array(
VAL_GAR_EXCLUSIONSSPORTS => 'getExclusionsSports' ),
'getAffExclusionsProfs' => array(
VAL_GAR_EXCLUSIONSPROFS => 'getExclusionsProfessions' ),
'getAffMensualite' => array(
VAL_GAR_MENSUALITE => 'getMensualite' ),
'getAffFranchise' => array(
VAL_GAR_FRANCHISE => 'getAffFranchise' )));
if ($gar->getAffSurmortalite()) {
$tab_gar[$id_g][$idp_idf][VAL_SURMORTALITE ] =
$gar->getTauxSurprime2();
}
if ($gar->getAffSurprime1()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_1 ] =
$gar->getSurprimeAddDuree1();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_1 ] =
$gar->getSurprimeAddTaux1();
}
if ($gar->getAffSurprime2()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_2 ] =
$gar->getSurprimeAddDuree2();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_2 ] =
$gar->getSurprimeAddTaux2();
}
if ($gar->getAffSurprime3()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_3 ] =
$gar->getSurprimeAddDuree3();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_3 ] =
$gar->getSurprimeAddTaux3();
}
if ($gar->getAffSurprime4()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_4 ] =
$gar->getSurprimeAddDuree4();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_4 ] =
$gar->getSurprimeAddTaux4();
}
if ($gar->getAffSurprime5()) {
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_DUREE_5 ] =
$gar->getSurprimeAddDuree5();
$tab_gar[$id_g][$idp_idf][VAL_SURPRIME_ADDITIONNELLE_TAUX_5 ] =
$gar->getSurprimeAddTaux5();
}
if ($gar->getAffExclusionsPathos()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_EXCLUSIONSPATHOS ] =
$gar_cm->getExclusionsPathologies();
}
if ($gar->getAffExclusionsSports()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_EXCLUSIONSSPORTS ] =
$gar_cm->getExclusionsSports();
}
if ($gar->getAffExclusionsProfs()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_EXCLUSIONSPROFS ] =
$gar_cm->getExclusionsProfessions();
}
if ($gar->getAffMensualite()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_MENSUALITE ] =
$gar_cm->getMensualite();
}
if ($gar->getAffFranchise()) {
$tab_gar[$id_g][$idp_idf][VAL_GAR_FRANCHISE ] =
$gar_cm->getAffFranchise();
}
Si, dans le fichier php.ini
, vous enlevez le commentaire pour php_exif.dll
, afin d’activer cette extension, vous avez une chance sur deux d’avoir une violation d’accès… Pas très encourageant, hein ? La solution ? il faut impérativement activer, donc décommenter, php_mbstring.dll
. Ce n’est pas tout !
Attention, php_exif.dll
doit être chargé après php_mbstring.dll
extension=php_mbstring.dll
extension=php_exif.dll
Json
est une extension pour JavaScript
et php
.
Ajout de l’extension Json
: il faut aller la récupérer sur le site du créateur (http://aurore.net/
), la compiler (make
), l’installer (make install
), et ensuite, ce qui n’est pas précisé (sauf ici), aller voir dans le fichier php.ini
qui est très souvent dans /etc
, où se situe le répertoire des extensions extension_dir
, c’est sûrement, ici aussi, extension_dir = "/usr/lib"
.
Il suffit alors de copier le fichier json.so
généré dans le répertoire des extensions, ici /usr/lib
.
Rien de plus simple !
Résumé très rapide (il faut faire quelques manips en plus, mais le plus important est là) :
wget http://aurore.net/projects/php-json/php-json-ext-1.2.1.tar.bz2
tar -xvf php-json-ext-1.2.1.tar.bz2
cd php-json-ext-1.2.1/
./configure ; make ; make install
cp /usr/local/lib/php/extensions/no-debug-non-zts-20050922/json.so /usr/lib
Comment se passe le paiement fait via la Société Générale ?
On doit appeler un CGI qui s’appelle REQUEST
auquel on passe en paramètre le n° de la transaction, le montant, etc.
Ce REQUEST
va générer un code html qu’on va afficher (le code qui affiche les 3 cartes, etc, pour que le client puisse choisir).
Ensuite, le client clique sur une des cartes, et est redirigé.
Il arrive sur la banque.
Il paie, et une fois qu’il a payé, le serveur de la banque appelle autoresponse.php
en passant en paramètres des infos précisant si le paiement a été effectué.
NB : le client ne voit absolument rien.
Ensuite, le client va cliquer sur le bouton Retour à la boutique
.
autoresponse.php
est appelée (c’est-à-dire qu’on a les mêmes paramètres envoyés par la banque) et à ce moment là on peut faire ce qu’on veut (afficher ‘Merci pour votre paiement’ ou afficher ‘le paiement a été refusé’, etc).