IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Envoyer les données saisies d'un formulaire angularJS dans la bdd mysql


Sujet :

AngularJS

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut Envoyer les données saisies d'un formulaire angularJS dans la bdd mysql
    Bonjour,

    J'ai crée un formulaire avec angularJS et je souhaiterais envoyer dans la base de données les infos saisies par l'utilisateur via ce formulaire. Mais je n'y arrive pas. Aidez-moi merci.
    Voici mon formulaire index.html :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <meta charset="utf-8" />
            <meta name="format-detection" content="telephone=no" />
            <meta name="msapplication-tap-highlight" content="no" />
            <!-- WARNING: for iOS 7, remove the width=device-width and height=device-height attributes. See https://issues.apache.org/jira/browse/CB-4323 -->
            <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height, target-densitydpi=device-dpi" />
            <link href='http://fonts.googleapis.com/css?family=Merriweather:400,700' rel='stylesheet' type='text/css'>
    		<link rel="stylesheet" type="text/css" href="css/style.css" />
            <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
     
    		<!--Controllers----->
    		<script src="js/controllers/menu.js"></script>	
     
    		<title>Notre appli</title>
        </head>
        <body>
    <div ng-app="formApp">
     
    <div ng-controller="FormController">
     
    <form action="insert.php" method="Post">
    <label class="labelNom" for="Nom">Nom :</label>
    <input id="Nom" type="text" class="inputNom" name="Nom" ng-model="Nom" /> <br/><br/>
     
    <label class="labelPrenom" for="Prenom">Prenom :</label>
    <input id="Prenom" type="text" class="inputPrenom" name="Prenom" ng-model="Prenom" /><br/><br/>
     
    <label class="labelAge" for="Age">Age :</label>
    <input id="Age" type="text" class="inputAge" name="Age" ng-model="Age" /><br/><br/>
     
    <label class="labelMail" for="Email">Email :</label>
    <input id="Email" type="email" class="inputmail" name="Email" ng-model="Email" /><br/><br/>
     
    <label class="labePays" for="Pays">Pays :</label>
    <SELECT id="Pays" type="pays" class="selectpays"  name="pays" ng-model="Pays">
    <OPTION>France
    <OPTION>Italie
    <OPTION>Gabon
    </SELECT>
    <br/><br/>
    <input type="button"  value="ajouterPerson" ng-click="insertdata()"/><br/>
    </form>
    </div>
    </div>
    </body>
    </html>

    Voici mon fichier JS menu.js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    'use strict';
     
    var myApp = angular.module('formApp', []);
     
    // On ajoute à notre application un contrôleur FormController
    myApp.controller('FormController', function($scope, $http) {
     
    	$scope.insertdata = function(){
    		$http.post('insert.php',{
    		'nom':$scope.Nom,
    		'prenom':$scope.Prenom,
    		'Age':$scope.Age,
    		'Email':$scope.Email,
    		'pays':$scope.Pays})
    						.success(function(data,status, headers, config){
    							console.log("data inserted Successfully");}).
     
    	}			
     
     
    });
    Voici le fichier qui est sensé traiter les données du formulaire pour les envoyer dans la base insert.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php 
    $data = json_decode(file_get_contents("php://input"));
    $nom=mysql_real_escape_string($data->Nom);
    $prenom=mysql_real_escape_string($data->Prenom);
    $age=mysql_real_escape_string($data->Age);
    $email=mysql_real_escape_string($data->Email);
    $pays=mysql_real_escape_string($data->Pays);
    mysql_connect("localhost","root"," ");
    mysql_select_db("angular");
    mysql_query("INSERT INTO angular(nom,prenom,age,mail,pays) VALUES('$nom','$prenom','$age','$email','$pays')");
     
    ?>
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Angular est exécuté côté client, pas côté serveur.

    Un tel code ne peut pas fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="insert.php" method="Post">
    La webapp n'a pas insert.php à dispo.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tu n'as pas de message d'erreur dans la console ? Lu rapidement, ton code parait logique.

    As tu bien accès à insert.php ?
    Ensuite, Php ne retourne-t-il pas une erreur dans Firebug ?

  4. #4
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    What ?

    PHP s'exécute côté serveur, Angular s'exécute côté client. Ce code n'a rien de rationnel !!!
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Invité
    Invité(e)
    Par défaut
    Pourquoi ce n'est pas rationnel?

    $HTTP de Angular envoie les variables au fichier PHP, qui récupère les variables puis les injecte dans la base de données Mysql.

    J'ai déjà fait du code comme ça pour une authentification, même si je n'ai pas un niveau terrible.

    Avec Jquery, on envoie sans arrêt des variables aux fichiers PHP qui enregistre les variables en base de données.
    • Php décode les objets JSON à l'aide de la fonction json_decode();
    • Php encode les objets JSON à l'aide de la fonction json_encode();



    C'est comme cela que l'on fait communiquer Javascript et PHP.

    C'est comme cela que l'on peut créer des applications AngularJs avec un Back-End en langage PHP, qui attaque une base de données MySQL (Php ne sert qu'à faire des requêtes SQL dans mysql, avec les données Json qu'il a converti):

    Exemple :
    http://nicolash.org/angular/angular_example.html


    Article :
    https://nicolashcodes.wordpress.com/...r-suppression/
    Dernière modification par Invité ; 20/10/2015 à 13h35.

  6. #6
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    C'est comme cela que l'on peut créer des applications AngularJs avec un Back-End en langage PHP, qui attaque une base de données MySQL (Php ne sert qu'à faire des requêtes SQL dans mysql, avec les données Json qu'il a converti):
    Non non non et non et 100 fois non. Une webapp en SPA doit communiquer avec des webservices et pas exécuter des scripts arbitraires sur le serveur. Et j'ai envie de dire, peu importe le framework javascript utilisé.

    Le tuto que tu as linké est un anti-pattern, certainement pas un exemple à suivre.

    Outre le fait que le code angular est bourré de mauvaises pratiques (contrôleur contenant de la logique implémentée dans le $scope, utilisation de variables primaires dans le $scope, déclaration de l'application dans le même fichier que la déclaration d'un composant, etc ... J'ai beaucoup de mal à comprendre comment ce code peut fonctionner en l'état en production.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $http.get("db.php?action=get_product").success(function(data)
            {
                //$scope.product_detail = data;   
                $scope.pagedItems = data;    
     
            });
    Il n'y a pas de mention à un nom de domaine. Donc le db.php est recherché en local. Donc à l'endroit où le html est traité c'est à dire dans le navigateur. Comment un navigateur pourrait-il exécuter db.php et attaquer un db mysql ? Un script php doit être exécuté par un module dédié dans un serveur web.

    Tout ça n'a donc aucun sens et met simplement en lumière des lacunes incroyables en architecture.

    Donc si tu veux faire fonctionner un vieux site php avec Angular, la 1ère étape est de refactorer le back en lui faisant exposer des services web encapsulant l'ancienne logique.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  7. #7
    Invité
    Invité(e)
    Par défaut
    Il n'y a pas de mention à un nom de domaine. Donc le db.php est recherché en local. Donc à l'endroit où le html est traité c'est à dire dans le navigateur. Comment un navigateur pourrait-il exécuter db.php et attaquer un db mysql ? Un script php doit être exécuté par un module dédié dans un serveur web.
    Je ne comprends pas pourquoi tu dis que db.php est recherché en local ?

    Ce n'est pas le navigateur qui exécute db.php, c'est db.php qui s'exécute sur le serveur et renvoie une réponse au navigateur.
    On se sert de Callbacks pour gérer tout cela.

    Si cela ne fonctionne pas, alors pourquoi mon script fonctionne en ligne?
    Exemple :
    http://nicolash.org/angular/angular_example.html

    je n'ai pas prétendu que c'était la norme à suivre, cependant, cela démontre qu'il est possible d'utiliser Angular et PHP en symbiose pour écrire dans une Base de données relationelle(Mysql), comme ce que MInfo25 demande initialement.

    Je suis par ailleurs d'accord, c'est un casse tête de faire marcher Angular et Php en symbiose pour gérer de la base de données relationnelle, car un objet
    JSON est difficile à enregistrer dans une Base de données relationelle.

    Merci néanmoins de ta réponse.

  8. #8
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par MoumouteMasters Voir le message
    Je ne comprends pas pourquoi tu dis que db.php est recherché en local ?
    Parce que je me suis trompé. $http accepte les chemins relatifs en prenant la racine du serveur automatiquement.

    Citation Envoyé par MoumouteMasters Voir le message
    je n'ai pas prétendu que c'était la norme à suivre, cependant, cela démontre qu'il est possible d'utiliser Angular et PHP en symbiose pour écrire dans une Base de données relationelle(Mysql), comme ce que MInfo25 demande initialement.
    MySQL n'a rien à voir la dedans. Je parle de l'interface Angular / PHP.

    'fin bref

    Citation Envoyé par MoumouteMasters Voir le message
    Je suis par ailleurs d'accord, c'est un casse tête de faire marcher Angular et Php en symbiose pour gérer de la base de données relationnelle, car un objet
    JSON est difficile à enregistrer dans une Base de données relationelle.
    Non on est pas d'accord, je ne parle pas de BDD, cela n'a rien à voir avec ce que je voulais dire. Je parlais d'utiliser un script sous cette forme comme façade pour le serveur.

    C'est pas grave, ça "marche".
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/04/2009, 16h07
  2. Réponses: 3
    Dernier message: 23/04/2009, 12h44
  3. Réponses: 3
    Dernier message: 05/09/2008, 07h41
  4. Réponses: 12
    Dernier message: 14/02/2008, 04h31
  5. Réponses: 8
    Dernier message: 19/05/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo