Php

Résolu/Fermé
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012 - 14 avril 2008 à 14:45
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012 - 16 avril 2008 à 09:10
salut tous le monde.
merci d'avance pour votre aide.

à partir d'un code saisi dans une zone de texte je veux actualiser une autre zone de texte en mettant directement le nom du code saisi.

et aussi quand je fini de saisir mon code je veux que mon curseur se déplace directement dans un champ précis.

Pouvez-vous m'aider svp ?
A voir également:

12 réponses

kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
14 avril 2008 à 16:20
Bonjour,

Il faut passer par du javascript pour faire ça.
Mettons que tu as ces deux champs dans ta page :
<input type="text" id="champ1">
<input type="text" id="champ2">


Voilà la fonction javascript qui fait ce que tu souhaite, à mettre à inclure dans ta page :
<script language="javascript">
function fillField ( inputFieldName, outputFieldName ){
   if ( document.getElementById(inputFieldName) &&  document.getElementById(outputFieldName) ){
      // --- Set value from input field to output field
      document.getElementById(outputFieldName).value = document.getElementById(inputFieldName).value;
      // --- Get focus to the output field
      document.getElementById(outputFieldName).focus();
   }
}
</script>


Ensuite il ne te reste plus qu'à appeler la fonction javascript avec les bons paramètres là où tu veux, par exemple sur l'évênement onMouseOver comme ci-dessous :
<input type="text" id="champ1" onMouseOver="fillField('champ1','champ2')">
<input type="text" id="champ2">

0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 10:47
bjr,
merci bcp pour cette fonction en javascript mais mon problème c'est que le champ 2 doit prendre une valeur à partir de la base de donnée.
quand je saisie dans le champ 1 par exemple "toto" le champ 2 doit chercher la valeur associé à "toto " et l'affiche dans mon champ 2.

merci bcp une autre fois et j'éspère que tu vois ce que je veux dire.
à plus.
0
bonjour,

il faudrait le faire en ajax. ce serait le plus propre, et certainement le mieux. Par contre, là je laisse les experts ajax t'expliquer comment faire !

Sinon tu peux aller voir sur developpez.com à cette adresse : https://gael-donat.developpez.com/web/intro-ajax/

en fait l'ajax va te permettre de faire des requêtes dans ta base de données pour récupérer la valeur, la mettre dans ta zone de texte, et le tout sans recharger la page entière. Ce n'est pas très compliqué. Je l'avais fait il y a longtemps, et avec le tuto que je viens de te donner, j'avais mis une petite heure à comprendre comment ça marche et à l'appliquer !

bon courage !
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 avril 2008 à 11:54
Ha oui dans ce cas là effectivement il faut que tu aille chercher la valeur dans la base de données comme dis luffy.
Je reviens vers 13h/13h30 te donner le code nécessaire pour faire ce que tu veux.
0
ah, il est trop sympa ce kij ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 avril 2008 à 12:00
C'est surtout que je suis sur un problème épineux au boulot qui me donne du fil à retordre et que j'ai envie de faire autre chose un moment pour me vider la tête :D (bon appétit au passage)
0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 13:55
slt,
merci pour le cours de ajax.
ca va j'ai compris le principe mais quand je refais le même code que dans l'exemple du III-A ça ne marche et ça m'affiche une erreur concerant ajax4.js.
est ce que t'as eu le même problème toi aussi? merci.
0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 13:57
slt
merci pour le cours de ajax.
ca va j'ai compris le principe mais quand je refais le même code que dans l'exemple du III-A ça ne marche et ça m'affiche une erreur concerant ajax4.js.
est ce que t'as eu le même problème toi aussi? merci.1 message(s) posté(s) depuis le lundi 14 avril 2008
0
heu non, il ne me semble pas avoir eu de soucis... Je crois qu'il vaut mieux attendre kij... je ne suis vraiment pas calé pour mettre en oeuvre l'ajax.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 avril 2008 à 14:02
Re, alors comme promis me revoilà avec quelques scripts.

Pour commencer, je ne sais pas où tu en es niveau développement donc je me suis permis de faire un script PHP regroupant quelques fonctions de connexion / déconnexion à la base de données pour être sur que tu ai tout ce qu'il faut.
Note, avant de commencer, tous les fichiers décrits ci-dessous doivent être présents dans le même répertoire, libre à toi ensuite d'adapter selon tes besoins d'organisation.

Le script de connexion / deconnexion, que tu nommera "lib.php" :
<?php

//------------------------------------------\\
function db_connect(){
//------------------------------------------\\
	$base ="users";
	$conn = mysql_connect('localhost','root','');
	if(!$conn)
		messerr("Pb connection mysql","white");

	if(!mysql_select_db($base,$conn)){
		mysql_close($conn);
		messerr("Pb connection a la base \"".$base."\"","white");
	}
	return $conn;
}

function deconnect($conn,$nb){
	mysql_close($conn);
	return $nb;
}

function messerr ( $lib, $val )
{
	echo "<SCRIPT LANGUAGE=\"JavaScript\">alert(\"".$lib."\")</SCRIPT>";
	return $val;
}

?>


Note : les lignes en gras sont à remplir par tes propres paramètres de connexion à ta base.

Ensuite, ta page principale (résumé à quelques champs), que j'ai nommé 'form.php', mais peu importe le nom :
<?php
include "script.js";
?>

<BR><input type="text" id="champ1" />
<BR><input type="text" id="champ2" />
<BR><input type="button" value="update" onclick="updateValue('champ1','champ2')" />


Ce qu'il est important de noter dans cette page c'est l'inclusion d'un fichier de script qui regroupe les fonctions ajax permettant de faire ton traitement.
De même tu peux voir que j'ai ajouté un bouton pour déclencher manuellement la mise à jour du champ. Libre à toi ensuite d'adapter ta page pour que le traitement se fasse sur n'importe quel autre évênement, il te suffit d'appeler la même fonction avec les mêmes paramètres. Bien sur si tu nomme tes champs autrement il faut modifier les valeurs des paramètres donnés à la fonction.

Ensuite le fichier de script javascript, nommé 'script.js' :
<script language="javascript">

function updateValue ( _input, _output ){
	var _data = "input="+_input+"&output="+_output;
	// --- Retrieve value from input field
	if ( ! document.getElementById(_input) ){
		alert("champ input introuvable dans la page");
		return;
	}
	_data += "&val="+document.getElementById(_input).value;
	// --- Call PHP script to launch the treatment
	callScript("update.php",_data);
}

/**
 * Use ajax method to call PHP script and refresh screen data
 */
function callScript ( scriptName, args ){
	
	var xhr_object = null; 
	     
	if(window.XMLHttpRequest) // Firefox 
	   xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
	   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
	else { // XMLHttpRequest non supporté par le navigateur 
	   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
     return; 
	} 
	 
	xhr_object.open("POST", scriptName, true);
	     
	xhr_object.onreadystatechange = function() { 
	   if(xhr_object.readyState == 4) {
			//alert(xhr_object.responseText); // DEBUG MODE
			//document.write(xhr_object.responseText);
			eval(xhr_object.responseText);
		 }

		return xhr_object.readyState;
	} 
	 
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	
	xhr_object.send(args);

}

</script>


Tu peux voir deux fonctions. 'callScript' est une fonction que j'ai faite il y a un bout de temps mais qui devrait encore être d'actualité. Elle te permettra d'appeler un script PHP en lui passant des paramètres via la méthode POST, et éventuellement exécuté le retour du script comme du javascript (interpréter)
Tu ne change absoluement rien à cette fonction.
L'autre fonction est 'updateValue', celle appelée lorsque l'on clique sur le bouton tu formulaire. Elle permet de récupérer la valeur du premier champ et d'appeler ensuite (si le champ en question existe), le script PHP permettant de mettre à jour le deuxième champ.

Nous en venons donc ensuite au dernier script, celui effectuant la requête sur la base de données, que j'ai nommé 'update.php' :
Note, si tu modifie le nom de ce script, ou même l'endroit où il se situe, il faudra mettre à jour la valeur passée à la fonction 'callScript' du fichier 'script.js'.

<?php
// --- Include lib where are defined functions to connect / disconnect to / from the database
include "lib.php";

$input 	= null;
$output = null;
$val		= null;

// --- Retrieve 'input' parameter data
if ( isset($_POST["input"]) && !empty($_POST["input"]) )
	$input = $_POST["input"];
// --- Retrieve 'output' parameter data
if ( isset($_POST["output"]) && !empty($_POST["output"]) )
	$output = $_POST["output"];
if ( isset($_POST["val"] && !empty($_POST["val"]) )
	$val = $_POST["val"];

// --- Controls input & output parameters	are filled
if ( $input == null || $output == null || $val == null ){
	echo "alert('Missing parameters');";
	return;
}

// --- Data are filled, so processed the treatment
$request = "SELECT field_value FROM table where val = ".$val;

// --- Connect to the database
$conn = db_connect();

if ( $conn != null ){
	// --- Execute request
	$res = @mysql_query($request,$conn);
	// ---
	$value = "";
	if ( @mysql_num_rows($res) > 0 ){
		$line = @mysql_fetch_assoc($res);
		$value = $line["field_value"];
	}
	
	// --- And modify the value of the 'output' field with the retrieved value (from the database)
	echo "var div = document.getElementById('".$output."');";
	echo "div.value = ".$value;

	// --- Disconnect from the database
	deconnect($conn,0);
}
else
 echo "alert('Connexion to the database failed');";
 
?>


Que fais ce script ? Il permet de chercher la valeur correspondante dans ta base de données. Il inclus la bibliothèque de connexion 'lib.php' (dont tu as au préalable modifier les paramètres).
Dans ce script il te faut modifier deux lignes, dont la première :
$request = "SELECT field_value FROM table where val = ".$val;

Il s'agit de ta requête SQL. Je ne connais pas ta base de données donc à toi d'implémenter la bonne requête pour retrouver ton information. J'ai fais un squelette vite fais histoire de.
La seconde ligne :
$value = $line["field_value"];

Il faudra, en fonction du nom du champs sélectionné dans ta requête SQL, modifier le nom du champ (ici 'field_value')

Pour ce qui est des inscrutions du type :
echo "alert(...);";
ou
echo "var div = document.getElementBy...;";


Pourquoi écrire en PHP des bouts de code javascript ?
Tout simplement car dans la fonction javascript 'callScript', celle qui appele ton script PHP, j'ai mis l'instruction suivante :
eval(xhr_object.responseText);


Ton script PHP écrit des choses sur la sortie standard. Habituellement cette sortie standard est ton navigateur, ce qui a pour effet d'écrire dans ta page web (désolé pour l'explication un peu foireuse mais ça permet de comprendre un peu mieux ce qu'il se passe, même si ce n'est pas forcément exactement ça). Or dans notre cas, le script PHP a été appelé en "underground", de manière plus ou moins cachée, et la sortie standard est devenu l'objet XMLHttpRequest (utilisé dans la fonction 'callScript' pour appeler le script PHP). Cet objet est capable, via l'instruction que j'ai mis, d'interprété tout ce qui sort sur sa sortie standard comme tu code javascript (via la fonction javascript 'eval').

Conclusion, si tu écrit du javascript en sortie du script PHP, celui ci est interprété à la fin de l'exécution du script PHP.
Comme le code que j'ai mis dans le script PHP permet de mettre à jour le deuxième champ, celui-ci sera mis à jour de manière transparente (sans rechargement entier de la page web).

Voilà, avec tout ça tu as de quoi faire fonctionner ton truc.
Note bien que je n'ai pas testé le code, donc il est possible que j'ai fais des fautes de frappes par ci par là (bien que).

Si tu as des questions je reste à ta disposition dans la limite de mon temps :)
0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 17:11
merci bcp ,
pour le code je vois le raisonnement mais j'ai un problème.
ce que j'ai compris de mon form.php j'appelle script.js avec la fonction updatevalue qui appelle update.php avec callscript.
mais quand je saisi une valeur dans mon champ1 ça m'affiche " var div=document.getelementbyid('champ2');div.value =" je pense qu'il n'arrive pas à lire la requête puisque il garde tjrs champs2 au lieu de la valeur de la base de donnée.
et il y a aussi la variable val que je ne comprend pas bien qu'est ce qu'elle fait exactement?

merci d'avance.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 avril 2008 à 17:20
Ha, alors il doit y avoir une faute de frappe quelque part qui empêche d'interpréter correctement le code javascript issue du script update.php.

Remplace la ligne
	echo "div.value = ".$value;

par :
	echo "div.value = ".$value.";";


dans le script 'update.php' et dit moi ce que ça fait.
0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 17:33
J'ai essayé et ça ne change rien j'ai tjrs un msgbox avec le même message.
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857 > ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 17:39
Tu as une popup avec une message d'alerte ?
Redonne moi exactement le message que tu as (entre balise code s'il te plait)

Sinon, lorsque tu exécute ta page avec mozilla, peux tu me dire si tu as un message d'erreur dans la console (pour l'afficher tu clique sur le menu 'Outils->console d'erreur' et tu te met en mode erreur.
Si tu apercois une drapeau rouge tu as une erreur, auquel cas donne moi le message.

Sinon tu peux aussi te mettre en mode 'debug' et décommenter la ligne suivante dans la fonction javascript 'callScript :
	//alert(xhr_object.responseText); // DEBUG MODE

0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012 > kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013
15 avril 2008 à 17:56
j'ai un msgbox attention qui affiche
var div=document.getElementById('champ2'); dis.value=; en faite il affiche ce qui est demandé à la fin de update.php sauf que je pense qu'il ne comprend pas $value d'ailleurs moi aussi j'ai pas compris à quoi ça sert cette variable.
ça quand je rempli mon champ1 mais quand il est vide ça m'affiche alert('missing parameters') ce qui est normale car c ce qui est demandé.

je travaille avec internet explorer je n'ai pas mozilla.

et le messsage que ça m'affiche c quand je décomente alert(xhr8object.responseText);

et j'ai commenté aussi eval(xhr_object.responsetext) et quand je la décommente internet explorer m'affiche qu'il y a des erreurs dans la page.est ce que ttu peux m'expliquer l'utiloité de la variable valeur et le mot eval stp

merci
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 avril 2008 à 18:07
L'instruction 'eval' permet d'évaluer (comme le nom l'indique) une expression en tant que code javascript.

Si tu veux en savoir plus, tape 'javascript eval' dans google et tu tombera forcément sur une page qui te l'expliquera.
Sinon, la variable $value est initialisée à "" (space), et dans le cas ou ta requête retourne un résultat, ce dernier est mis dans cette variable :
	if ( @mysql_num_rows($res) > 0 ){
		$line = @mysql_fetch_assoc($res);
		$value = $line["field_value"];
	}


Bien sur il faut avoir remplacé correctement ce qui est en gras par le nom de la donnée SQL à récupérer.

Sinon, essai une dernière fois de remplace cette ligne :
echo "div.value = ".$value.";";


par :
echo "div.value = '".$value."';";

(ajout de simple cote autour du résultat).

Si ça ne fonctionne toujours pas, pourrais tu me poster l'intégralité du script 'update.php' que tu as chez toi.

0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
15 avril 2008 à 18:28
ca ne marche c'est le même problème.

script js
<script language="javascript">

function updateValue ( _input, _output ){
var _data = "input="+_input+"&output="+_output;
// --- Retrieve value from input field
if ( ! document.getElementById(_input) ){
alert("champ input introuvable dans la page");
return;
}
_data += "&val="+document.getElementById(_input).value;
// --- Call PHP script to launch the treatment
callScript("update.php",_data);
}

/**
* Use ajax method to call PHP script and refresh screen data
*/
function callScript ( scriptName, args ){

var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;
}

xhr_object.open("POST", scriptName, true);

xhr_object.onreadystatechange = function() {
if(xhr_object.readyState == 4) {
alert(xhr_object.responseText); // DEBUG MODE
//document.write(xhr_object.responseText);
//eval(xhr_object.responseText);
}

return xhr_object.readyState;
}

xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xhr_object.send(args);

}

</script>

dans ce script si je décommente eval(xhr_object.responseText); j'ai des erreurs dans ma page.
si je commente alert(xhr_object.responseText); aussi rien ne s'affiche
là je n'ai changé sauf commenté le eval


form.php c'est le même
<html><?php
include "script.js";
?>

<BR><input type="text" id="champ1" >
<BR><input type="text" id="champ2" >
<BR><input type="button" value="update" onclick="updateValue('champ1','champ2')" />
</html>

update.php
<?php
// --- Include lib where are defined functions to connect / disconnect to / from the database
include "lib.php";

$input = null;
$output = null;
$val = null;


if ( isset($_POST["input"]) && !empty($_POST["input"]) )
$input = $_POST["input"];

if ( isset($_POST["output"]) && !empty($_POST["output"]) )
$output = $_POST["output"];
if ( isset($_POST["val"]) && !empty($_POST["val"]) )
$val = $_POST["val"];

// --- Controls input & output parameters are filled
if ( $input == null || $output == null || $val == null ){
echo "alert('Missing parameters');";
return;
}

// --- Data are filled, so processed the treatment
$request = "SELECT PRIXUNITAIRE FROM table where REFEAN = ".$val;

// --- Connect to the database
$conn = db_connect();

if ( $conn != null ){
// --- Execute request
$res = @mysql_query($request,$conn);
$value = "";

if ( @mysql_num_rows($res)!=0 )
{
$line = @mysql_fetch_assoc($res);
$value = $line["PRIXUNITAIRE"];

}

// --- And modify the value of the 'output' field with the retrieved value (from the database)
echo "var div = document.getElementById('".$output."');";
echo "div.value = '".$value."';";

// --- Disconnect from the database
deconnect($conn,0);
}
else
echo "alert('Connexion to the database failed')";

?>


l'instruction if ( @mysql_num_rows($res)>0 ) ne marchais pas j'ai remplçé par if ( @mysql_num_rows($res)!=0 ) je crois que ça n'aura pas d'effet.

et après je n'ai rien modifié


lib.php
<?php

//------------------------------------------
function db_connect(){
//------------------------------------------
$base ="sql";
$conn = mysql_connect('localhost','root','');
if(!$conn)
messerr("Pb connection mysql","white");

if(!mysql_select_db($base,$conn)){
mysql_close($conn);
messerr("Pb connection a la base \"".$base."\"","white");
}
return $conn;
}

function deconnect($conn,$nb){
mysql_close($conn);
return $nb;
}

function messerr ( $lib, $val )
{
echo "<SCRIPT LANGUAGE=\"JavaScript\">alert(\"".$lib."\")</SCRIPT>";
return $val;
}

?>

ici j'ai remplaçé par mes paramètres .
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
15 avril 2008 à 21:45
Ok, alors décommente de nouveau l'eval et commente le alert dans le script javascript.
Ensuite, test ta requete SQL sur ta base de données avec tes paramètres pour voir si elle fonctionne correctement, je pense que ca vient de là l'erreur.

Tu as modifié ceci :
l'instruction if ( @mysql_num_rows($res)>0 ) ne marchais pas j'ai remplçé par if ( @mysql_num_rows($res)!=0 ) je crois que ça n'aura pas d'effet. 


Remets comme avant sans quoi en cas de mauvaise requête SQL, le code est quand même exécuté alors qu'il ne devrait pas (s'il n'y a pas de résultat, ou que la requête est mauvaise (résultat -1), il ne faut pas faire de @mysql_fetch_assoc.
Je pense que ta requête ne fonctionne pas, puisque tu me dis que lorsque tu met >0 rien ne s'affiche.

Redis moi ça.
A part je ne vois pas trop pourquoi ça ne fonctionnerai pas.
0
ghizlanekh Messages postés 46 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 14 décembre 2012
16 avril 2008 à 09:10
merci bcp,
c'est bon ça marche merci bcp bcp bcp, c'est très gentille de ta part.
0