probleme de requete

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme de requete

par Invité » 17 mars 2008, 09:09

bon finalement j'y suis, j'ai fait deux fichier xml ...
Merci pour ta pédagogie

par Sékiltoyai » 17 mars 2008, 01:24

Tu te compliques un peu la vie si tu le fais en xml, c'est de loin plus simple dans une base mysql. En plus, tes problèmes étaient réglés…

par Invité » 16 mars 2008, 23:32

J'ai opté pour un autre fichier xml.
Seulement j'ai un souci pour effectuer une bonne requete :

1 SCIENCEMAN SCIEEMAN salut coui PROFECTRON 0
2 SCIENCEMAN PROFECTRON azerty salut couc 0
3 SCIENCEMAN PROFECTRON aide pourquoi t'es pas venu ? 0
4 SCIENCEMAN PROFECTRON test avata test avatar 0
Comment afficher uniquement les messages envoyé par Profectron pour Scienceman ?

par Invité » 16 mars 2008, 22:11

Sinon pour continuer sur la réalisation de la messagerie, comment toi tu ferais ? placerais tu le contenu des messages dans le même xml ?

par Invité » 16 mars 2008, 19:49

oulala ... je crois que j'ai de la m.......dans les yeux.
Un énorme merci à toi.
Sinon tu as donné une piste pour éviter les injections; je me suis pressé de voir cela mais je vois pas trop comment l'adapter au code.
Si peux me guider un peu ?

par Sékiltoyai » 16 mars 2008, 12:20

Euh, pour ton problème de 'table8', si tu lui écris "… table8 …", pourquoi devrait-il comprendre "…" . $table8 . "…" ? …

par Invité » 16 mars 2008, 12:05

Merci pour ton éclairage. J'apprends...
Sinon pour répondre au problème de table8 :
j'ai en tête du fichier qui contient le code du poste précédent :
if (!file_exists('../myPROFECTRONphp/myPROFECTRONconf.inc.php')) 
{	 
echo 'Le fichier myPROFECTRONconf.inc.php manque à l\'appel !';  
} 
else {
	 
require('../myPROFECTRONphp/myPROFECTRONconf.inc.php');

}
dans le myPROFECTRONconf.inc.php, j'ai placé toutes les caractéristiques de connexion à la base de données et le nom des tables utilisées par le site.
<?php
   header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");   
   header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
   header("Cache-Control: no-store, no-cache, must-revalidate"); 
   header("Cache-Control: post-check=0, pre-check=0", false);
   header("Pragma: no-cache");                         
   error_reporting(E_ALL);
   $adress = 'http://www.site.com/fichier.php?';
   $adressite = 'http://www.site.com';
   $adressmail='[email protected]';
   $host = '';
   $dbuser = '';
   $dbpass = '';
   $dbname = '';
   $table = 'membre_pr';
   $table2 = 'membre_df';
   $table3 = 'journal';
   $table4 = 'membre_vote';
   $table5 ='membre_newsletter';
   $table6 ='membre_online';
   $table7 ='site_vote';
   $table8 ='membre_mail';
   $semaine = 7;	// nombre de jours que sont conservées les IP dans la base de données (défaut : 2 jours)
   $mois = 1;	// intervalle de temps en minutes pour compter le nombre de connectés des X dernières minutes (défaut : 2 minutes)
   $periode = 2;	// durée en heures pendant laquelle une IP est comptée comme unique (défaut : 24h)
   $total_initial = 0;	// nombre initial de visiteurs au compteur
   $db = @mysql_connect($host,$dbuser,$dbpass) or die("error=Impossible de se connecter à $host");
   $db = mysql_select_db($dbname);
   if(!$db)
   {
      print "error=Impossible de se connecter à la table $dbname";
      exit;
   }
?>

par Hubert Roksor » 16 mars 2008, 11:53

