Внимателно добавете съобщение php. PHP AJAX CRUD: създаване, изтриване, редактиране на записи в базата данни MySQL

В крайна сметка разбрах: не можеш да намериш по-добра от жена си. Остава само да си намери жена

PHP AJAX CRUD: създаване, изтриване, редактиране на записи в базата данни MySQL

В тази статия ще научим как да добавяме, редактираме и изтриваме записи в MySQL база данни с помощта на PHP. Използвахме JQuery манипулатор, който изпраща AJAX заявка към сървърен скрипт. Манипулаторът актуализира списъка със записи.

AJAX форма за изпращане на заявки за създаване, изтриване, редактиране

При добавяне на запис формулярът изпраща данни към PHP скрипта чрез AJAX заявка. Ако добавянето е успешно, списъкът със записи се презарежда.

JQuery AJAX функции за CRUD заявка към база данни

Във функцията JQuery AJAX имаме превключващи случаи, добавяне на редактиране и изтриване. Тези случаи генерират различни низове от данни за заявка и отговор в зависимост от действията на базата данни.

функция showEditBox(id) ( $("#frmAdd").hide(); var currentMessage = $("#message_" + id + " .message-content").html(); var editMarkUp = ""+currentMessage+" SaveCancel"; $("#message_" + id + " .message-content").html(editMarkUp); ) функция cancelEdit(message,id) ( $("#message_" + id + " .message-content") .html(message); $("#frmAdd").show(); ) функция callCrudAction(action,id) ( $("#loaderIcon").show(); var queryString; switch(action) ( case "add ": 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, type: "POST", success:function(data)( switch(action) ( case "add": $("#comment-list-box").append(data); прекъсване; случай "редактиране": $("#message_" + id + " .message-content").html(данни); $("#frmAdd").show(); прекъсване; случай "изтриване": $("#message_"+id).fadeOut(); прекъсване; ) $("#txtmessage").val(""); $("#loaderIcon").hide(); ), грешка:функция ()() )); )

PHP скрипт за CRUD операции

Следният код изпълнява заявки към базата данни. Този PHP скрипт, след извършване на действие CRUD, актуализира записите в резултат на AJAX отговора.

require_once("dbcontroller.php"); $db_handle = нов DBController(); $действие = $_POST["действие"]; 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 Delete " . $_POST["txtmessage"] . " "; ) break; case "edit": $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; ) )

Преглед

Вградената система за уведомяване, за първи път в Joomla, позволява на вашето приложение да информира потребителя (или групата потребители) за различни различни събития. Мислете за известията като за важни сигнали, които потребителят би се заинтересувал да прочете и следи.
Известията могат да се генерират навсякъде. Във вашия компонент или добавки и по-късно се показва в системата за уведомяване на JomSocial.
Този урок ще ви покаже как, но тъй като нямаме представа за компонент на трета страна, който бихме могли да използваме :) примерите ще бъдат направени на плъгин на общността, който ще бъде задействан при събитие onAfterProfileUpdate
Ако не знаете как да създадете плъгин, който да се задейства при това събитие, препоръчваме ви да проверите това ръководство

Имплементирайте го във вашия компонент така или иначе

Както е посочено в общия преглед на този урок, ние ще генерираме известия с помощта на плъгин на общността.
Най-вероятно ще искате да създадете известия във вашия компонент или плъгин. Следният урок ще работи във всеки от тези случаи. Трябва само да определите в кой момент от вашия код ще бъде създадено известието и просто да заредите файла JomSocial Core Libraries.

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

Следването на урока, обяснен по-долу, ще работи добре и за вашето разширение

Подготовка на средата за разработка

1. Ще приемем, че вече сте създали примерен плъгин от тип общност, който ще се задейства, когато потребител промени своя профил
Ако не, можете да изтеглите празен примерен плъгин от , да го инсталирате в Joomla и да го активирате. Наименувано е Общност - пример за известия
2. Отидете до вашата база данни и изпразнете тези две таблици, така че да нямат никакви записи

A) prefix_community_notification
б) prefix_community_mailq

3. Имайте поне двама (2) потребители на вашите тестови сайтове и знайте техните идентификатори

В по-ранните версии на Joomla потребителските идентификатори винаги са започвали от определено число (62, 42). В Joomla 3 това число ще бъде произволно, следователно картината на нашата среда за тестване, защото определено ще бъде различна във вашия край.

Първото известие

Отворете php файла на приставката, който ще се намира в ROOT/plugins/community/example
В рамките на функцията onAfterProfileUpdate() заменете

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

Както е показано в примера, API за добавяне на известия има 7 параметъра

  • $cmd - е типът на известието. Можете да видите всички типове известия в този файл. ROOT/components/com_community/libraries/notificationtypes.php, започвайки от или около ред 53. Препоръчваме да използвате тип известие system_messaging.
  • $actor - е лицето, което извършва действието
  • $target - е човекът или групата от хора, които ще получат известие
  • $subject - е темата на известието както в изскачащия прозорец на известието, така и в заглавието на имейла
  • $body - е тялото на имейл уведомителното съобщение
  • $template - ако имате нужда от конкретен шаблон, който да използвате, можете да го дефинирате тук. В противен случай този параметър може да бъде празен
  • $params - дефинирани по избор параметри
  • Знаейки всичко това, нека дефинираме променливите, които ще използваме
    Променете кода на приставката на:

    $user = CFactory::getUser(); $cmd = "system_messaging" ; // първи параметър, тип дейност $actor = $user -> id ; //втори параметър - вземете идентификатора на $actor $target = "965" ; // трети параметър. Кой получава известие? В нашата среда за разработка, неговият администраторски потребител с идентификатор 965. Във вашата среда най-вероятно ще искате да получите идентификатора от вашия обект или от масив от потребители. $subject = "Тема на известието" ; // Предмет както на имейл, така и на изскачащи известия $body = ; // Основно съобщение в имейли. $template = ""; // Ако трябва да използвате конкретен шаблонен файл на jomsocial, можете да го дефинирате тук. $params = нов CParameter("" ) ; // Искаме да създадем допълнителен params обект и да му присвоим данни, без да се налага формално да дефинираме клас CNotificationLibrary:: add ($cmd, $actor, $target, $subject, $body, $template, $params) ;

    Сега влезте с всеки потребител и променете информацията в профила. Да отидем в базата данни, за да видим какво се е случило.
    Отидете до таблицата prefix_community_notifications и наблюдавайте новия запис

    Отидете до таблицата prefix_community_mailq и вижте новия запис

    Честито! - Успешно създадохте първото си собствено известие, което беше изпратено по имейл и вътрешна система за известяване на JomSocial


    Потенциално раздуване на кода

    Горният пример е добър и работи, но като цяло не се препоръчва да го използвате по този начин. Вместо това може да се напише така

    $actor = CFactory::getUser(); $params = нов CParameter("" ) ; CNotificationLibrary:: add ( "system_messaging", $actor -> "Това е съобщението в тялото на известието" , "", $params) ;

    Това е много по-чисто и лесно за следване, като същевременно прави абсолютно същото нещо като кода, показан по-горе.

    Персонализирани параметри за уведомяване

    API за уведомяване може да бъде разширен с всеки параметър, който искате да добавите.
    Тези параметри могат да бъдат предадени към имейл шаблон, известие и, разбира се, езиков файл.

    $actor = CFactory::getUser(); $link = "http://www.google.com" ; $params = нов CParameter("" ) ; $params -> set ("actor", $actor -> getDisplayName () ) ; // може да се използва като таг (актор) $params -> set ("actor_url" , "index.php?option=com_community&view=profile&userid=" . $actor -> id ) ; // Връзка за маркера (актор) $params -> set ("url", $link) ; //url на цялата дейност. Използва се при задържане на курсора на мишката над аватара в прозореца за известия. Може да се използва и като (url) таг в изходящи имейли. Уверете се, че сте дефинирали променлива $link:) CNotificationLibrary:: add ( "system_messaging", $actor -> id, "965", "Notification Subject" , "This is the notification body message" , "" , $params ) ;

    • $params = нов CParameter( ); - Искаме да създадем нов params обект и да присвоим данни към него, без да се налага формално да дефинираме клас.
    • $params->set("actor", $actor->getDisplayName()); - Вашето известие винаги трябва да има актьор. Този параметър може да бъде предаден на шаблон като таг (актьор). В прозореца за уведомяване той определя потребителя, който извършва действие.
    • $params->set("actor_url", "index.php?option=com_community&view=profile&userid=" . $actor->id); - URL адресът на актьор обикновено е URL адресът на актьор. В изскачащия прозорец за известия той добавя връзката към елемента (актьор).
    • $params->set("url", $link); - Това е най-важният параметър, който винаги трябва да задавате правилно. В прозореца за уведомяване този параметър се използва върху изображението на аватара. В известието по имейл отразява местоположението, където е извършена дейност.

    За този пример ще зададем променлива $link да се приземява www.google.comтака че можете да видите как работи

    Добавяне на езиков низ и параметри за използване

    Параметрите, които току-що зададохме, са налични за използване и в нашите езикови файлове.
    Нека дефинираме езиковите клавиши, като променим " CNotificationLibrary::add() API

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

    Езиковият файл трябва да изглежда така

    PLG_COMMUNITY_EXAMPLE_SUBJECT = „(актьор) актуализира потребителския си профил“ PLG_COMMUNITY_EXAMPLE_BODY = „Здравейте, администратор \n Това е имейлът, който ви информира, че (актьорът) актуализира потребителския профил \n\n Ако искате да отидете в Google, щракнете тук \n a href=" _QQ_" (url)"_QQ_">(url)"

    В този пример сме използвали маркера (актьор) и (url), за да предадем данните както към шаблони за известия, така и към шаблони за имейл. Да видим как изглежда това.
    В прозореца за уведомяване, когато задържите курсора на мишката над аватара, забележете, че параметърът (url) се включва и добавя връзката към google върху аватара. Умишлено е, защото ние го направихме така :)


    ]

    В същия прозорец, когато задържите курсора на мишката върху връзката към актьора. Това е частта, в която (actor) повтори потребителя, който извършва действие, докато (actor_url)" се погрижи обектът да е свързан правилно


    Да видим какво се случва в опашката за имейли


    И накрая, действителният имейл, който се изпраща на крайния потребител


    Успех
    Досега създадохме три (3) параметъра, които се използват успешно в прозореца за уведомяване и имейлите.

  • (актьор) - Връща потребителското име на потребителя, който извършва действието
  • (actor_url) - Дава атрибут на (актьор)
  • (url) – Не е задължително, но винаги трябва да го имате във вашето известие. Това е основният URL адрес, където се е случило действие, за което сме уведомени.
  • По същия начин можете да дефинирате "

    • (цел) - ако имате нужда
    • (target_url), ако имате нужда от него във вашето известие.
    • (заглавие) - Обикновено се използва за обозначаване на обект, който е генерирал известие. Пример: „Потребител X публикува нова снимка в албум Y.“ Албум Y е заглавието тук
    • (title_url) - Както при предишните, url на обект, който е генерирал известие.
    • (съобщение) - Този параметър може да се използва за задаване (и ехо) на съобщението в тялото на имейла на JomSocial.

    В моето приложение Zend пиша малко API за мобилни приложения. За да улесня мобилните разработчици, използвам Swagger. Засега всичко работи добре, с изключение на една GET заявка.

    Кога да се обадя на /user/messages/(sessionToken)? NumMessages = (numMessages) & pageNr = (pageNr) в браузъра, получавам резултатите, които искам, но когато се опитам да позволя на Swagger да изпълни тази заявка, се предава само sessionToken. Опитах тези анотации за Swagger:

    /** * @SWG\Api(path="/user/messages/(sessionToken)?numMessages=(numMessages)&pageNr=(pageNr)", * @SWG\Operation(* method="GET", * summary=" Получава странирани съобщения", * бележки="", * тип="низ", * псевдоним="getUsermessagesPaged", * авторизации=(), * @SWG\Parameter(* name="sessionToken", * description="Маркерът от активна потребителска сесия", * required=true, * type="string", * paramType="path", * allowMultiple=true *), * @SWG\Parameter(* name="numMessages", * description=" брой съобщения на страницата (numMessages & pageNr се игнорират, ако и двете не са зададени)", * required=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\Parameter (* name="pageNr", * description="pagenumber (numMessages & pageNr се игнорират, ако и двете не са зададени)", * required=true, * type="string", * paramType="query", * allowMultiple=true *), * @SWG\ResponseMessage(code=200, message="json (съобщения => "user_messages")"), * @SWG\ResponseMessage(code=400, message="json с грешка "не сте влезли""" ) *) *) */

    Някой вижда ли грешката ми?

    Всяка помощ е добре дошла.

    на Ваше разположение

    Актуализация. Както беше предложено, промених двата paramTypes на "query" и промених пътя:

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

    но не е работил като боец.

    xdebug в eclipse PDT показва:

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

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

    самонадеяност JSON:

    ( "apiVersion": "1.0.0", "swaggerVersion": "1.2", "apis": [ ( "path": "\/user", "description": "Операции за потребители") ], "info" : ( "title": "Api за мобилен достъп", "description": "Това е xxx API за мобилен достъп.", "termsOfServiceUrl": null, "contact": "xxx", "license": null, "licenseUrl" : null, "_partialId": null, "_partials": , "_context": ( "comment": "\/**\ * @SWG\\Info(\ * title="Api за мобилен достъп",\ * description="This is the xxx mobile access api.",\ * contact="xxx",\ *)\ *\/", "line": 3 } } } !}

    Ето изхода /user:

    ( "basePath": "http://localhost/ias/public", "swaggerVersion": "1.2", "apiVersion": "1.0.0", "resourcePath": "/user", "apis": [ ( "path": "/user/balance/(sessionToken)", "operations": [ ( "method": "GET", "summary": "Получава userbalance", "nickname": "getUserdata", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": „Токенът от активна потребителска сесия“ ) ], „responseMessages“: [ ( „code“: 200, „message“: „json (balance => „user_balance“)“ ), ( „code“: 400, „message ": "json с грешка "не е влязъл"" ) ], "бележки": "", "разрешения": () ) ]), ( "път": "/user/login", "operations": [ ( "method": "POST", "summary": "Регистрира потребителя в системата", "nickname": "loginUser", "type": "string", "parameters": [ ( "paramType": "form", "име": "имейл", "тип": "низ", "задължително": вярно, "allowMultiple": невярно, "описание": "Потребителски имейл за влизане"), ( "paramType": "форма", "име": "парола", "тип": "низ", "задължително": вярно, "allowMultiple": невярно, "описание": "Паролата за влизане в чист текст") ], "responseMessages": [ ( "code": 200, "message": "json с session_id, user_id, user_balance" ), ( "code": 400, "message": "json с грешка "няма потребител с даден имейл и парола""), ( " код": 400, "съобщение": "json с грешка "невалиден вход"" ), ( "код": 400, "съобщение": "json с грешка "няма заявка за публикация"") ], "бележки": "" , "authorizations": () ) ] ), ( "path": "/user/logout", "operations": [ ( "method": "POST", "summary": "Излиза потребителя", "nickname" : "logoutUser", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, " allowMultiple": false, "description": "Токенът от активна потребителска сесия" ) ], "responseMessages": [ ( "code": 200, "message": "json (резултат => "изтрит")" ), ( "code": 400, "message": "json с грешка "няма user_session с даден sid""), ( "code": 400, "message": "json с грешка "invalid input""), ( "code ": 400, "message": "json с грешка "няма заявка за публикуване"" ) ], "бележки": "", "разрешения": () ) ]), ( "път": "/user/messages/( sessionToken)", "operations": [ ( "method": "GET", "summary": "Получава нови съобщения", "nickname": "getUsermessages", "type": "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Token от активна потребителска сесия") ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400, "message": "json с грешка "не сте влезли в системата "" ) ], "бележки": "", "упълномощения": () ), ( "метод": "GET", "резюме": "Получава страниците на съобщения", "псевдоним": "getUsermessagesPaged", "тип" : "string", "parameters": [ ( "paramType": "path", "name": "sessionToken", "type": "string", "required": true, "description": "Токенът от активна потребителска сесия"), ("paramType": "заявка", "име": "numMessages", "type": "string", "required": true, "description": "брой съобщения на страницата (numMessages & pageNr се игнорират, ако и двете не са зададени)" ), ( "paramType": "query", "name": "pageNr", "type": "string", "required": true, "description": "pagenumber ( numMessages & pageNr се игнорират, ако и двете не са зададени)" ) ], "responseMessages": [ ( "code": 200, "message": "json (messages => "user_messages")" ), ( "code": 400 , "message": "json с грешка "not logged in"" ) ], "notes": "", "authorizations": () ) ]), ( "path": "/user/userdata", "operations" : [ ( "method": "POST", "summary": "Posts userdata", "nickname": "postUserdata", "type": "string", "parameters": [ ( "paramType": "form", "name": "sessionToken", "type": "string", "required": true, "allowMultiple": false, "description": "Token от активна потребителска сесия" ), ( "paramType": "form ", "име": "парола", "тип": "низ", "задължително": невярно, "allowMultiple": невярно, "описание": "нова парола"), ( "paramType": "форма", " име": "адрес", "тип": "низ", "задължително": невярно, "allowMultiple": невярно, "описание": "нов адрес"), ("paramType": "форма", "име": "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 ": "низ", "задължително": невярно, "allowMultiple": невярно, "описание": "нов град"), ("paramType": "формуляр", "име": "имейл", "тип": " низ", "задължително": false, "allowMultiple": false, "description": "нов имейл" )], "responseMessages": [ ( "code": 200, "message": "json (user => "userdata) ")" ), ( "код": 400, "съобщение": "json с грешка

    Изглежда като грешка, че моят swagger-ui не изпраща никакви параметри на заявка? Ето пример с един параметър на заявка, sessionToken: (контролиран от FireBug 2.0.6)

    GET /ias/public/user/balance HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Accept: application/json Accept-Language: de, en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Content-Type: application/json Referer: http://localhost/ias/swagger/ Cookie: __utma=111872281.581414660.1366700677.1394721873.1394723866. 255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Връзка: keep-alive

    Отговорът беше:

    HTTP/1.1 400 Bad Request Date: Tue, 25 Nov 2014 14:58:20 GMT Сървър: Apache/2.4.9 (Win32) PHP/5.5.12 X-Powered-By: PHP/5.5.12 Content-Length: 25 Връзка: затворете Content-Type: application/json; charset=utf-8

    Отговорът беше правилен, защото не беше подаден sessionToken.

    Това изисква работа, но не идва от swagger-ui:

    GET /ias/public/user/balance?sessionToken=HTTP/1.1 Хост: localhost Потребителски агент: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0 Приемане: текст/html,приложение/ xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: de,en-US;q=0.7,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: __utma=111872281.581414660 .1366700677.1394721873.1394723866.255; uvts=sB5Dda3cZBNdaTk; searchpanel-close=set Връзка: keep-alive



    Свързани публикации