À votre avis...PHP ou Javascript ?

Fermé
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 - Modifié le 24 oct. 2022 à 15:42
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 - 4 nov. 2022 à 11:01

Bonjour à tous,

En flânant sur Internet, je suis tombé sur un template d'une application de gestion qui m'a semblé bien plus fonctionnelle que celle que j'étais en train de faire. J'ai décidé de m'en inspirer pour refaire mon code !

Pour afficher des données statiques, ce n'est pas trop un problème par contre, dès qu'il faut interagir avec celles-ci, ça devient tout de suite plus complexe...

Exemple : 
 

$.ajax({
    type: 'POST',
    url: 'contrats-data.php',
    data: {
        id_client: arg
    },
    dataType: "json",
    success: function(response2) {
        /*console.log('success ajax',response2);*/

        // On efface le contenu de l'ancienne table 'liste-contrats' :
        var elem = document.querySelector('#liste-contrats');
        elem.innerHTML = '';

        // On remplit la nouvelle table 'liste-contrats':
        var nb_lignes = response2[0].nbr_contrats;
        if (nb_lignes > 0) {
            for (ligne = 0; ligne < nb_lignes; ligne++) {
                // Affichage du numéro de contrat : 
                var col1 = document.createElement('td');
                col1.setAttribute('id', 'contrat' + ligne + '-col1');
                col1.appendChild(document.createTextNode(response2[ligne].id_contrat));

                // Affichage du numéro de facture : 
                var col2 = document.createElement('td');
                col2.setAttribute('id', 'contrat' + ligne + '-col2');
                if (response2[ligne].facture == null || response2[ligne].facture == '') {
                    col2.appendChild(document.createTextNode(''));
                } else {
                    col2.appendChild(document.createTextNode(response2[ligne].facture));
                }

                // Affichage de la date du contrat :
                var col3 = document.createElement('td');
                col3.setAttribute('id', 'contrat' + ligne + '-col3');
                col3.appendChild(document.createTextNode(response2[ligne].date_contrat));

                // Affichage du type de contrat : 
                var col4 = document.createElement('td');
                col4.setAttribute('id', 'contrat' + ligne + '-col4');
                col4.appendChild(document.createTextNode(response2[ligne].batiment));

                // Affichage du début du contrat : 
                var col5 = document.createElement('td');
                col5.setAttribute('id', 'contrat' + ligne + '-col5');
                col5.appendChild(document.createTextNode(response2[ligne].date_debut));

                // Affichage de fin de contrat : 
                var col6 = document.createElement('td');
                col6.setAttribute('id', 'contrat' + ligne + '-col6');
                col6.appendChild(document.createTextNode(response2[ligne].date_fin));

                // Affichage du total de contrat : 
                var col7 = document.createElement('td');
                col7.setAttribute('id', 'contrat' + ligne + '-col7');
                col7.appendChild(document.createTextNode(response2[ligne].total_contrat));

                // Affichage des actions : 
                var col8 = document.createElement('td');
                col8.setAttribute('class', 'align-droite');


                // Bouton loupe
                var button1 = document.createElement('button');
                button1.setAttribute('type', 'button');
                button1.setAttribute('class', 'card-btn');
                var incon1 = document.createElement('i');
                incon1.setAttribute('class', 'fa fa-search');
                button1.appendChild(incon1);
                col8.appendChild(button1);

                // Bouton crayon
                var button2 = document.createElement('button');
                button2.setAttribute('type', 'button');
                button2.setAttribute('class', 'card-btn');
                var incon2 = document.createElement('i');
                incon2.setAttribute('class', 'fa fa-pencil');
                button2.appendChild(incon2);
                col8.appendChild(button2);


                var tr = document.createElement('tr');
                tr.appendChild(col1);
                tr.appendChild(col2);
                tr.appendChild(col3);
                tr.appendChild(col4);
                tr.appendChild(col5);
                tr.appendChild(col6);
                tr.appendChild(col7);
                tr.appendChild(col8);

                document.getElementById("liste-contrats").appendChild(tr);
            }
        } else {
            // Affichage d'une colonne vide' : 
            var col1 = document.createElement('td');
            col1.setAttribute('id', 'contrat' + ligne + '-col1');
            col1.setAttribute('colspan', '8');
            col1.appendChild(document.createTextNode('Aucun contrat pour ce client'));

            var tr = document.createElement('tr');
            tr.appendChild(col1);
            document.getElementById("liste-contrats").appendChild(tr);
        }
    },
    error: function(response2) {
        alert("Erreur requête Ajax");
        console.log('erreur ajax', response2);
    }
});

Et encore, le script ci-dessus ne permet "que" de visualiser les contrats, je n'ai pas encore attaqué leur création ou modification ! (certainement avec des fenêtres modales)

Ma question : Est-il possible d'obtenir la même souplesse d'utilisation avec PHP qu'avec JavaScript ? Peut-on par exemple avec PHP générer qu'une partie de page sans devoir tout recharger ? Si oui, comment faire ?

Dans l'image ci-dessous, j'affiche les contacts, contrats, factures, règlements et notes du client sélectionné sans recharger la page... Le choix d'un client dans la zone verte affecte directement le contenu de la zone jaune qui elle même est modifiée par le menu du bandeau situé dans la zone bleue... Je peux même me permettre le luxe de faire des fade-in ou fade-out !

Merci d'avance pour vos conseils !
 


Linux / Chrome 106.0.0.0

A voir également:

6 réponses

jordane45 Messages postés 38039 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 23 février 2024 4 622
24 oct. 2022 à 16:02

Bonjour

Ma question : Est-il possible d'obtenir la même souplesse d'utilisation avec PHP qu'avec JavaScript ? Peut-on par exemple avec PHP générer qu'une partie de page sans devoir tout recharger ? Si oui, comment faire ?

Non.


.
Cordialement,
Jordane

0
blackmefias_3350 Messages postés 705 Date d'inscription dimanche 20 septembre 2020 Statut Membre Dernière intervention 26 novembre 2023 57
24 oct. 2022 à 16:59

Bonjour,

Néanmoins, je pense qu'il est possible de d'imbriquer  du code Javascript dans un script en PHP. 

mais il faudra recharger votre page à chaque fois tout comme pour le PHP.


0
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 16
24 oct. 2022 à 19:29

En fait on est bloqué par l’exécution côté serveur du PHP ce qui implique le rechargement systématique de la page.
Ce qui est fastidieux avec JavaScript c'est de devoir tout écrire pour recréer un bloc HTML !

Si je ne veux pas passer des heures à aligner des appendChild ou setAttribute j'ai intérêt à appeler des pages PHP externe à l'aide d'une requête Ajax, ou éventuellement, pour donner l'illusion que le site est statique, à utiliser des input de type image pour appeler ces mêmes pages et des header("Location: $referer"); pour y revenir après un traitement  (?)

0
yg_be Messages postés 22483 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 février 2024 1 445
24 oct. 2022 à 21:39

bonjour,

PHP tourne sur le serveur et JavaScript tourne sur le client, ils sont donc complémentaires. 

L'utilisateur peut facilement bidouiller tout ce qui tourne sur le client.

0
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 16
25 oct. 2022 à 08:26

En fait il n'y a aucun risque puisque l'application est développée pour être utilisée en interne par 3 personnes...

0
charcom Messages postés 60 Date d'inscription jeudi 24 janvier 2013 Statut Membre Dernière intervention 3 novembre 2022 5 > emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023
3 nov. 2022 à 16:20

