8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un problème sur mon forum avec sprintf(). J'ai essayer énormément de choses, et j'ai toujours le mémé problème. Je ne pense pas que ça vienne de la requête en elle même, mais plutot de la page connexion.php

Voici l'erreur:

a écrit :
Warning: sprintf() [function.sprintf]: Too few arguments in /home/httpd/m/i/c/mick/www.rpgillusion.net/forum/includes/connexion.php on line 32


Le problème se situe dans cette page (connexion.php) :

<?
class mysql
{

	var      $host    =    "..."; // Serveur SQL
	var      $user    =    "...";              // Login pour le serveur SQL
	var      $pass    =    "...";           // Mot de passe pour le serveur SQL
	var      $bdd     =    "...";          // Nom de vôtre Base De Données


	function connect()
	{
		@mysql_connect($this->host,$this->user,$this->pass) or die("Erreur de connexion au serveur SQL");
		@mysql_select_db($this->bdd) or die("Impossible de se connecter à la base de données");

		$this->host = "";$this->user = "";$this->pass = "";

	}

	
   function query_sprintf($query)
	{	

		$mysql = sprintf($query);
		
	return($mysql);
}

}
?>


La ligne 32 correspond à cette ligne : $mysql = sprintf($query);

Concernant mes requêtes elle fonctionnent comme ceci :

include("includes/connexion.php");
$mysql = new mysql();
$mysql->connect();

$mysql->query_sprintf("INSERT INTO ".$mysql->pref."_discussions
						(message, pseudo, titre, date, forum_id, message_id, mb_id, ip)
				VALUES('%s', '%s', '%s', '%s', '%d', '%d', '".$session['id']."', '".$_SERVER['REMOTE_ADDR']."')",
 				mysql_real_escape_string($content),
                mysql_real_escape_string($_POST['pseudo']),
				mysql_real_escape_string($titre),
				mysql_real_escape_string($date),
				mysql_real_escape_string($frm),
				mysql_real_escape_string($id));


Peut - être quelqu'un pourra me dire d'où vient le problème.

Merci d'avance
hum tu passes tes variables sans les nommées dans ta fonction query_sprintf.

du coup query_sprint accepte que tu envoies plus d'arguments a ta fonction (
PHP est assez coulant )

mais ne les repasses pas la fonction sprintf a qui tu n'as passé que la chaine de caracteres.


franchement j'essai de te proposer une façon de faire peut-etre en construisant une chaine avec un tableau et le nombre d'arguments puis en utilisant dessus la fct eval peut-etre.

un peu comme avec argv et argc quand tu choppes les arguments d'un script en CLI.

a mon avis tu n'as qu'a utiliser la fonction sprintf directement.

l'interêt de la programmation objet déjà ca se discute.

celui de réécrire en methode de classe les fonctions natives de php encore plus.
Modifié par CPascal (17 May 2009 - 13:12)
salut

a écrit :
PHP est assez coulant


faux! c'est plutôt le codeur le problème Smiley cligne la plupart ne touche à leur fichier ini que pour activer les extensions et pour...supprimer les warnings et notices.c'est pas le cas içi, ok mais php 5 en configuration strict est loin d'être coulant. cqfd.

j'ai testé avec :


class mysql
{

	var      $host    =    "localhost"; // Serveur SQL
	var      $user    =    "root";              // Login pour le serveur SQL
	var      $pass    =    "";           // Mot de passe pour le serveur SQL
	var      $bdd     =    "";          // Nom de vôtre Base De Données


	function __construct()
	{
		@mysql_connect($this->host,$this->user,$this->pass) or die("Erreur de connexion au serveur SQL");
		@mysql_select_db($this->bdd) or die("Impossible de se connecter à la base de données");
		// ne sert à rien
		//$this->host = ""; $this->user = ""; $this->pass = "";

	}

	
   function query_sprintf($query)
	{	

		$mysql = sprintf($query);
		
	return($mysql);
}

}

$content = 'message de test du forum';
$titre = 'message 1';
$date = date("d-m-Y");
$frm = 4452;
$id = 22;

//include("includes/connexion.php");
$mysql = new mysql();
//$mysql->connect();
$req = mysql_query(sprintf("INSERT INTO discussions
						(message, pseudo, titre, date, forum_id, message_id, mb_id, ip)
				VALUES('%s', '%s', '%s', '%s', '%d', '%d', '23', '120.23.63.33')",
 				mysql_real_escape_string($content),
                mysql_real_escape_string('toto'),
				mysql_real_escape_string($titre),
				mysql_real_escape_string($date),
				mysql_real_escape_string($frm),
				mysql_real_escape_string($id)));


j'ai testé avec le code ci-dessus çà fonctionne.query_sprintf attend un argument mais pas sprintf...cette fonction est inutile et
fait travailler le serveur pour rien puisque sprinf est déjà une fonction.pourquoi faire simple quand on peut faire autrement? Smiley cligne
Modifié par keran (18 May 2009 - 15:01)