Affichage des articles dont le libellé est Classic ASP. Afficher tous les articles
Affichage des articles dont le libellé est Classic ASP. Afficher tous les articles

dimanche, février 07, 2010

JQuery Ajax() pour mettre à jour votre base de données

Nous sommes souvent confrontés à d’interminables scripts pour mettre à jour des données p.ex. dans des fonctionnalités de CRM, ERP, CMS, etc.

La fonction ajax() de JQuery vous permet de vous faciliter la vie tout en créant une interface utilisateur beaucoup plus attrayante.

Pour notre exemple, voici le formulaire :

<!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=UTF-8" />
    <title>Mettre à jour des données avec la fonction ajax() de JQuery</title>
</head>
<body>
<form action="userdata.asp" method="post">
    <input id="ID" type="hidden" value="10" />
    <label for="Nom">Nom:</label><input type="text" id="Nom" class="formelt" /><br />
    <label for="Prenom">Prénom:</label><input type="text" id="Prenom" class="formelt" />
</form>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="js/actions.js"></script>
</body>
</html>

Vous remarquerez qu’il y a un champ caché et 2 champs texte, le champ caché contient l’ID de l’élément à modifier, les 2 champs sont les champs à updater.

Le code html reste valide W3C

Les actions JQuery sont toutes placées dans un fichier nommé « actions.js » que voici

$(document).ready(function() {
    $(".formelt").click(function() { $(this).css('background-color', '#F3F781') }); //changer la couleur pour indiquer que le champ est actif
    $(".formelt").blur(function() {
        var ID = $("#ID").val(); // l'id de l'élément à modifier
        var FieldName = $(this).attr("id"); // le nom du champ
        var FieldValue = $(this).val(); // la valeur du champ
        var datastr = "{ID:" + ID + ",FieldName:" + FieldName + ",FieldValue:" + FieldValue + "}"
            $.ajax({
                type: "POST", //post ou get
                url: "savedata.asp", // le nom du fichier contenant l'update DB
                data: datastr // les données sous forme {ID:10,FieldName:Nom,FieldValue:contenu+de+mon+champ}
                });
        $(this).css('background-color', '#fff'); // changer la couleur du champ pour montrer que c'est enregistré
        return false; // n'oubliez pas cette ligne afin de ne pas charger la page
    });
});

Pour finir il vous faut un fichier ASP, PHP ou autre pour mettre à jour la table, récupérez simplement vos éléments comme suit:

En ASP par exemple:

Dim myDBID, myFieldName, myFieldValue
myDBID = Request.Form("ID")
myFieldName = Request.Form("FieldName")
myFieldValue = Request.Form("FieldValue")

L’avantage de ce script est qu’il suffit de rajouter des champs DB et dans l’html pour que tout ce mette à jour automatiquement (attention cependant : pour des raisons de sécurité, je vous recommande de ne pas utiliser le nom du champ DB dans l’html, ce qui nécessitera également de mettre à jour le fichier ASP ou PHP)

samedi, février 06, 2010

Validation avec Position Absolute et Classic ASP ajax[ajaxUser]

Il y a un mois, je suis tombé sur ce magnifique plugin pour la validation de formulaires, mais mon projet était en Classic ASP, voici donc la traduction du PHP de ajax[ajaxUser]

Il reste néanmoins un hack pour "validateError", n'hésitez pas à poster une solution

<%
'---------------------
' validateUser.php traduit en classic asp par Philippe Kaivers
'---------------------


Response.ContentType = "application/json"
'ajouté par rapport à la version originale en Php: envoyer les données en Json au lieu d'Html
%>
<!-- #include file="toJson.asp" -->
<%
'toJson.asp peut être trouvé sur http://code.google.com/p/aspjson/

'Récupérer les data du post
Dim validateValue, validateId, validateError, arrayToJs, dataValid
validateValue   = Request.Form("validateValue")
validateId      = Request.Form("validateId")
validateError   = "ajaxUser" 'Request.Form("validateError") 'hack... il y a toujours un bug ici, l'info passe comme "ajaxUserundefined"

'Construire le tableau (array)
Set arrayToJs = jsArray()
arrayToJs(Null) = validateId
arrayToJs(Null) = validateError

'validez ici
dataValid = False
If validateValue = "gg" Then
    dataValid = True
End If

'Write json response
If dataValid = True Then
    arrayToJs(Null) = "true"
    Response.Write("{""jsonValidateReturn"":" & arrayToJs.jsString & "}")
Else
    For i = 0 to 1000000 'Ce loop est énorme et devrait être remplacé par un timer (ce loop est présent dans la version Php)
        If i = 990000 Then
            arrayToJs(Null) = "false"
            Response.Write("{""jsonValidateReturn"":" & arrayToJs.jsString & "}")
        end if
    Next
End If
%>

Le code html est le suivant

<!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>
    <title>ajax[ajaxUser]</title>
    <style>
    body{font-family:Trebuchet MS;font-size:small;}
    #userd{margin-bottom:15px}
    label{font-weight:bold;}
    #monForm{margin:80px 0 0 80px;}
    </style>
    <link href="/css/validationEngine.jquery.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="monForm" method="post" action="form.asp?id=2">
    <label for="userd">User:</label><br />
    <input type="text" id="userd" name="userd" class="validate[required,ajax[ajaxUser]]" /><br />
    <input type="submit" />
</form>
<script src="/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/js/jquery.validationEngine-en.js" type="text/javascript"></script>
<script src="/js/jquery.validationEngine.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("#monForm").validationEngine()
    });
</script>
</body>
</html>