Le "aucun risque" n'existe pas avec Javascript. Parfois, la "bidouille" ou les effets indésirables liés au navigateur ou aux paramétrages du client, sont involontaires. Javascript donne l'impression de plus de souplesse, mais il n'est pas fiable car dépendant des paramètres et outils en local. Javascript et PHP sont complémentaires. L'un ne va pas sans l'autre, et trop de Javascript n'est pas bon (je me rappelle d'une époque où on disait "attention au Javascript, trop de failles" et aujourd'hui, les sites en abusent... d'où les bugs et blocages à tout va, en particulier quand ça implique la gestion de données et les réseaux). Javascript est à l'image de la société et des utilisateurs actuels : superficiel et non fiable, ça en jette, ça a l'air cool, mais c'est que du vent LOL

-1

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

Posez votre question
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 16
Modifié le 3 nov. 2022 à 19:37

Je ne suis pas assez compétent pour affirmer ou contredire ta remarque. Je me rends juste compte d'une chose : c'est que pour aboutir à mes fins et faire en sorte que mon site/application ressemble à un logiciel de gestion, je n'ai eu d'autre choix que d'utiliser ce JavaScript en question ! Je sais très bien que l'Html, CSS, Javascript, PHP et Ajax ne sont pas les meilleurs langages pour développer une application de gestion... Certains diront qu'ils ne sont pas fait pour ça ! Ils me permettent en tous cas de créer un outil, accessible par différents collaborateurs, à différents endroits du globe, en même temps, pour traiter des données relatives à notre activité !

Si j'ai ouvert ce post c'est parce que je me posais des question sur le fonctionnement de mon "application". Elle est écrite actuellement principalement en PHP. C'est pour cette raison qu'elle ne se comporte pas vraiment comme un logiciel (rechargement des pages, ouverture de nouvelles). Alors que je l'ai pratiquement terminée (elle est fonctionnelle depuis plusieurs mois en tous cas), je suis tombé sur ce template : https://uselooper.com/page-clients.html dont le fonctionnement (du moins la page de ce lien) correspond exactement à l'effet recherché.

Je ré-écris donc la carcasse (je conserve les requêtes, les variables, les inputs....) en m'inspirant de ce template. Dès l'écriture des premières lignes je me suis rendu compte que Javascript allait occuper la quasi totalité de mon code !

0

Salut,

AJAX n'est pas un langage mais une méthode qui utilise JavaScript et un langage serveur. Donc les 2 sont utiles comme déjà dit précédemment.

"Je sais très bien que l'Html, CSS, Javascript, PHP et Ajax ne sont pas les meilleurs langages pour développer une application de gestion..."

Ah bon, pourquoi? En réseau sur Internet c'est l'idéal il me semble.

Sinon il y a d'autres alternatives comme JAVA mais au final si vous générez des pages web c'est utile dans certains cas spécifique et il faudra de toute façon faire du HTML et du CSS.

Pour appuyer sur la différence entre JavaScript et PHP c'est que l'un fonctionne uniquement dans le navigateur une fois la page chargée et l'autre uniquement sur serveur avant que la page soit chargée, ce qui permet de générer le contenu dynamique(en lien avec la base).

D'où l'intérêt d'AJAX qui crée des fichiers de données avant qu'ils soient nécessaires si on veut éviter de recharger la page(et ça sert uniquement à cela).

En JavaScript on peut très bien modifier tout le contenu de la page comme on veut.

document.getElementsByTagName('body')[0]='la page est vidée';
//-- un exemple bébête juste pour montrer que ce n'est pas compliqué à faire

Donc tout dépends de ce que vous voulez faire. Côté souplesse le JavaScript l'est plus que tout autre langage. Cella à ses avantages et inconvénients, la sécurité par contre ne fait pas partie des avantages puisqu'il est simple de voir/accéder au code JavaScript puisque celui ci doit être utilisé par le navigateur il est toujours présent et donc accessible et donc modifiable. Il faut donc toujours avoir la sécurité(en plus de celle en JavaScript) entre les échanges client serveur ou serveur client et ça c'est le rôle du langage serveur qui fait le lien entre les 2(sans être disponible directement pour l'utilisateur).

Donc si vous vous demandez quel langage utiliser pour votre appli ce sera les 2: côté serveur (transfert et sécurité des données) PHP et côté JavaScript pour rendre la page plus interactive et ajouter de la programmation au HTML.

Le simple fait que le template que vous montrez utilise AJAX démontre bien que les 2 sont utilisés. Ils n'ont pas les mêmes rôles c'est tout:

*PHP: accéder à la base de données => générer du HTML à partir de cela(echo $maRequete) ou recevoir des données(un formulaire), les contrôler et les envoyer à la base de données( 'INSERT INTO $MesDonnees...')

*JavaScript: gérer tout ce qui est dans la page une fois celle ci chargée. Par exemple les clics, afficher/masquer un div, changer le texte d'un élément avec le contenu d'un fichier AJAX etc...

0
emrh Messages postés 425 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 16 janvier 2023 16
4 nov. 2022 à 11:01

Un "vrai" programme s'écrit en C non ? Enfin bref, ce qui m'intéresse c'est l'accès au "logiciel" à distance... donc WebAppli

 Je vais mettre de côté la partie sécurité du JavaScript, car encore une fois cette "application" est destinée à un usage privé, certes hébergée sur Internet mais accessible que par 3 utilisateurs. Je ne pense pas que cela soit dans leur intérêt de tout faire planter en désactivant le JavaScript par exemple ou en cherchant des failles dans clic droit "afficher la source" !

Avant d'entreprendre les modifications de mon site avec JavaScript, j'ai trouvé très pratique l'appel à des pages PHP pour des traitements spécifiques (notamment avec la bdd) et des retours à la page d'appel à l'aide de $referer = ($_SERVER['HTTP_REFERER']); + header("Location: $referer");  mais j'ai constaté ce rechargement de page propre à une page PHP rappelée (pas dramatique en soit).

J'ai donc voulu donner à mon appli un côté plus pro, c'est pour ça que j'essaie de tout refaire avec JavaScript. Mais c'est devant l'ampleur du travail d'écriture de pans entiers de code Js générant (Cf mon premier post) des morceaux de page que je me dit que cela allait être extrêmement fastidieux, complexe et rapidement illisible en cas de simple maintenance (longueur de page). J'aurais plutôt dû intituler mon post "Conseil d'organisation pour avoir une WebApplication plus pro". Par exemple pour la maintenance, savoir s'il est plus judicieux de faire appel à des scripts extérieurs à la page ? (affichagecontrats.js)... 

0