Diary, artworks and codes
October 20th, 2009

Database connection problem with 1&1 and CakePHP

I recently had to install, for one of my customer, a web application developed using cakePHP. The server was a dedicated from 1&1.

After I filled my database configuration file correctly, the following error occurred :
Warning (2): mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/tmp/mysql5.sock:’ (2) [CORE/cake/libs/model/datasources/dbo/dbo_mysql.php, line 378]
After half an hour banging my head off keyboard, I figured out one thing important : the connexion is persistent…
So you’ll have to edit your app/config/database.php as follow :

class DATABASE_CONFIG {

	var $default = array(
		'driver' => 'mysql',
		'persistent' => true,
		'host' => 'localhost:/tmp/mysql5.sock',
		'login' => 'dboxxxxxxxxx',
		'password' => 'your_password',
		'database' => 'dbxxxxxxxxx',
		'prefix' => '',
	);

	var $test = array(
		'driver' => 'mysql',
		'persistent' => false,
		'host' => 'localhost',
		'login' => 'user',
		'password' => 'password',
		'database' => 'test_database_name',
		'prefix' => '',
	);
}

Upload those modifications and save your day.

Bookmark and Share
by Raphael Leray | Posted in Coding, Uncategorized | No Comments » |
July 22nd, 2009

Interactions BD avec MadeSimple

Si vous êtes amené à travailler à l’écriture d’un module ou bien d’une customisation au moyen des UDT (User Defined Tag), vous serez sans doute interressé par la présentation des quelques fonctions suivantes qui vous familiariseront avec les opérations de base entre votre BD et l’API MadeSimple.

Avant toute chose si vous êtes dans le cas d’une création d’UDT n’oubliez pas de mettre dans votre fonction :

  global $gCms;

Créez l’objet qui pointera vers votre base de donnée :

  $db =& $gCms->GetDB();

A partir de là vous effectuerez toutes vos requêtes SQL à l’aide de l’objet $db. L’API MadeSimple est en fait basé sur l’abstraction de base de donnée ADObd, dont voici les principales méthodes :

  $res = $db->Execute($sql);

Tout les types de requêtes (SELECT, INSERT, UPDATE etc) pourront être effectuées avec la méthode Execute(), cette fonction renvoie en résultat un objet possédant plusieurs méthodes de traitement des données qui s’avèrent fort pratiques :

La fonction RecordCount() vous renvoie le nombre de résultats.

$nb = $res->RecordCount();

Pour ranger les résultats de votre requète dans un tableau, vous procéderez ainsi :

$result = array();
while($res && $line = $res->FetchRow()){
  $result[] = $line;
}

Et enfin nous terminons par une méthode importante puisqu’elle permet d’échapper automatiquement vos variables et rend ainsi toutes attaques pirates par injection SQL impossibles, la méthode qstr() (quoted string).

$res = $db->Execute("SELECT * FROM auth WHERE login=".
 $db->qstr($login)." AND password=".$db->qstr($password));

Ici la fonction qstr permet donc d’échapper les variables login et password.

C’est tout pout le moment, je vous invite à poursuivre votre découverte de ADOdb avec la documentation officielle de cette bibliothèque : http://phplens.com/lens/adodb/docs-adodb.htm

Bookmark and Share
by Raphael Leray | Posted in Coding | No Comments » |
July 20th, 2009

Récupérer vos variables GET en javascript

Une fonction bien pratique qui permet de récupérer les variables GET en javascript :

 function getVar(name)
         {
         get_string = document.location.search;
         return_value = '';

         do { //cette boucle va capturer toutes les instances des variables GET.
            name_index = get_string.indexOf(name + '=');

            if(name_index != -1)
              {
              get_string = get_string.substr(name_index + name.length + 1, get_string.length - name_index);

              end_of_value = get_string.indexOf('&');
              if(end_of_value != -1)
                value = get_string.substr(0, end_of_value);
              else
                value = get_string;                

              if(return_value == '' || value == '')
                 return_value += value;
              else
                 return_value += ', ' + value;
              }
            } while(name_index != -1)

         space = return_value.indexOf('+');
         while(space != -1)
              {
              return_value = return_value.substr(0, space) + ' ' +
              return_value.substr(space + 1, return_value.length);

              space = return_value.indexOf('+');
              }

         return(return_value);
         }
Bookmark and Share
by Raphael Leray | Posted in Coding | No Comments » |
July 19th, 2009

Le tri alphabétique en php

Il arrive parfois de devoir mettre automatiquement dans l’ordre alphabétique les élements d’un tableau, pour cela inutile de se lancer dans la mise en place d’un algorithme du type tri à bulle/rapide ou autre, il existe en effet la fonction usort en php, cette dernière accepte en premier argument votre tableau à trier, et en deuxième une fonction de comparaison (existante ou de votre cru), dans notre cas nous utiliserons la fonction strcasecmp qui permet une comparaison insensible à la casse de chaînes binaires.

// Le tableau :
$tab = array('arbitre', 'Zoo','koala','glop','Alcool');
usort($tab, "strcasecmp");    // Pas d'affectation de variable !

//Resultat :
/* array(
 *            0=>'Alcool',
 *            1=>'arbitre',
 *            2=>'glop',
 *            3=>'koala',
 *            4=>'Zoo'
 *          );
 */

Attention usort renvoie un booléen, évitez donc d’écrire :

$tab = usort($tab, "strcasecmp");
Bookmark and Share
by Raphael Leray | Posted in Coding | No Comments » |
June 27th, 2009

CSS down après update du htaccess

Je poste ici la solution à une galère potentiellement fréquente lorsqu’on monte son site avec wordpress,
qui est néanmoins un fabuleux cms.

Situation : vous venez de modifier votre .htaccess pour faire pointer votre url sur le dossier de votre site
wordpress et là… patatra! Un affreux site sans feuille de style remplace votre chef d’oeuvre, mais pas de panique…

Vous allez sereinement vous connecter à mysql (via phpmyadmin ou en console selon votre configuration) et taper puis executer cette petite routine SQL qui va gentillement mettre à jour votre nouvelle url.


UPDATE `[prefix]_options` SET `option_value` = '[new_url]' WHERE `option_id` =2 AND `blog_id` =0 AND CONVERT( `option_name` USING utf8 ) = 'siteurl' LIMIT 1 ;

[prefix] correspond donc bien sûr au préfixe des tables de votre Base de donnée, pour [new_url] je vais éviter l’affront. Evidemment après cela n’oubliez pas d’aller également dans “general setting” pour mettre votre nouvelle url.

Bookmark and Share
by Raphael Leray | Posted in Coding | No Comments » |