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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    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
    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')");
     
    ?>

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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.

  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 confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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 !!!

  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 confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    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.

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