Vérification de champs php avec Javascript

Résolu/Fermé
Thorim Messages postés 32 Date d'inscription mercredi 13 juin 2007 Statut Membre Dernière intervention 20 août 2007 - 8 août 2007 à 16:30
 php? - 16 juin 2008 à 10:58
Bonjour tout le monde!

Je suis en train de faire une session administrateur de base de données SQL en PHP.
J'ai créé une page "modifyArtist.php" qui affiche l'ensemble des artistes dans un tableau. Jusque là pas de soucis. Chaque ligne de ce tableau (qui correspond chacune à un artiste) possèdent un lien permettant d'ouvrir une popup où des champs de saisies s'affichent afin de permettre la modification.

Je transfert dans l'URL l'id de l'artist afin d'afficher dans les champs de la popup les informations déjà présente dans la base pour ce dernier.

Il y a 4 champs dans la popup dont une liste déroulante. Les deux seuls champs obligatoires sont le nom de l'artiste et sa localité (qui se trouve dans la liste déroulante).

J'ai créé une fonction javascipt "verif_error()" afin de vérifier que ces champs ne sont pas vides.
Apparement elle marche bien et m'affiche un message d'erreur dans une textbox si une des deux est vides.
Mon soucis s'est que lorsque je clique sur le bouton "OK" de la textbox, ma popup se recharge et j'obtiens une erreur SQL car l'id de l'artist à disparue de l'adresse URL...

Pouvez vous m'aidez à y voir plus clair et à corrigé cela?

Voici mon code de la fonction javascript :
function verif_error(){
        var error_message = "Error : The following fields must be obligatorily filled: \n\n";
        var message = error_message;
        var error = 0;
      
        if (document.ModifyArtist.Artist_name.value == ""){ 
          message = message + "The artist's name \n";
          error = 1;
        }
        
        if (document.ModifyArtist.Artist_locality.value == ""){ 
          message = message + "The artist's locality \n";
          error = 1;
        }
        
        if(error == 1){
          alert(message);
        }
      }


Et voila celui du formulaire:
<form name="ModifyArtist" onsubmit="return verif_error()" action="modifyArtistpopup.php">
          <input type="hidden" name="Artist_id" value="<?php echo($id_artist) ;?>">
          <table border="0" align="center" cellspacing="2" cellpadding="2">
            <tr align="center">
              <td>Name : </td>
              <td><input type="text" name="Artist_name" value="<?php echo $name_artist ;?>"></td>
            </tr>
            <tr align="center">
              <td>About this artist : </td>
              <td><input type="text" name="Artist_about" value="<?php echo $about_artist ;?>"></td>
            </tr>
            <tr align="center">
              <td>Inspiration : </td>
              <td><input type="text" name="Artist_inspiration" value="<?php echo $inspiration_artist ;?>"></td>
            </tr>
            <tr align="center">
              <td>Locality : </td>
              <td>
                <select name="Artist_locality">
                  <?php 
                    $requete = "SELECT * FROM locality";
                    $resultat = mysql_query($requete);
                    echo "<option value=$id_locality_artist>"?><?php echo $locality_artist ;?><?php "</option>";
                    /*Creation of the locality's list*/
                    while($row=mysql_fetch_array($resultat)) {
                      if($row['id_locality'] != $id_locality_artist)
                        echo "<option value=".$row['id_locality'].">".$row['name_locality']."</option>\n";
                    }
                  ?>
                </select> 
              </td>
            </tr>
          </table>
          <table border="0" align="center" cellspacing="2" cellpadding="2">
            <br><br>       
            <tr align="center">
              <td colspan="2"><input type="submit" name="submit" value="Validation"></td>
            </tr>
          </table>
        </form>


P.S : Les variables présentes dans le formulaires sont récupéré par une requète juste avant.

Merci d'avance
Thorim

A voir également:

7 réponses

Pour completer le message de Posotaz:


