Results 1 to 3 of 3

Thread: Doubts about the structure of a web application

  1. #1
    Join Date
    Nov 2016

    Doubts about the structure of a web application

    I'm a beginner web developer and I'm working on a web application made with PHP\JQuery\Ajax.
    I'm wondering if the architectural approach we are using is valid, or if there is a better way to do the same things.

    For example, we have a page named "users.php"(mainly html), where among other things we display a table with all the users data. Each row of the table has all the user information and two buttons, "Edit" and "Delete". The "Edit" button opens a modal with a form containing the current user information, allows them to be edited, and has a "Save" button to save them.

    It works like this: When the modal opens, through JQuery we make an Ajax POST call to obtain the current data from the server and we fill the form with it.
    To do so, we have two additional file, named "processUsers.php" and "class.users.php". "processUsers.php" basically contains a series of "if(isset($_POST['action_name'])){ call the appropriate function of class.users.php }"

    In case we are requesting data, the function of class.users.php gets the data from the database, and returns it to JQuery\Ajax into a JSON using "echo json_encode(array of data)". Otherwise performs the requested operations on the database.

    Now both for the "Edit" and for the "Delete" buttons, when the requested operations are completed, we have to refresh the users table of the page.

    To do so, we currently have a JQuery function which makes another Ajax POST call to "processUsers.php", with a variable named "reload_table : 1".
    ProcessUsers.php has a section with "if(isset($_POST['reload_table'])){ calls a function of class.users.php which generate again the whole html of the table }.
    On the complete function of the Ajax call, the html of the table is then assigned to a div wrapping the table in the "users.php" file.

    What makes me thinking is that with this approach I have to write html also in the "class.users.php" , in this example to reload the users table, but generally to reload any part of a page.

    I'm not sure what's the best approach and how others do things, but I'd generally prefer keep all the html in the main html "view" file if there was a way to do so.

    What you guys think ?


  2. #2
    Join Date
    Aug 2004
    There's probably no "right" answer.

    One approach would be to have the PHP server-side stuff mostly (or even entirely) be a set of RESTful endpoints that return JSON/JSONP. Then your client-side code would be done in something like AngularJS where it's essentially a thick client that handles all the display level stuff, and makes AJAX RESTful calls to the server-side stuff to get whatever data it needs, and which it then renders as you program it to do. This gives you a clear demarcation of responsibility for display concerns versus data concerns, but puts some responsibility on the developer team to document the RESTful API well and make sure both sides (client side and server side) of the team work together well, as you typically end up with specialized people working on the different ends of the application.
    "Well done....Consciousness to sarcasm in five seconds!" ~ Terry Pratchett, Night Watch

    How to Ask Questions the Smart Way (not affiliated with this site, but well worth reading)

    My Blog
    cwrBlog: simple, no-database PHP blogging framework

  3. #3
    Join Date
    Mar 2012
    A simpler approach is to use just PHP and HTML. This means that you cannot do client-side validation, but you may be able to minimize that constraint by using pick lists rather than free text input wherever appropriate. In any case, it is generally advisable to validate server-side, even if client-side validation is performed. So it may be preferable to use client-side validation only where there is a significant benefit to the user experience.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



X vBulletin 4.2.2 Debug Information

  • Page Generation 0.09541 seconds
  • Memory Usage 2,849KB
  • Queries Executed 13 (?)
More Information
Template Usage (32):
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (3)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (3)postbit
  • (3)postbit_onlinestatus
  • (3)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (71):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates