requete SQL à insérer dans du js

kronos12
Invité n'ayant pas de compte PHPfrance

24 mars 2011, 11:24

Bonjour !

c'est mon premier post ici, j'y viens parce que je suis bloqué j'ai beau chercher sur internet il me manque toujours un petit quelque chose ...
J'ai codé une infobulle en javascript et je voudrais afficher dans cette infobulle des données que je vais chercher dans ma base de données
J'ai vu sur internet qu'il fallait passer par ajax, mais je n'y connais absolument rien ...
J'ai essayé de coder une fonction utilisant XMLHttpRequest mais rien à faire je n'arrive pas à afficher les données contenues dans ma base
est ce que quelqu'un pourrait m'aider pour mon code ? ou y'a t'il un moyen d'appeler ma page php sans passer par l'ajax ?
Je peux poster mes codes si vous le voulez
Merci d'avance
Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

24 mars 2011, 11:30

Pourquoi utiliser de l'ajax alors que tu peux exécuter du code PHP pour remplir ton infobulle avant l'envoi au navigateur ?

Pour rappel en javascript sur une page PHP on peut faire :
<?php
$variable = "test";
?>
<script type="text/javascript">
alert(<?php echo $variable; ?>);
</script>

kronos12
Invité n'ayant pas de compte PHPfrance

24 mars 2011, 12:06

merci pour ta réponse tout d'abord
Je n'obtiens pas de résultat , je pense que le problème vient de mon code :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Info Bulle Javascript</title> <style type="text/css" media="all"> body { font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px; } .infobulle{ position: absolute; visibility : hidden; border: 1px solid Black; padding: 10px; font-family: Verdana, Arial; font-size: 10px; background-color: darkblue; color: white; } </style> <?php require ("connexion.php"); $variable = mysql_query ("select Nom , Prenom , Service , NomCalife from parc_informatique where NomCalife like '%967' "); ?> <script language="javascript" type="text/javascript"> function GetId(id) { return document.getElementById(id); } var i=false; // La variable i nous dit si la bulle est visible ou non function move(e) { if(i) { // Si la bulle est visible, on calcul en temps reel sa position ideale if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE GetId("curseur").style.left=e.pageX + 5+"px"; GetId("curseur").style.top=e.pageY + 10+"px"; } else { if(document.documentElement.clientWidth>0) { GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px"; GetId("curseur").style.top=10+event.y+document.documentElement.scrollTop+"px"; } else { GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px"; GetId("curseur").style.top=10+event.y+document.body.scrollTop+"px"; } } } } function montre(text) { if(i==false) { GetId("curseur").style.visibility="visible"; // Si il est caché on le rend visible. GetId("curseur").innerHTML = text; i=true; } } function cache() { if(i==true) { GetId("curseur").style.visibility="hidden"; // Si la bulle etais visible on la cache i=false; } } document.onmousemove=move; // des que la souris bouge, on appelle la fonction move pour mettre a jour la position de la bulle. </script> </head> <body> <div id="curseur" class="infobulle"></div> <h1>Infobulle Javascript personnalisable</h1> <p><img src="BA.jpg" alt="Une image test" onmouseover="montre(<?php echo $variable; ?>);" onmouseout="cache();" /> </p> </body> </html>
Voila, je ne sais pas si tout est bien placé ou même si le code ne contient pas d'erreurs...
qu'en penses tu ?

Mammouth du PHP | 672 Messages

24 mars 2011, 12:35

<?php
require ("connexion.php");
[b]$variable = mysql_query[/b] ("select Nom , Prenom , Service , NomCalife from parc_informatique where NomCalife like '%967' ");
?>
<p><img src="BA.jpg" alt="Une image test" onmouseover="montre(<?php echo $variable; ?>);" onmouseout="cache();" />
Bonjour.

1. Tu as regardé le source de ta page ?

2. Pour rappel, la fonction mysql_query() :
Valeurs de retour

Pour les requêtes du type SELECT, SHOW, DESCRIBE, EXPLAIN et les autres requêtes retournant un jeu de résultats, mysql_query() retournera une ressource en cas de succès, ou FALSE en cas d'erreur.

Pour les autres types de requêtes, INSERT, UPDATE, DELETE, DROP, etc., mysql_query() retourne TRUE en cas de succès ou FALSE en cas d'erreur.

La ressource de résultat retournée doit être passée à la fonction mysql_fetch_array(), et les autres fonctions permettant d'explorer le résultat des tables, pour accéder aux données retournées.

Utilisez mysql_num_rows() pour trouver le nombre de lignes retournées pour une requête du type SELECT ou mysql_affected_rows() pour trouver le nombre de lignes affectées par les requêtes du type DELETE, INSERT, REPLACE, ou UPDATE.

mysql_query() échouera et retournera FALSE si l'utilisateur n'a pas les autorisations nécessaire pour accéder à la (aux) table(s) référencée(s) par la requête.

kronos12
Invité n'ayant pas de compte PHPfrance

24 mars 2011, 14:25

ok donc si j'ai bien compris, j'ai juste à rajouter la ligne de récupération de requête avec la fonction mysql_fetch_array ?
j'ai completement zappé cette étape , j'ai fait la requête mais je ne récupère rien -_-'
Je vais essayer de faire ça et je vous tiens au courant
merci à toi macgawel !

kronos12
Invité n'ayant pas de compte PHPfrance

24 mars 2011, 15:53

Bon ça ne marche pas , le code que je viens de rajouter s'affiche tel quel à l'écran, je ne récupère toujours rien dans mon infobulle ...

