PHP AJAX CRUD : création, suppression, édition d'enregistrements dans la base de données MySQL. Paramètres de requête PHP-Swagger Ajout scrupuleux d'un message php

Aperçu

Le système de notification intégré, tout premier dans Joomla, permet à votre application de tenir l'utilisateur (ou le groupe d'utilisateurs) informé de divers événements différents. Considérez les notifications comme des alertes importantes que l'utilisateur serait intéressé à lire et à en suivre.
Les notifications peuvent être générées partout. Dans votre composant ou vos plugins et affiché plus tard dans le système de notification JomSocial.
Ce tutoriel va vous montrer comment faire, mais comme nous n'avons aucune idée de composant tiers que nous pourrions utiliser :) les exemples seront réalisés sur un plugin communautaire qui sera déclenché lors de l'événement onAfterProfileUpdate
Si vous ne savez pas comment créer un plugin qui se déclenchera sur cet événement, nous vous suggérons de consulter ce guide

L'implémenter dans votre composant de toute façon

Comme indiqué dans la présentation de ce didacticiel, nous générerons des notifications à l'aide du plugin communautaire.
Vous souhaiterez probablement créer des notifications dans votre composant ou votre plugin. Le didacticiel suivant fonctionnera dans tous ces cas. Il vous suffit de déterminer à quel moment de votre code la notification sera créée et de charger simplement le fichier JomSocial Core Libraries.

require_once JPATH_ROOT . "/components/com_community/libraries/core.php" ;

Suivre le tutoriel expliqué ci-dessous fonctionnera également très bien pour votre extension

Préparation de l'environnement de développement

1. Nous supposerons que vous avez déjà créé un exemple de plugin de type communauté qui sera déclenché lorsque l'utilisateur modifie son profil.
Sinon, vous pouvez télécharger un exemple de plugin vide à partir de , l'installer dans Joomla et activer le plugin. Il est nommé Communauté – Exemple de notifications
2. Accédez à votre base de données et videz ces deux tables afin qu'elles n'aient aucun enregistrement.

A) prefix_community_notification
b) préfixe_community_mailq

3. Ayez au moins deux (2) utilisateurs sur vos sites de test et connaissez leurs identifiants

Dans les versions antérieures de Joomla, les identifiants utilisateur commençaient toujours à partir d'un numéro spécifié (62, 42). Dans Joomla 3, ce numéro sera aléatoire, d'où l'image de notre environnement de test car il sera certainement différent de votre côté.

La première notification

Ouvrez le plug-in fichier php qui sera situé dans ROOT/plugins/community/example
Dans la fonction onAfterProfileUpdate() remplacez le

CNotificationLibrary::add ( $cmd , $actor , $target , $subject , $body , $template , $params ) ;

Comme le montre l'exemple, l'API d'ajout de notification a 7 paramètres

  • $cmd - est le type de notification. Vous pouvez voir tous les types de notifications dans ce fichier. ROOT/components/com_community/libraries/notificationtypes.php à partir de ou autour de la ligne 53. Nous vous recommandons d'utiliser le type de notification system_messaging.
  • $actor - est la personne qui réalise l'action
  • $target - est la personne ou le groupe de personnes qui recevra une notification
  • $subject - est le sujet de la notification, à la fois dans la fenêtre contextuelle de notification et dans le titre de l'e-mail.
  • $body - est le corps du message de notification par courrier électronique
  • $template - si vous avez besoin d'un modèle spécifique à utiliser, vous pouvez le définir ici. Sinon, ce paramètre peut être vide
  • $params - paramètres définis personnalisés
  • Sachant tout cela, définissons les variables que nous utiliserons
    Changez le code de votre plugin en :

    $user = CFactory::getUser();

    $cmd = "system_messaging" ;
    // premier paramètre, type d'activité $actor = $user -> id ;

    //deuxième paramètre - récupère l'identifiant de $actor $target = "965" ;

    // troisième paramètre. Qui reçoit la notification ? Dans notre environnement de développement, son utilisateur administrateur avec l'ID 965. Dans votre environnement, vous souhaiterez probablement obtenir l'ID de votre objet ou d'un groupe d'utilisateurs.


    $subject = "Objet de la notification" ;

    // Objet des notifications par e-mail et popup $body = ;

    $acteur = CFactory::getUser();

    $params = nouveau CParameter("" ) ;

    CNotificationLibrary:: add ( "system_messaging" , $actor -> "Ceci est le message du corps de notification" , "" , $params ) ;

    C'est beaucoup plus propre et plus facile à suivre tout en faisant absolument la même chose qu'un code présenté ci-dessus.
    Paramètres de notification personnalisés

    Une API de notification peut être étendue avec n'importe quel paramètre que vous souhaitez ajouter.

    • Ces paramètres peuvent être transmis soit au modèle d'e-mail, soit à la notification et, bien sûr, au fichier de langue. ); $acteur = CFactory::getUser();
    • $link = "http://www.google.com" ;
    • $params = nouveau CParameter("" ) ;
    • $params -> set ("acteur" , $acteur -> getDisplayName () ) ;

    // peut être utilisé comme balise (acteur) $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Lien pour la balise (acteur) $params -> set ("url" , $link ) ;//url de toute l'activité. Utilisé lors du survol de l'avatar dans la fenêtre de notification. Peut également être utilisé comme balise (url) dans les e-mails sortants. Assurez-vous d'avoir défini la variable $link :) CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , "Notification Subject" , "This is the notification body message" , "" , $params ) ;

    $params = nouveau CParameter(

    - Nous souhaitons créer un nouvel objet params et lui attribuer des données, sans avoir à définir formellement une classe.
    $params->set("acteur", $acteur->getDisplayName()); - Votre notification doit toujours avoir un acteur. Ce paramètre peut être transmis au modèle en tant que balise (acteur). Dans la fenêtre de notification, il définit l'utilisateur qui effectue une action.$params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id);

    CNotificationLibrary:: add ( "system_messaging" , $actor -> id , "965" , JText::sprintf ( "PLG_COMMUNITY_EXAMPLE_SUBJECT" ) , JText::sprintf ( "PLG_COMMUNITY_EXAMPLE_BODY" ) , "" , $params ) ;

    Le fichier de langue devrait ressembler à ceci

    PLG_COMMUNITY_EXAMPLE_SUBJECT = "Profil de (acteur) mis à jour" PLG_COMMUNITY_EXAMPLE_BODY = "Bonjour Administrateur \n Ceci est l'e-mail pour vous informer que le profil de (acteur) a été mis à jour \n\n Si vous souhaitez accéder à Google, cliquez ici \n a href=" _QQ_" (url)"_QQ_">(url)"

    Dans cet exemple, nous avons utilisé la balise (acteur) et (url) pour transmettre les données aux modèles de notification et d'e-mail. Voyons à quoi ça ressemble.
    Dans la fenêtre de notification lorsque vous survolez l'avatar, remarquez que le paramètre (url) est activé et ajoute le lien vers Google sur l'avatar. C'est intentionnel, car nous l'avons fait ainsi :)


    ]

    Dans la même fenêtre, au survol du lien acteur. C'est la partie où (acteur) fait écho à l'utilisateur qui effectue une action, tandis que (acteur_url)" veille à ce que l'objet soit correctement lié.


    Voyons ce qui se passe dans la file d'attente des e-mails


    Et enfin, l'e-mail réellement envoyé à l'utilisateur final


    Succès
    Jusqu'à présent, nous avons créé trois (3) paramètres qui sont utilisés avec succès dans la fenêtre de notification et dans les e-mails.

  • (acteur) - Renvoie le nom d'utilisateur de l'utilisateur qui réalise l'action
  • (actor_url) - Donne le attribuer à (l'acteur)
  • (url) - Ce n'est pas obligatoire, mais vous devriez toujours l'avoir dans votre notification. Il s'agit de l'URL principale où l'action dont nous sommes informés s'est produite.
  • De même, vous pouvez définir "

    • (cible) - si vous en avez besoin
    • (target_url) si vous en avez besoin dans votre notification.
    • (titre) - Couramment utilisé pour faire référence à un objet qui a généré une notification. Exemple : "L'utilisateur X a publié une nouvelle photo dans l'album Y." L'album Y est le titre ici
    • (title_url) - Comme pour les précédents, l'URL d'un objet qui a généré une notification.
    • (message) - Ce paramètre peut être utilisé pour définir (et faire écho) le message dans le corps de l'e-mail JomSocial.
    3,3K

    Afficher des messages à l'utilisateur est une action assez courante qu'une application Web doit effectuer. Cela peut se produire lors du traitement des formulaires, il peut s'agir de messages d'erreur, de messages vous invitant à vous inscrire lorsqu'un utilisateur tente d'accéder à une partie restreinte du site, et dans bien d'autres cas.

    Très souvent, la création et la sortie des messages sont séparées en différentes requêtes HTTP. En règle générale, il est pratique d'utiliser une redirection après le traitement des formulaires (pour éviter les problèmes avec les boutons Précédent et Actualiser), mais en même temps, le moment naturel pour créer un message est précisément le moment du traitement des formulaires et de l'exécution des actions qui l'accompagnent. il. Pourquoi? Imaginez que le texte du message ressemble à ceci : « Le nombre d'unités commandées pour l'article « Tapis de souris » a été modifié avec succès de 7 à 12. » Après une redirection, peut-être vers une page complètement différente en termes de fonctionnalités, ce sera un casse-tête supplémentaire pour déterminer ce qui a été fait auparavant.

    Le plus souvent, des messages sont affichés dans la requête POST qui traite le formulaire - ce n'est pas bon, les inscriptions « cette page est obsolète » gâchent la vie (lorsque l'utilisateur décide d'essayer le bouton Retour).

    Quelqu'un utilise une redirection, abandonnant les messages amicaux.

    En même temps, il existe un moyen simple et évident d’améliorer la vie. Malgré l'évidence, pour une raison quelconque, je n'ai jamais vu personne l'utiliser - du moins lorsque j'ai regardé les sources d'autres personnes.

    Nous avons donc un problème : le message doit « vivre » dans différentes requêtes. Nous avons besoin d'un mécanisme pour transférer le texte du message vers la page qui doit l'afficher. Vous vous souvenez probablement déjà des séances.

    Oui, en général, vous avez raison. D'autres méthodes, par exemple via une variable globale, ne permettent pas de sauvegarder les données dans le cas où une redirection est utilisée (note de Maxim Naumenko). De plus, je m'assure généralement que chaque écran de l'application a la capacité, avec d'autres informations, d'afficher les messages générés sur les écrans précédents. Ceci est pratique car il n'est pas nécessaire de préparer des écrans séparés pour l'affichage des messages et l'utilisateur n'a pas besoin de cliquer à nouveau avec la souris. Mais en réalité, le concepteur doit réfléchir ici : mettre en évidence la zone dans laquelle les messages apparaîtront.

    L'idée est très simple et peut être mise en œuvre avec quelques cours.

    La première chose qui nous vient à l’esprit est de créer une classe Message, qui représenterait en fait un message dans notre diagramme de classes simple. Le message doit pouvoir s'enregistrer dans la session, ainsi que s'afficher à l'écran.

    class Message ( /** * Contenu du message. */ var $content; /** * Constructeur pour initialiser le texte du message. * * @param content message content */ function Message($content) ( $this->content = $ content ; ) /** * Écrire un message sur la session. */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Afficher un message sur la page */ function toPage () ( echo. " - " . $this->content .
    "; } }

    La variable $_SESSION est utilisée pour accéder à la session.

    Notez que $_SESSION est un tableau, nous n'utilisons qu'un seul élément de ce tableau avec l'index 'session_message'.

    Dans ce cas, nous avons affaire à un « tableau de tableaux » - ce que nous stockons dans l'élément « session_message » est un tableau, c'est la liste des messages transmis (bien sûr, il peut y en avoir plusieurs).

    Si vous ne parvenez pas à trouver le fil de discussion, il est temps de revoir les sections du manuel dédiées aux sessions et aux tableaux.

    Vous avez peut-être une question. Pourquoi les cours sont-ils nécessaires ici ? Il serait possible de se contenter de deux fonctions. Mais regardons plus loin. Nous devrons peut-être créer des messages avec différents types(info, erreur, avertissement), déterminer les destinataires des messages.

    Veuillez noter que dans à l'heure actuelle Ce n'est pas l'objet lui-même qui est placé dans la session, mais uniquement le texte du message. La POO nous permet de modifier ultérieurement le comportement de la méthode send() sans changer le code client qui accède à cette méthode (par exemple, à l'avenir, nous pourrons écrire l'intégralité de l'objet Message dans la session s'il comporte de nombreux champs).

    Imaginons que nous ferions cela en utilisant des fonctions. Nous aurions probablement une fonction message_send($txt), et nous aurions également une fonction message_to_page($txt). Nous devons maintenant ajouter la possibilité d'avoir un comportement différent pour différents types de messages. Les appels de fonction changent : message_send($txt, $kind), message_to_page($txt, $kind). Vous devrez parcourir l'intégralité du code de l'application à la recherche de telles fonctions et apporter des corrections.

    Cela peut être évité en anticipant la situation à l'avance en représentant le message sous forme de tableau associatif : $msg['txt'], $msg['kind'], il n'y aura alors qu'un seul paramètre dans les appels de fonction. Pouvez-vous sentir à quel point cela essaie de devenir une classe ?

    Ainsi, la POO vous donne la possibilité d’avoir le luxe de ne pas tout réfléchir à l’avance.

    La classe suivante - Inbox - est destinée uniquement à cela.

    class Inbox ( /** * Tableau des messages reçus. */ var $messages = array(); /** * Dans le constructeur, nous récupérons tous les messages reçus * et les supprimons de la session. */ function Inbox() ( if (is_array($ _SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); pour ($i = 0; $i< $co; $i++) { $this->messages = nouveau message($messages[$i]);
    ) ) /* effacer le tableau des messages */ $_SESSION["session_messages"] = array();< $co; $i++) { $this->) /** * Afficher le contenu de la boîte de réception sur la page.

    */ function toPage() ( $co = sizeof($this->messages); if ($co > 0) ( echo "Message du système :

    "; ) pour ($i = 0; $i

    messages[$i]->VersPage();

    ) ) )

    Essayons notre système de messagerie.

    Créons un exemple très simple qui répondra à la soumission d'un formulaire en indiquant le nombre de secondes dans la minute en cours.

    Nous avons caché tout le travail avec les tableaux et les sessions dans les classes, et le code final semble simple et beau.
    Créez un répertoire sur votre serveur Web, puis créez-y ces trois fichiers et essayez le script. Veuillez noter qu'il n'y a aucun problème avec les boutons Précédent et Actualiser. Imaginez maintenant que vous créez un portail complexe, où, en règle générale, il y a plusieurs blocs sur les pages, et chacun peut contenir une application distincte. Nous rencontrons ici deux difficultés :
    * J'aimerais que la liste des messages apparaisse dans une partie spécifique de la page, et vous avez déjà trouvé un bon endroit pour cela. Le problème est que vous devez exécuter la commande $inbox->toPage() exactement au moment qui correspondrait à la position de la liste des messages sur la page. Si nous voulons changer la position de cette liste, nous devrons entrer dans le code, mais il n'est pas bon de changer constamment le cadre du portail pour cela. La meilleure solution
    Il serait possible d'émettre des messages sous la forme d'un module séparé, dont on sait seulement qu'il doit être connecté au cadre.

    Autrement dit, libérez-vous de la séquence stricte de lancement des modules. En effet, puisque le résultat de la sortie Inbox ne dépend pas du fonctionnement du système (sur

    Peut-être aurons-nous encore plusieurs éléments similaires (à Inbox) et nous devrons créer un système tampon. Afin de ne pas confondre à qui appartient la sortie, nous en viendrons probablement à nommer les tampons. Nous stockerons quelque part la séquence selon laquelle les tampons doivent être sortis - de préférence dans un fichier externe pour faciliter les modifications.

    Cette tentative de solution nous donne déjà l'idée d'utiliser XML comme moyen de stockage de données intermédiaires. Et l'utilisation des styles XSLT aidera à résoudre le deuxième problème.

    Je ne m'attarderai pas sur ce qu'est XML et ce qu'est XSLT. Si vous n'êtes pas familier avec ces choses, zvon.org est un bon endroit pour commencer vos recherches.

    L'idée est de générer non pas du code HTML, mais une structure XML dans les méthodes toPage(). Le document de page sera créé sous forme de chaîne avec du code XML (il servira de « tampon »), et à la dernière étape du script nous utiliserons une transformation XSL.

    Tout d'abord, imaginons quel devrait être le résultat de la partie principale du code.

    minute 57 secondes : 45

    Ce que c'est est assez facile à deviner : deux messages et un formulaire. Veuillez noter que le script PHP n'a besoin que de préparer une telle chaîne - c'est très simple. De plus, l'ordre des balises principales n'a pas d'importance - vous pouvez les mettre au début, par exemple, comme cela conviendra au programmeur. Comment le mettre en œuvre. Vous pouvez, sans rien changer, utiliser la mise en mémoire tampon de sortie, produire du XML au lieu du code HTML et, à la fin, simplement capturer la sortie dans une chaîne. Mais nous perdrons alors de la flexibilité - par exemple, vous souhaitez parfois afficher les informations de débogage directement sur la page (en utilisant echo). En même temps, Développeurs PHP travaillent sur un module DOM qui offre une manière plus avancée de créer et de transmettre des documents arborescents. Si nous voulons implémenter le DOM, nous devrons repenser l'ensemble de l'application, en modifiant la sortie des chaînes pour créer des éléments DOM. Par conséquent, je préfère stocker la représentation XML des objets dans les objets eux-mêmes, en assemblant séquentiellement un document XML commun. Ce n'est pas si difficile, il faut juste une petite modification. Vous verrez que cette technique n'est pas strictement liée à une manière spécifique de stocker les données XML, ce qui vous permettra de faire la transition vers l'utilisation du DOM à peu de frais. Tout d’abord, notez que chacun de nos objets possède une méthode toPage(). Cette similarité devrait nous faire réfléchir à l’introduction d’une nouvelle classe parent commune. Laissez chaque classe capable de créer des morceaux d'un document XML pour une page hériter d'une classe qui s'occupera de la représentation XML de l'objet. Appelons-le Outputable.

    class Outputable ( /** * Conteneur XML (chaîne). */ var $output = ""; /** * Donne le contenu du conteneur et efface le conteneur. * * @renvoie une chaîne avec des données XML */ function getOutput () ( $ out = $this->output; $this->output = ""; return $out; ->output .= $string . "n" ) /** * Méthode "Abstraite" */ fonction toPage( ) ( ) )

    La méthode toPage() est rendue vide - dans ce cas, elle est nécessaire comme indicateur de la manière dont les classes « matriochka » externes doivent communiquer avec la classe interne. Cependant, nous pourrions proposer ici une implémentation par défaut si nous remarquions que de nombreux objets s'affichent sur la page de la même manière.

    Les classes Message et Inbox changeront légèrement - elles devraient désormais toutes deux hériter de Outputable, et les méthodes toPage() changeront également
    Message.php

    class Message extends Outputable ( /** * Contenu du message. */ var $content; /** * Constructeur pour initialiser le texte du message. * * @param content message content */ function Message($content) ( $this->content = $content; ) /** * Écrire un message à la session */ function send() ( $_SESSION["session_messages"] = $this->content; ) /** * Afficher un message sur la page ( $. this->appendOutput("".$this->content."" ) )

    class Inbox extends Outputable ( /** * Tableau des messages reçus. */ var $messages = array(); /** * Dans le constructeur, nous recevons tous les messages reçus * et les supprimons de la session. */ function Inbox( ) ( if (is_array ($_SESSION["session_messages"])) ( $messages = $_SESSION["session_messages"]; $co = sizeof($messages); pour ($i = 0; $i< $co; $i++) { $this->messages = nouveau message($messages[$i]);< $co; $i++) { $this->) ) /* effacer le tableau des messages */ $_SESSION["session_messages"] = array();

    ) /** * Afficher le contenu de la boîte de réception sur la page.

    */ fonction toPage() ( $co = sizeof($this->messages); $this->appendOutput(""); pour ($i = 0; $i
    messages[$i]->toPage();

    $this->appendOutput($this->messages[$i]->getOutput()); ) $this->appendOutput("");) )

    La méthode de sortie a changé - désormais, au lieu de sortir directement sur la page, la représentation externe est pour le moment stockée dans Outputable, qui « se trouve » dans chacun des objets. La méthode appendOutput() remplace la construction echo(). Pour obtenir la sortie d'un objet, la méthode getOutput() est utilisée.

    Voyons maintenant quelle est la partie client du code, qui résoudra le même problème que précédemment.
    index.php

    La principale innovation réside dans l’objet $global_content dont le nom parle de lui-même. Dans ce cas, il appartient à la classe Outputable, dans

    de vrais problèmes

    vous créerez probablement une classe distincte pour le contenu de la page.

    Si vous regardez attentivement, le contenu du script n'a pratiquement pas changé - la même boîte de réception, la même toPage(). Ajout d'une instruction qui affiche le contenu de la liste des messages dans le contenu de la page. Pour plus de variété, deux messages sont désormais générés.

    Pour visualiser le résultat, il ne reste plus qu'à préparer le modèle XSL.

    Un autre avantage est la facilité de débogage. Si vous exécutez le script, vous remarquerez que chaque page contient une sortie de débogage – un prototype XML qui simplifie grandement les applications de débogage.

    Une autre chose à laquelle vous devez penser est la façon de créer des objets de message. Il n'est pas toujours pratique d'utiliser new directement dans le code client. Mais c'est peut-être un sujet pour un article séparé.

    Enfin, un galop sur les perspectives :

    * fenêtres pop-up pour une liste de messages importants
    * "pages d'expéditeur" et "pages de destination" dans les messages
    * enregistrer les messages dans la base de données
    * bouton "afficher l'historique de mes actions"
    * analyse statistique des actions des utilisateurs au sein des sessions
    * "assistants intelligents" dans les applications Web

    dans mon application Zend, j'écris une petite API pour applications mobiles. Pour faciliter la tâche des développeurs mobiles, j'utilise Swagger. Jusqu'à présent, tout fonctionne bien, à l'exception d'une requête GET.

    Quand dois-je appeler /user/messages/(sessionToken) ? NumMessages = (numMessages) & pageNr = (pageNr) dans le navigateur, j'obtiens les résultats souhaités, mais lorsque j'essaie de laisser Swagger exécuter cette requête, seul le sessionToken est transmis. J'ai essayé ces annotations pour Swagger :

    /** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * summary=" Obtient les messages paginés", * notes="", * type="string", * pseudo="getUsermessagesPaged", * autorisations=(), * @SWG\Parameter(* name="sessionToken", * description="Le jeton à partir d'une session utilisateur active", * requis=true, * type="string", * paramType="path", *allowMultiple=true *), * @SWG\Parameter(* name="numMessages", * description=" nombre de messages sur la page (numMessages et pageNr sont ignorés si les deux ne sont pas définis)", * requis=true, * type="string", * paramType="query", *allowMultiple=true *), * @SWG\Parameter (* name="pageNr", * description="pagenumber (numMessages & pageNr sont ignorés si les deux ne sont pas définis)", * requirejs=true, * type="string", * paramType="query", *allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (messages => "user_messages")"), * @SWG\ResponseMessage(code=400, message="json avec erreur "non connecté"" ) *) *) */

    Est-ce que quelqu'un voit mon erreur ?

    Toute aide est la bienvenue.

    Sincèrement

    Mise à jour. Comme suggéré, j'ai changé les deux paramTypes en "query" et j'ai changé le chemin :

    @SWG\Api(chemin="/user/messages/(sessionToken)",

    mais il n'a pas travaillé comme combattant.

    xdebug dans Eclipse PDT montre :

    RequestURI => /ias/public/user/messages/(sessionToken)

    QueryParams => Zend\\Stdlib\\Parameters - *ArrayObject*storage => Array - =>

    JSON fanfaron :

    ( "apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [ ( "path": "\/user", "description": "Opérations sur les utilisateurs" ) ], "info" : ( "title": "API d'accès mobile", "description": "Voici l'API d'accès mobile xxx.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "comment": "\/**\ * @SWG\\Info(\ * title="API d'accès mobile",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

    Voici le résultat de /user :

    ( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "path": "/user/balance/(sessionToken)", "opérations": [ ( "method": "GET", "summary": "Obtient le solde utilisateur", "nickname": "getUserdata", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Le jeton d'une session utilisateur active" ) ], "responseMessages": [ ( "code": 200, "message": "json (balance => "user_balance")" ), ( "code": 400, "message ": "json avec erreur "non connecté"" ) ], "notes": "", "autorisations": () ) ]), ( "chemin": "/user/login", "opérations": [ ( "method": "POST", "summary": "Journaux utilisateur dans le system", "nickname": "loginUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "email", "type": "string", " requis": vrai, "allowMultiple": faux, "description": " L'utilisateur email de connexion"), ( "paramType": "form", "name": "password", "type": "string", "required": true, "allowMultiple": false, "description": "Le mot de passe pour la connexion en texte clair" ) ], "responseMessages": [ ( "code": 200, "message": "json avec session_id, user_id, user_balance" ), ( "code": 400, "message": "json avec erreur "aucun utilisateur avec email et mot de passe donnés"", ( "code": 400, "message": "json avec erreur "entrée invalide"" ), ( "code": 400, "message": "json avec erreur " aucune demande de publication"" ) ], "notes": "", "autorisations": () ) ]), ( "chemin": "/user/logout", "opérations": [ ( "méthode": "POST " , "summary": "Déconnecte l'utilisateur", "nickname": "logoutUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", " type": "string", "required": true, "allowMultiple": false, "description": "Le jeton d'une session utilisateur active" ) ], "responseMessages": [ ( "code": 200, "message" ": "json (résultat => "supprimé")" ), ( "code": 400, "message": "json avec l'erreur "pas de session utilisateur avec le sid donné"" ), ( "code": 400, "message" : "json avec erreur "entrée invalide"" ), ( "code": 400, "message": "json avec erreur "pas de demande de publication"" ) ], "notes": "", "autorisations": () ) ] ), ( "path": "/user/messages/(sessionToken)", "opérations": [ ( "method": "GET", "summary": "Obtient de nouveaux messages", "nickname": "getUsermessages" , "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false , "description": "Le jeton d'une session utilisateur active" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code" : 400, "message": "json avec erreur "non connecté"" ) ], "notes": "", "autorisations": () ), ( "method": "GET", "summary": "Obtient messages paginés", "nickname": "getUsermessagesPaged", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "description": "Le jeton d'une session utilisateur active" ), ( "paramType": "query", "name": "numMessages", "type": "string", "required": true, "description": "nombre de messages sur la page (numMessages et pageNr sont ignorés si les deux ne sont pas définis)" ), ( "paramType": "query", "name": "pageNr", "type": "string ", "required": true, "description": "pagenumber (numMessages & pageNr sont ignorés si les deux ne sont pas définis)" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json avec erreur "non connecté"" ) ], "notes": "", "autorisations": () ) ] ), ( "chemin": "/user/userdata", "opérations": [ ( "method": "POST", "summary": "Posts userdata", "nickname": "postUserdata", "type": "string" , "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Le jeton depuis une session utilisateur active"), ( "paramType": "form", "name": "password", "type": "string", "required": false, "allowMultiple": false, "description": " nouveau mot de passe" ), ( "paramType": "form", "name": "adresse", "type": "string", "required": false, "allowMultiple": false, "description": "nouvelle adresse" ), ( "paramType": "form", "name": "housenr", "type": "string", "required": false, "allowMultiple": false, "description": "new housenr" ), ( "paramType": "form", "name": "zip", "type": "string", "required": false, "allowMultiple": false, "description": "new zip" ), ( "paramType" : "form", "name": "city", "type": "string", "required": false, "allowMultiple": false, "description": "nouvelle ville" ), ( "paramType": "form ", "name": "email", "type": "string", "required": false, "allowMultiple": false, "description": "new email" ) ], "responseMessages": [ ( "code" : 200, "message": "json (user => "userdata")" ), ( "code": 400, "message": "json avec erreur "non connecté"" ) ], "notes": "" , "authorizations": () ) ]), ( "path": "/user/userdata/(sessionToken)", "opérations": [ ( "method": "GET", "summary": "Obtient les données utilisateur", "nickname": "getUserdata", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Le jeton d'une session utilisateur active" ) ], "responseMessages": [ ( "code": 200, "message": "json (user => "userdata", user_limit => "userLimits")" ), ( "code": 400, "message": "json avec erreur "non connecté"" ) ], "notes": "", "authorizations": () ) ] ) ], "produit": [ "application/json" ] )

    Cela ressemble à une erreur que mon swagger-ui n'envoie aucun paramètre de requête ? Voici un exemple avec un paramètre de requête, sessionToken : (contrôlé par FireBug 2.0.6)

    GET /ias/public/user/balance HTTP/1.1 Hôte : localhost User-Agent : Mozilla/5.0 (Windows NT 6.1 ; WOW64 ; rv:33.0) Gecko/20100101 Firefox/33.0 Accepter : application/json Accepter-Langue : de, en-US;q=0.7,en;q=0.3 Accepter l'encodage : gzip, deflate Type de contenu : application/json Référent : http://localhost/ias/swagger/ Cookie : __utma=111872281.581414660.1366700677.1394721873.1394723866.255 ; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Connexion : keep-alive

    La réponse était :

    HTTP/1.1 400 Demande incorrecte Date : mar. 25 novembre 2014 14:58:20 GMT Serveur : Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By : PHP/5.5.12 Longueur du contenu : 25 Connexion : fermer Type de contenu : application/json ; jeu de caractères = utf-8

    La réponse était correcte car aucun sessionToken n'a été transmis.

    Cela demande du travail, mais cela ne vient pas de swagger-ui :

    GET /ias/public/user/balance?sessionToken=HTTP/1.1 Hôte : localhost User-Agent : Mozilla/5.0 (Windows NT 6.1 ; WOW64 ; rv:33.0) Gecko/20100101 Firefox/33.0 Accepter : text/html,application/ xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Langue acceptée : de,en-US;q=0.7,en;q=0.3 Encodage accepté : gzip, deflate Cookie : __utma=111872281.581414660 .1366700677.1394721873.1394723866.255 ; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Connexion : keep-alive

    Finalement, j’ai réalisé : on ne pouvait pas trouver quelqu’un de mieux que sa femme. Il ne reste plus qu'à trouver une femme

    PHP AJAX CRUD : création, suppression, édition d'enregistrements dans la base de données MySQL

    Dans cet article, nous apprendrons comment ajouter, modifier et supprimer des enregistrements dans une base de données MySQL à l'aide de PHP. Nous avons utilisé un gestionnaire JQuery qui envoie une requête AJAX à un script côté serveur. Le gestionnaire met à jour la liste des enregistrements.

    Formulaire AJAX pour l'envoi de demandes de création, suppression, modification

    Lors de l'ajout d'un enregistrement, le formulaire envoie Données PHP script via requête AJAX. Si l'ajout réussit, la liste des entrées est rechargée.

    Fonctions JQuery AJAX pour la requête de base de données CRUD

    DANS Fonctions jQuery AJAX, nous avons un cas de changement, ajoutez, modifiez et supprimez. Ces cas génèrent différentes chaînes de données de requête et de réponse en fonction des actions de la base de données.

    fonction showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + " .message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) function CancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(message); $("#frmAdd").show(); function callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ( case "ajouter " : queryString = "action="+action+"&txtmessage="+ $("#txtmessage").val(); break case "edit": queryString = "action="+action+"&message_id="+ id + " &txtmessage ="+ $("#txtmessage_"+id).val(); break; case "delete": queryString = "action="+action+"&message_id="+ id; break; ) jQuery.ajax(( url: " crud_action.php", data:queryString, tapez : "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); break ; case "edit": $("#message_" + id + " .message-content").html(data); $("#frmAdd").show();

    Script PHP pour les opérations CRUD

    Le code suivant effectue des requêtes sur la base de données. Ce script PHP, après avoir effectué une action CRUD, met à jour les enregistrements suite à la réponse AJAX.

    require_once("dbcontroller.php"); $db_handle = nouveau DBController(); $action = $_POST["action"]; if(!empty($action)) ( switch($action) ( case "add": $result = mysql_query("INSERT INTO comment(message) VALUES("".$_POST["txtmessage"].")" ) ; if($result)($insert_id = mysql_insert_id(); echo " Edit Supprimer " . $_POST["txtmessage"] . " "; ) break; $result = mysql_query("UPDATE comment set message = "".$_POST["txtmessage"]."" WHERE id=".$_POST["message_id"]); if($result) echo $_POST["txtmessage"]; break; case "delete": if ( !empty($_POST["message_id"])) ( mysql_query("DELETE FROM comment WHERE id=".$_POST["message_id"]); ) break) )