Comment utiliser MySql dans un programme C

Pour utiliser une base de données MySql dans un programme écrit en C il faut utiliser le header « mysql.h ».

A priori ce n’est pas bien difficile, il y a juste à rajouter la ligne #include <mysql.h> au début de votre programme. Cela devient un peu plus difficile par contre quand votre compilateur vous dit que la librairie mysql.h n’est pas présente dans votre système…

Pour résoudre ce problème, il faut installer le paquet libmysqlclientXX-dev:

sudo apt-get install libmysqlclient16-dev

Une fois ce paquet installé (et que mysql.h est bien appelé dans votre programme) il suffit de compiler avec la commande suivante:

gcc programme.c `mysql_config --cflags --libs`

Voici maintenant comment exécuter des requêtes dans votre programme:

//premièrement, on initialise la connexion
char *server = "localhost";
char *user = "dbuser";
char *password = "dbpsw";
char *database = "dbname";
MYSQL *conn;

conn = mysql_init(NULL);
mysql_real_connect(conn, server,user, password, database, 0, NULL, 0);

//exemple de SELECT
MYSQL_RES *res;
MYSQL_ROW row;
mysql_query(conn, "SELECT * FROM example_table");
res = mysql_use_result(conn);
while ((row = mysql_fetch_row(res)) != NULL){
//on accède aux valeurs avec row[0], row[1] ...
}

//exemple avec INSERT
char* column1 = "test";
char* column2 = 123;
char temp[512];
sprintf(temp, "INSERT INTO example_table (column1,column2) VALUES ('%s','%i');",column1,column2);
mysql_query(conn, temp);

//On oubli pas de fermer la connexion:
mysql_close(conn); 

Bonne chance!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

file_get_contents : gestion des erreurs

Je sais pas si vous avez déjà essayé d’entourer la fonction file_get_contents($url) avec un try catch pour gérer les erreurs si l’url est incorrecte.
Moi j’ai essayé et ca ne marche pas..
La petite astuce pour empêcher d’afficher les erreurs/warnings éventuels c’est de rajouter un arobase devant la fonction:

<?php
  $content = @file_get_contents($url);
  //on test ensuite la valeur de $content
  if ($content== false) { 
   //Gestion des erreurs
  }
?>

De cette manière, les erreurs/warnings ne sont pas affichés à l’écran de l’utilisateur.

Une réflexion au sujet de « file_get_contents : gestion des erreurs »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Drupal – Comment récupérer les données d’un webform après soumission

Webform est un module Drupal très performant et complet qui permet de créer des formulaires. Le seul hic c’est que la landing page, la page de remerciements qui est affichée après la soumission d’un formulaire, n’est pas très configurable et ne permet pas d’afficher les données du formulaire fraîchement soumis.

Pour récupérer ces données et les afficher il faut modifier le fichier normalement situé dans /modules/webform/templates/webform-confirmation.tpl.php .

Dans cette page, les variables $node et $sid sont accessibles, on va les utiliser pour récupérer les données du formulaire:

<?php

include_once(drupal_get_path('module', 'webform') .'/includes/webform.submissions.inc');//ne pas oublier cette ligne.

//on utilise $node->nid (l'id du formulaire) et $sid (l'id de la soumission) pour récupérer les données.
$submission = webform_get_submission($node->nid, $sid);

//on boucle sur les différents champs du formulaire.
//(vous pouvez aussi faire un print_r($submission->data) pour identifier les différents champs que vous voulez récupérer.
foreach($submission->data as $data)
{
  echo $data['value'][0];
}

?>

5 réflexions au sujet de « Drupal – Comment récupérer les données d’un webform après soumission »

  1. Bonjour,

    Merci, pour cette astuce mais je voudrais pouvoir recuperer pour l’afficher l’id de la soumission mais pas l’id du formulaire.
    quelle page je peux modifier?
    j’ai testé token mais je ne trouve pas celui qu’il faut ?

    Merci,

    gaël

    • Gaël, je ne fais que reprendre le texte contenu dans l’astuce :
      //on utilise $node->nid (l’id du formulaire) et $sid (l’id de la soumission) pour récupérer les données.
      $submission = webform_get_submission($node->nid, $sid);

      Si tu regarde d’un peu plus près tu pourras y lire le commentaire : $sid (l’id de la soumission) pour récupérer les données. Je pense que cela répond grandement à ta question 😀

      Les gars, il serait bien de prendre le temps de regarder ce que l’auteur du code (qui s’est cassé la tête pour vous pondre une solution) vous affiche dans son code. En principe on comme par apprendre à marcher avant de vouloir courir … alors lisez avant de poster des questions !!!!!

  2. J’utilise des Webforms mais je n’arrive pas à trouver le moyen de générer des csv à chaque soumission correspondant au formulaire pour les envoyer dans le SI. Des pièces jointes sont également utilisées.
    Faire une fonction utilisant webform_results_export() est surement la solution ?

  3. Merci, c’est parfait. Pour ma part, ne voulant pas toucher au tpl du module, je l’ai fait sur un tpl d’une page vue de mon thème, puis une redirection en fin de formulaire en faisant passer en GET le $nid et $sid (tokens).
    Je n’ai pas eu besoin de la boucle foreach, j’ai tout visé avec $submission->data[‘value][0] .

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment lire une vidéo depuis l’api de Subsonic