voila ce que j'ai rajouté :
<?php
require ("conf.ini.php");
<span style="font-weight:bold">$req=mysql_query </span> ("select Nom , Prenom , Service , NomCalife from parc_informatique 
where NomCalife like '%967'");
while ($data = mysql_fetch_array($req)) { 
      echo 'Nom : '.$data['Nom'].'<br />'; 
      echo 'Prenom : '.$data['Prenom'].'<br />';  
	  echo 'Service : '.$data['Service'].'<br />'; 
	  echo 'NomCalife : '.$data['NomCalife'].'<br />'; 
}  
mysql_free_result ($req);  
  
?>

<p><img src="BA.jpg" alt="Une image test" onmouseover="montre(<?php echo $data; ?>);" onmouseout="cache();" />
Le code php à lui seul fonctionne bien mais pas pour l'infobulle
Je ne sais vraiment plus quoi faire ...
Help please
Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

24 mars 2011, 17:29

Je doute que comme tu le dis le code PHP fonctionne bien...
Tu devrais te manger une bonne erreur de syntaxe à cause de la balise span qui se balade en plein milieu du code PHP !

Mammouth du PHP | 672 Messages

25 mars 2011, 12:30

Je ne sais vraiment plus quoi faire ...
Apprendre à lire :evil:

1. Lire les sources de tes pages HTML.
Tu devrais avoir quelques messages (plus ou moins) explicites, qui devraient t'aiguiller. Et même sans message, le HTML généré est à étudier.
Par exemple, que donne le source au niveau du onmouseover (=> quel est le résultat de <?php echo $data; ?> ?)


2. Lire la doc, et essayer de comprendre ce que tu fais.
mysql_fetch_array() retourne un Array ou FALSE s'il n'y a plus de lignes.
La boucle while va s'arrêter quand tu auras $data = FALSE (quand tu auras fini de boucler sur les résultats de la requête).
Du coup ton echo $data, ça donne quoi à ton avis ? :mrgreen:

kronos12
Invité n'ayant pas de compte PHPfrance

30 mars 2011, 13:51

Salut,

Le résultat de <?php echo $data; ?> m'affiche dans mon infobulle "undefined"

Je suis débutant, je commence la programmation ...
<?php
$base = mysql_connect ('localhost', 'root', '');  
mysql_select_db ('csv_db', $base) ;  
?>

<html>
<head>
<title></title>
</head>
<body>
<?php
$sql = "select Nom , Prenom , Service , NomCalife from parc_informatique where NomCalife like 'P%967'";  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
while ($data = mysql_fetch_array($req)) { 
      echo 'Nom : '.$data['Nom'].'<br />'; 
      echo 'Prenom : '.$data['Prenom'].'<br />';  
	  echo 'Service : '.$data['Service'].'<br />'; 
	  echo 'NomCalife : '.$data['NomCalife'].'<br />'; 
}  
mysql_free_result ($req);  
mysql_close ();  
?>
</body>
</html> 
Voici ma requête, quand je lance uniquement ce fichier j'obtiens bien toutes les infos que je souhaite ...

mais je trouve ça bizarre quand même j'ai demandé à mon prof, il m'a dit qu'il fallait obligatoirement passer par de l'ajax et l'objet XMLHTTPRequest pour afficher ce que je veux ...

Merci

ViPHP
xTG
ViPHP | 7331 Messages

30 mars 2011, 14:31

Et le code html généré il donne quoi ? Il contient le retour de la requête ?
Si c'est le cas cela provient juste d'un problème de syntaxe Js qui serait causé par un apostrophe. (fonction addslashes() et le tour est joué)

kronos12
Invité n'ayant pas de compte PHPfrance

31 mars 2011, 11:51

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Info Bulle Javascript</title>
<style type="text/css" media="all">
body {

font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
}
.infobulle{
	position: absolute;	
	visibility : hidden;
	border: 1px solid Black;
	padding: 10px;
	font-family: Verdana, Arial;
	font-size: 10px;
	background-color: darkblue;
	color: white;
}
</style>
<script language="javascript" type="text/javascript">
				
				function GetId(id)
				{
				return document.getElementById(id);
				}
				var i=false; // La variable i nous dit si la bulle est visible ou non
				
				function move(e) {
				  if(i) {  // Si la bulle est visible, on calcul en temps reel sa position ideale
				    if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
				    GetId("curseur").style.left=e.pageX + 5+"px";
				    GetId("curseur").style.top=e.pageY + 10+"px";
				    }
				    else { 
				    if(document.documentElement.clientWidth>0) {
				        GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px";
				        GetId("curseur").style.top=10+event.y+document.documentElement.scrollTop+"px";
				    }
				    else {
				        GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px";
				        GetId("curseur").style.top=10+event.y+document.body.scrollTop+"px";
				    }
				    }
				  }
				}
				
				function montre(text) {
				  if(i==false) {
				  GetId("curseur").style.visibility="visible"; // Si il est caché  on le rend visible.
				  GetId("curseur").innerHTML = text; 
				  i=true;
				  }
				}
				function cache() {
				if(i==true) {
				GetId("curseur").style.visibility="hidden"; // Si la bulle etais visible on la cache
				i=false;
				}
				}
				document.onmousemove=move; // des que la souris bouge, on appelle la fonction move pour mettre a jour la position de la bulle.
				
</script>
</head>
<body>
<div id="curseur" class="infobulle"></div>
<h1>Infobulle Javascript personnalisable</h1>
<?php 
include('connexion.php');
?>
<p onmouseover="montre(<?php '.$data.'; ?>);" onmouseout="cache();">
<img src="BA.jpg" alt="Une image test" id="'.$data.'"/>
</p>;

</body>
</html>
Voila mon code html avec le code javascript de l'infobulle

et voici ma page connexion.php :
<?php
$base = mysql_connect ('localhost', 'root', '');  
mysql_select_db ('csv_db', $base) ;  
?>


<?php
$sql = "select Nom , Prenom , Service , NomCalife from parc_informatique where NomCalife like 'P%967'";  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
while ($data = mysql_fetch_array($req)) { 
      echo 'Nom : '.$data['Nom']."\r\n"; 
      echo 'Prenom : '.$data['Prenom']."\n";  
	  echo 'Service : '.$data['Service']."\n"; 
	  echo 'NomCalife : '.$data['NomCalife']."\n"; 
}  
mysql_free_result ($req);  
mysql_close ();  

?>
quand je lance mon fichier html, j'obtiens mon image, les éléments obtenus par ma requête au dessus de l'image et quand ma souris passe sur l'image dans l'infobulle s'affiche "undefined" ...

Voila tout ce que j'obtiens avec les codes ci-dessus

Sinon je suis en train actuellement d'essayer un code Ajax, dans lequel pour l'instant j'arrive à afficher les éléments de ma requête
A vrai dire je ne sais pas dans quel sens aller ...

ViPHP
xTG
ViPHP | 7331 Messages

31 mars 2011, 13:12

Je parlais du code HTML généré par le navigateur. ;)

kronos12
Invité n'ayant pas de compte PHPfrance

31 mars 2011, 14:18

Ah désolé je n'avais pas bien saisi ! :mrgreen:

Après bon nombre de tests j'ai enfin un résultat qui me convient :D

voici mon code html fonctionnel :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Info Bulle Javascript</title>
<style type="text/css" media="all">
body {

font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:14px;
}
.infobulle{
	position: absolute;	
	visibility : hidden;
	border: 1px solid Black;
	padding: 10px;
	font-family: Verdana, Arial;
	font-size: 10px;
	background-color: darkblue;
	color: white;
}
</style>
<?php 
include('test5.php');
?>
<script language="javascript" type="text/javascript">
				
				function GetId(id)
				{
				return document.getElementById(id);
				}
				var i=false; // La variable i nous dit si la bulle est visible ou non
				
				function move(e) {
				  if(i) {  // Si la bulle est visible, on calcul en temps reel sa position ideale
				    if (navigator.appName!="Microsoft Internet Explorer") { // Si on est pas sous IE
				    GetId("curseur").style.left=e.pageX + 5+"px";
				    GetId("curseur").style.top=e.pageY + 10+"px";
				    }
				    else { 
				    if(document.documentElement.clientWidth>0) {
				        GetId("curseur").style.left=20+event.x+document.documentElement.scrollLeft+"px";
				        GetId("curseur").style.top=10+event.y+document.documentElement.scrollTop+"px";
				    }
				    else {
				        GetId("curseur").style.left=20+event.x+document.body.scrollLeft+"px";
				        GetId("curseur").style.top=10+event.y+document.body.scrollTop+"px";
				    }
				    }
				  }
				}
				
				function montre(text) {
				  if(i==false) {
				  GetId("curseur").style.visibility="visible"; // Si il est caché  on le rend visible.
				  GetId("curseur").innerHTML = text; 
				  i=true;
				  }
				}
				function cache() {
				if(i==true) {
				GetId("curseur").style.visibility="hidden"; // Si la bulle etais visible on la cache
				i=false;
				}
				}
				document.onmousemove=move; // des que la souris bouge, on appelle la fonction move pour mettre a jour la position de la bulle.
				
</script>
</head>
<body>
<div id="curseur" class="infobulle"></div>
<h1>Infobulle Javascript personnalisable</h1>
<p onmouseover="montre('<?php echo "$var"; ?>');" onmouseout="cache();">
<img src="BA.jpg" alt="Une image test" id="'.$data.'"/>
</p>

</body>
</html>
et ma page contenant ma requête :
<?php
$base = mysql_connect ('localhost', 'root', '');  
mysql_select_db ('csv_db', $base) ;  
?>


<?php
$sql = "select Nom , Prenom , Service , NomCalife from parc_informatique where NomCalife like 'P%967'";  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
while ($data = mysql_fetch_array($req)) { 
	$var1 = $data['Nom'];
	$var2 = $data['Prenom'];
	$var3 = $data['Service'];
	$var4 = $data['NomCalife'];
	$var = $var1 .' '. $var2 .' '. $var3 .' '. $var4 ;
      echo 'Nom : '.$var."\n"; 
      echo 'Prenom : '.$var1."\n";  
	  echo 'Service : '.$var2."\n"; 
	  echo 'NomCalife : '.$var3."\n"; 
}  
 
mysql_close ();  


?>
Et j'obtiens enfin les éléments de ma requête SQL dans mon infobulle !
Merci pour votre aide, enfin un forum où les gens se penchent sur votre cas !

Cordialement