Je ne sais pas quel est le problème avec ton "table8" (d'autant plus que ni $table8 ni $db ne sont utilisés) mais il y a d'autres choses que tu devrait changer.

Tu as posté dans le forum PHP5, donc je présume que tu utilises PHP 5. Pourtant, tu n'utilises que des fonctions de PHP 3. PHP 5 possède SimpleXML, qui est le meilleur moyen de créer un document XML. Il offre aussi le support des exceptions, plutôt que d'utiliser des valeurs de retour douteuses. Je te laisse consulter le manuel pour en savoir plus.
<?php
function onlineMess($pseudo)
{
	global $db;
	$pseudo = trim($pseudo);

	$sql = "  SELECT membrePseudoEnv, COUNT(membreMessage) AS cnt
			    FROM membre_mail
			   WHERE membrePseudoRec = '" . $pseudo . "'
			GROUP BY membrePseudoEnv";

	$result = mysql_query($sql, $db);

	if (!$result)
	{
		throw new Exception('Erreur SQL: ' . mysql_error($db));
	}

	$row = mysql_fetch_assoc($result);
	if (!$row)
	{
		throw new Exception('Aucun enregistrement');
	}

	$online = simplexml_load_string('<?xml version="1.0" encoding="ISO-8859-1"?><online />');
	do
	{
		$personne = $online->addChild('personne');

		$personne['pseudo'] = $row['membrePseudoEnv'];
		$personne['nombre'] = $row['cnt'];
	}
	while ($row = mysql_fetch_assoc($result));

	$online->asXML('myPROFECTRONonlineShowMess.xml');
}
De plus, cette fonction est vulnérable à l'injection de SQL et devrait utiliser mysql_real_escape_string.

par Invité » 16 mars 2008, 11:07

J'y suis presque mais je peux pas utiliser table8 mais son nom. Pourquoi ?
function onlineMess($pseudo)  
{  
  GLOBAL $db,$table8;   
  $pseudo = trim($pseudo);  
  $query = mysql_query("SELECT  membrePseudoEnv, COUNT(membreMessage) FROM membre_mail WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv"); 
  $result = ($query) or die(mysql_error());
  
if ( mysql_num_rows($query))
{
 
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<online>';
		while ($row = mysql_fetch_array($query)) {
			$xml .= '<personne';   
            $xml .= ' pseudo='.'"'.$row['membrePseudoEnv'].'"';   
            $xml .= ' nombre='.'"'.$row['COUNT(membreMessage)'].'"';   
            $xml .= '/>';   
		}
		$xml .= '</online>';
		
		$fp = fopen("myPROFECTRONonlineShowMess.xml", 'w+');
		fputs($fp, $xml);
		fclose($fp);
		return "error=ok";}
else 
{ 
return "error=pasok";
}
}  

par Invité » 16 mars 2008, 10:49

si je remplace le nom de la table8 par son nom alors en sortie j'ai :
function onlineMess($pseudo)  
{  
  GLOBAL $db,$table8;   
  $pseudo = trim($pseudo);  
  $query = mysql_query("SELECT  membrePseudoEnv, COUNT(membreMessage) FROM membre_mail WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv"); 
  $result = ($query) or die(mysql_error());
  while($row = mysql_fetch_array($result)){
var_dump($row['COUNT(membreMessage)']);
var_dump($row['membrePseudoEnv']);
}
} 
string(1) "2" string(10) "PROFECTRON" string(1) "1" string(8) "SCIEEMAN"

je ne comprends pas car le nom de ma table8 est dans un fichier qui regroupe tous les noms des tables.

par Invité » 16 mars 2008, 10:36

Bon j'ai absolument besoin d'y parvenir...
j'ai tout modifier pour comprendre ce qu'il se passe :
j'ai fait ceci :
function onlineMess($pseudo)  
{  
  GLOBAL $db,$table8;   
  $pseudo = trim($pseudo);  
 // $sql1=mysql_query("SELECT membrePseudoEnv, COUNT(membrePseudoMess) FROM table8 WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv");
  $query = "SELECT membrePseudoEnv, COUNT(membreMessage) FROM table8 WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv"; 
  $result = mysql_query($query) or die(mysql_error());
  while($row = mysql_fetch_array($result)){
var_dump($row['COUNT(membreMessage)']);
var_dump($row['membrePseudoEnv']);
}
} 

et en retour j'ai Table 'profectron.table8' doesn't exist alors qu'elle existe bien.
J'y comprends plus rien

par Invité » 16 mars 2008, 09:43

Bon j'ai quivi ton conseil j'ai repris le code du post précédent en incluant un var_dump mais j'ai toujours les erreurs.
Donc je ne peux pas analyser les variable.
Le problème doit venir de cette ligne :
  $sql1=mysql_query("SELECT membrePseudoEnv, COUNT(*) nombre FROM table8 WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv");  

par Sékiltoyai » 16 mars 2008, 03:02

Ton code n'est pas correct, réutilise celui que tu as posté à ton post précédent. Pour le débuggage, je te suggère un var_dump() pour examiner le contenu de $data dans ta boucle, ainsi que d'autres variables si tu en vois la nécessité.

par Invité » 16 mars 2008, 02:40

j'ai modifié le code :
function onlineMess($pseudo)  
{  
  GLOBAL $db,$table8;   
  $pseudo = trim($pseudo); 
  $sql= mysql_query(" SELECT membrePseudoEnv, COUNT(membreMessage) FROM table8 WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv"); 
  if (mysql_num_rows($sql))
{
   
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<message>';  
        while($row = mysql_fetch_array($sql)){
            $xml .= '<personne';  
            $xml .= ' pseudo='.'"'.$row['membrePseudoEnv'].'"';  
            $xml .= ' nombre='.'"'.$row['COUNT(membreMessage)'].'"';  
            $xml .= '/>';  
        }  
        $xml .= '</message>';  
          
        $fp = fopen("myPROFECTRONonlineShowMess.xml", 'w+');  
        fputs($fp, $xml);  
        fclose($fp);  
        return "error=ok";}  
else   
{   
return "error=pasok";  
}  
 }

mais j'ai un :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /web/profectron/www/myPROFECTRONclub/myPROFECTRONonline.php on line 87,

et si supprimer le code qui correspond à cette erreur j'ai :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /web/profectron/www/myPROFECTRONclub/myPROFECTRONonline.php on line 91

par Invité » 16 mars 2008, 00:48

en tout cas un grand merci pour ton éclairage.
J'ai essayé ceci :
function onlineMess($pseudo)  
{  
  GLOBAL $db,$table8;   
  $pseudo = trim($pseudo); 
  $sql1=mysql_query(" SELECT membrePseudoEnv, COUNT(*) nombre FROM table8 WHERE membrePseudoRec= '".$pseudo."' GROUP BY membrePseudoEnv"); 
 
if ( mysql_num_rows($sql1))  
{  
   
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>'.'<message>';  
       while ($data = mysql_fetch_array($sql1)) {
            $xml .= '<personne';  
            $xml .= ' pseudo='.'"'.$data['membrePseudoEnv'].'"';  
            $xml .= ' nombre='.'"'.$data['nombre'].'"';  
            $xml .= '/>';  
        }  
        $xml .= '</message>';  
          
        $fp = fopen("myPROFECTRONonlineShowMess.xml", 'w+');  
        fputs($fp, $xml);  
        fclose($fp);  
        return "error=ok";}  
else   
{   
return "error=pasok";  
}  
} 
mais mon xml affiche :

?xml version="1.0" encoding="ISO-8859-1"?><message></message>

Est-ce un problème avec nombre ?