Php

Résolu
ghizlanekh Messages postés 42 Date d'inscription   Statut Membre -  
ghizlanekh Messages postés 42 Date d'inscription   Statut Membre -
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 ?

12 réponses

  1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
    1. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
       
      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
  2. luffy duck
     
    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
  3. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
    1. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
       
      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
    2. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
       
      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
  6. luffy duck
     
    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
  7. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
    1. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
       
      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
  8. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
    1. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
       
      J'ai essayé et ça ne change rien j'ai tjrs un msgbox avec le même message.
      0
      1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857 > ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
         
        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
      2. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre > kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention  
         
        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
  9. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
  10. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
     
    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
  11. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    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
  12. ghizlanekh Messages postés 42 Date d'inscription   Statut Membre
     
    merci bcp,
    c'est bon ça marche merci bcp bcp bcp, c'est très gentille de ta part.
    0