function verif_error(){
        var error_message = "Error : The following fields must be obligatorily filled: \n\n";
             
        if (document.ModifyArtist.Artist_name.value == ""){ 
          message = message + "The artist's name \n";
         alert(error_message);
         return false;
        }
        
        if (document.ModifyArtist.Artist_locality.value == ""){ 
          message = message + "The artist's locality \n";
         alert(error_message);
         return false;
        }
        
         return true;
      
      }
1
code php pou creer nu formuler
1
ne comprends pas cette question...est-ce du français?aucune idée...
0
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
8 août 2007 à 23:12
Salut Thorim,

Si tu mets un return au niveau de ta fonction verif_error() ? (Elle est censée renvoyer un booléen et là elle ne renvoie "rien" - true par défaut, ce qui fait que ton formulaire est toujours validé comme bon -).

https://openweb.eu.org/articles/validation_formulaire/
0
Thorim Messages postés 32 Date d'inscription mercredi 13 juin 2007 Statut Membre Dernière intervention 20 août 2007 13
9 août 2007 à 11:38
Salut tout le monde!

Tout d'abord merci pour vos deux messages!^^

J'ai rectifié mon code et ajouté les "return".

Maintenant, tout se passe bien pour le cas où un de mes champs est faux. Ma fonction verif_error() me donne bien un message d'erreur et l'utilisateur peut modifier sa saisie.

Par contre, es ce quil est possible de faire une requete sql en javascript?

Je m'explique.^^ J'aimerais également vérifier que l'artist saisie par l'utilisateur n'existe pas déjà dans la base de données. Je réussi à le faire dans la page "verificationModifyArtist.php" en PHP mais j'aimerai le faire si possible dans ma fonction javascript afin de regrouper l'ensemble des vérifications (Mieux structurer mon code!^^)

Merci de m'aider!^^

Nouveau code Javascript:
function verif_error(){
        var error_message = "Error : The following fields must be obligatorily filled: \n\n";
        var message = error_message;
             
        if (document.ModifyArtist.Artist_name.value == ""){ 
          message = message + "The artist's name \n";
         alert(message);
         return false;
        }
        
        if (document.ModifyArtist.Artist_locality.value == ""){ 
          message = message + "The artist's locality \n";
         alert(message);
         return false;
        }
        return true;
      }


Code du formulaire PHP:
<form name="ModifyArtist" onSubmit="return verif_error()" action="validationModifyArtist.php" method="POST">
          <input type="hidden" name="Artist_id" value="<?php echo($id_artist) ;?>">
          <table border="0" align="center" cellspacing="2" cellpadding="2">
            <tr align="center">
              <td>Name : </td>
              <td><input type="text" name="Artist_name" value="<?php echo $name_artist ;?>"></td>
            </tr>
            <tr align="center">
              <td>About this artist : </td>
              <td><input type="text" name="Artist_about" value="<?php echo $about_artist ;?>"></td>
            </tr>
            <tr align="center">
              <td>Inspiration : </td>
              <td><input type="text" name="Artist_inspiration" value="<?php echo $inspiration_artist ;?>"></td>
            </tr>
            <tr align="center">
              <td>Locality : </td>
              <td>
                <select name="Artist_locality">
                  <?php 
                    $requete = "SELECT * FROM locality";
                    $resultat = mysql_query($requete);
                    echo "<option value=$id_locality_artist>"?><?php echo $locality_artist ;?><?php "</option>";
                    /*Creation of the locality's list*/
                    while($row=mysql_fetch_array($resultat)) {
                      if($row['id_locality'] != $id_locality_artist)
                        echo "<option value=".$row['id_locality'].">".$row['name_locality']."</option>\n";
                    }
                  ?>
                </select> 
              </td>
            </tr>
          </table>
          <table border="0" align="center" cellspacing="2" cellpadding="2">
            <br><br>       
            <tr align="center">
              <td colspan="2"><input type="submit" name="submit" value="Validation"></td>
            </tr>
          </table>
        </form>


Thorim
0

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

Posez votre question
Oui c'et possible de faire une req SQL par Javascript/

Vois par Ajax, c a d

l'évenement va lance r une requette MakeRequest, qui va appeler un script PHP en lui pasant un ou plusieurs parametres. Ce script fera la req SQL et rendra la rep à Ajax;

La fonction traitement de la reponse Ajax te permettra d'écrire le résultat dans la page HTML

Tout ceci sans rechargement de page, en utilisant les < div id="....."> </div>

Un exemple de script Ajax/javascript que tu mets dans le head de ta page HTML:

<script language="Javascript"type="text/JavaScript">
// Requette AJAX
function makeRequest(url,id_lire,id_ecrire){
	var http_request = false;
		//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
		// lancement de la requete
		http_request.open('POST', url, true);
		//changer le type MIME de la requête pour envoyer des données avec la méthode POST ,  !!!! cette ligne doit etre absolument apres http_request.open('POST'....
		http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		obj=document.getElementById(id_lire);
		data="val_sel="+obj.value;
        http_request.send(data);
}

function traitementReponse(http_request,id_ecrire) {
	var affich="";
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
					// cas avec reponse de PHP en mode texte:
			//chargement des elements reçus dans la liste
			var affich_list=http_request.responseText;
            //alert(http_request.responseText);
				obj = document.getElementById(id_ecrire); 
                obj.innerHTML = affich_list;
		} 
		else {
                alert('Un problème est survenu avec la requête.');
        }
    }
}
</script>

et le fichier repPhpAjax.php:

<code><?php
// script PHP interrogation Base de donnees pour reponse a la requete AJAX
// recup valeur postee par Ajax
$valeur_postee=$_POST['val_sel'];
// Connexion a la base de donnees  
//Requette SQL, traitement etc..

// construction de la reponse .
$aff="";
$aff.="Message réponse";

// envoi reponse Php a Ajax	
echo $aff; 
?>


Dans ta page HTML sur l'évenement déclencheur, une liste select tu mets:

< select name='......' id="liste1" onChange=" makeRequest('repPhpAjax.php','liste1','id_reponse');">

</code>

ou tu veux la réponse tu mets un DIV:

<div id="id_reponse" > </div>

ou alors tu mets une boite alert(message); dans la fonction TratementReponse
0
Thorim Messages postés 32 Date d'inscription mercredi 13 juin 2007 Statut Membre Dernière intervention 20 août 2007 13
10 août 2007 à 10:31
Salut Alain42!

Merci pour ta réponse!^^

Par contre, ca ma l'air un peu trop compliqué pour moi!^^ Je ne connais pas du tout l'Ajax et je ne pense pas avoir le temps d'apprendre avant la fin de mon stage...

Il n'y a pas une façons plus simple de faire ce que je veux?

En tout cas merci pour ton aide!^^

Thorim
0
Thorim Messages postés 32 Date d'inscription mercredi 13 juin 2007 Statut Membre Dernière intervention 20 août 2007 13
13 août 2007 à 12:37
Bonjour tout le monde!

En fait j'ai trouvé une façons de faire ce que je veux sans faire les requetes en javascript!

C'est peu être un peu barbare comme méthode mais ça à le mérite de marcher!^^

En fait je garde la fonction javascript tels quelle pour qu'elle vérifie si tout les champs obligatoires sont bien saisies et ensuite mon formulaire rappelle la même page php avec les nouvelles informations en méthodes POST.

Je récupère les informations et j'effectue les requetes en PHP dans la même page puis affiche les erreurs si il y en a avec alert().

Je n'ai trouvé que cette façons pour pouvoir gérer l'ensemble de mes tests dans la même page!^^

En tout cas merci Alain42 pour ta solution mais je n'ai pas le temps de regarder l'Ajax!^^
Ca sera pour une prochaine fois!

Thorim
0