Petit rappel pour ceux qui ne connaissent pas, Subsonic est un clone de Deezer qui permet, une fois installé sur votre serveur, de lire des musiques et aussi des vidéos depuis une interface web.

Pour moi, utiliser l’api de Subsonic pour lire des vidéos en Streaming a été un peu compliqué. Je voulais simplement lire le flux renvoyé par Subsonic quand on appel la méthode http://your-server/rest/stream.view mais la documentation à ce sujet est quasi inexistante…

Voici donc une petite démo pour parvenir à lire ce flux.

Fichier HTML ou va être placé le lecteur. N’oubliez pas de changer la valeur des variables par les vôtres!

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<script type="text/javascript" src="/subsonic_api/script/swfobject.js"></script>
		<script type="text/javascript" src="/subsonic_api/script/prototype.js"></script>
		<script type="text/javascript" src="/subsonic_api/script/subsonic.js"></script>
		<script type="text/javascript" language="javascript">
			var subsonicServer ="http://yourserver";
			var videoid="subsonic file id";
			var subsonicUsr ="subsonic_usr"
			var subsonicPsw = "subsonic_password";
			var player;
			var position;
			var maxBitRate = 1000;
			var timeOffset = 0;
		</script>

	</head>

	<body onload="init();">
		<div>

			<div id="placeholder1"><span class="warning"><a href="http://www.adobe.com/go/
getflashplayer">Obtenir Flash player</a></span></div>
		</div>
	</body>
</html>

Pour le reste je vous laisse télécharger ce fichier zip qui contient tout les éléments nécessaires à la lecture de la vidéo. Pour cela rendez-vous ici: subsonic_api_demo.

Référez-vous à la documentation de l’api Subsonic pour récupérer l’id de la vidéo et sa longueur.

Dernière info sur les méthodes changeTimeOffset() et changeBitrate() présentes dans le fichier subsonic.js: elles permettent respectivement de changer la position dans la vidéo et de changer la qualité de celle-ci. Elles sont donc très utiles 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Zend framework – Configurer la gestion des erreurs

Voici un petit tutoriel pour créer un contrôleur de gestion des erreurs dans Zend. La mise en place de ce contrôleur permet de rediriger les utilisateurs vers une page spécifique en fonction de l’erreur rencontrée.

Premièrement modifiez le fichier bootstrap.php et ajoutez-y la ligne suivante:

<?php
...
ini_set('display_errors', 1);
... ?>

Cela permet de définir s’il faut afficher le détail des erreurs ou non.

Créez ensuite le fichier ErrorController.php dans le dossier controllers de votre projet Zend avec le contenu suivant:

<?php

class ErrorController extends Zend_Controller_Action
{
    public function init()
    {

    }
	
    public function errorAction()
    {
        //récupération des erreurs
	    $errors = $this->_getParam('error_handler');
        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // erreur 404 -- contrôleur ou action introuvable
                // redirection vers error404Action
				$this->_forward('error404');
				
                break;
            default:	
				//ereur 500 -- Internal server error
                // redirection vers error500Action avec le détail de l'erreur
				$this->_forward('error500',null,null,array('exception'=>$errors->exception));
                break;
        }

    }
	
    public function error404Action()
    {
        //Ne pas oublier de créer le fichier error404.phtml dans votre projet.
	    $this->getResponse()->setRawHeader('HTTP/1.1 404 Not Found');
	    $this->view->message= "erreur 404 page introuvable";
    }
	
    public function error500Action()
    {
        //Ne pas oublier de créer le fichier error500.phtml dans votre projet.
	    $exception = $this->_getParam('exception');
        //Envoi le détail de l'erreur dans la vue si le paramètre display_errors a été mis a true
	    if(ini_get('display_errors')){
		    //Récupération des informations de l'erreur et envoi vers la vue.
		    $this->view->message = $exception->getMessage();
		    $this->view->trace = $exception->getTraceAsString();
	    }
		//Log du detail de l'erreur dans un fichier	
		$log =
			new Zend_Log(
				new Zend_Log_Writer_Stream(
					'../log/errors.log')
			);
		$log->debug($exception->getMessage()
				  . "\n"
				  . $exception->getTraceAsString());
		
	}
}

?>

Voila, l’application est prête à rediriger vos utilisateurs. N’oubliez pas de changer le paramètre display_errors lors de la mise en production ;).

Une réflexion au sujet de « Zend framework – Configurer la gestion des erreurs »

  1. C’est trop cool, ça m’a baucoup aider. Moi j’ai configurer le log dans le boostrap comme suite :
    $writer = new Zend_Log_Writer_Stream(APPLICATION_PATH.$config->logfile);
    // dans application.ini j’ai une ligne [production]: logfile = /logs/log.log
    $log = new Zend_Log($writer);
    Zend_Registry::set(‘log’, $log);

    dans le fichier ErrorController et partout où j’ai besoin du log je recupère : $log=Zend_Registry::get(‘log’);

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *