New record saved when Refresh clicked

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Mark

    #1

    New record saved when Refresh clicked

    I have a working PHP/MySQL application used for data entry. The data
    entry screen includes a "Save" button. The PHP code for this button
    looks like this:

    if (isset($_POST['cmdSave']))
    {
    if ($_POST[txtStateFileNum ber] == "")
    {
    include ("InsertRecord. inc"); // Insert new record
    }
    else
    {
    include ("UpdateRecord. inc"); // Update existing record
    }
    }

    This works great. If the State File Number (primary ID) field is
    blank, a new record is added and a new State File Number assigned,
    otherwise the existing record is updated. However, if the user enters
    some data and clicks "Save" to insert a new record and then clicks the
    browser (IE) Refresh button, the insert logic is repeated and another
    record is added to the database. Apparently, the cmdSave button
    remains set and pressing Refresh executes the "InsertReco rd" logic
    again. The "Post" version of State File Number also remains blank
    even though it exists on the screen after "Save".

    I have tried quite a number of fixes for this problem, none of which
    have worked satisfactorily. What I would like to do is reset the
    cmdSave button after the InsertRecord logic executes. Is that
    possible?

    Alternately, if I could sense that the Refresh button had been clicked
    rather than cmdSave, I could also prevent re-execution.

    Register_global s is off.

    Any suggestions are greatly appreciated.
  • Drizzt Do'Urden

    #2
    Re: New record saved when Refresh clicked


    Uzytkownik "Mark" <himilecyclist@ yahoo.com> napisal w wiadomosci
    news:5e55e3c8.0 409080603.5f643 15e@posting.goo gle.com...[color=blue]
    > I have a working PHP/MySQL application used for data entry. The data
    > entry screen includes a "Save" button. The PHP code for this button
    > looks like this:
    >
    > if (isset($_POST['cmdSave']))
    > {
    > if ($_POST[txtStateFileNum ber] == "")
    > {
    > include ("InsertRecord. inc"); // Insert new record
    > }
    > else
    > {
    > include ("UpdateRecord. inc"); // Update existing record
    > }
    > }
    >
    > This works great. If the State File Number (primary ID) field is
    > blank, a new record is added and a new State File Number assigned,
    > otherwise the existing record is updated. However, if the user enters
    > some data and clicks "Save" to insert a new record and then clicks the
    > browser (IE) Refresh button, the insert logic is repeated and another
    > record is added to the database. Apparently, the cmdSave button
    > remains set and pressing Refresh executes the "InsertReco rd" logic
    > again. The "Post" version of State File Number also remains blank
    > even though it exists on the screen after "Save".
    >
    > I have tried quite a number of fixes for this problem, none of which
    > have worked satisfactorily. What I would like to do is reset the
    > cmdSave button after the InsertRecord logic executes. Is that
    > possible?
    >
    > Alternately, if I could sense that the Refresh button had been clicked
    > rather than cmdSave, I could also prevent re-execution.
    >
    > Register_global s is off.
    >
    > Any suggestions are greatly appreciated.[/color]

    Its because when user clicks refresh is posting form post data again.
    Force reload page after manipulate with all post data like this:

    if (isset($_POST['cmdSave']))
    {
    if ($_POST[txtStateFileNum ber] == "")
    {
    include ("InsertRecord. inc"); // Insert new record
    }
    else
    {
    include ("UpdateRecord. inc"); // Update existing record
    }
    Header("Locatio n: {$_SERVER['REQUEST_URI']}");
    die;
    }

    It will reload your page and clean up all post data - when user will click
    refresh button
    it will post empty data so your "if (isset($_POST['cmdSave']))" won't catch
    it.

    Drizzt


    Comment

    • Qiang Xue

      #3
      Re: New record saved when Refresh clicked

      "Mark" <himilecyclist@ yahoo.com> wrote in message news:5e55e3c8.0 409080603.5f643 15e@posting.goo gle.com...[color=blue]
      > I have a working PHP/MySQL application used for data entry. The data
      > entry screen includes a "Save" button. The PHP code for this button
      > looks like this:
      >
      > if (isset($_POST['cmdSave']))
      > {
      > if ($_POST[txtStateFileNum ber] == "")
      > {
      > include ("InsertRecord. inc"); // Insert new record
      > }
      > else
      > {
      > include ("UpdateRecord. inc"); // Update existing record
      > }
      > }
      >
      > This works great. If the State File Number (primary ID) field is
      > blank, a new record is added and a new State File Number assigned,
      > otherwise the existing record is updated. However, if the user enters
      > some data and clicks "Save" to insert a new record and then clicks the
      > browser (IE) Refresh button, the insert logic is repeated and another
      > record is added to the database. Apparently, the cmdSave button
      > remains set and pressing Refresh executes the "InsertReco rd" logic
      > again. The "Post" version of State File Number also remains blank
      > even though it exists on the screen after "Save".
      >
      > I have tried quite a number of fixes for this problem, none of which
      > have worked satisfactorily. What I would like to do is reset the
      > cmdSave button after the InsertRecord logic executes. Is that
      > possible?
      >
      > Alternately, if I could sense that the Refresh button had been clicked
      > rather than cmdSave, I could also prevent re-execution.
      >
      > Register_global s is off.
      >
      > Any suggestions are greatly appreciated.[/color]

      One way to solve this problem is to redirect the browser to a new page
      using header() function after the submission.


      Comment

      • countach

        #4
        Re: New record saved when Refresh clicked

        More elegant:

        Place a hidden field with a random value.

        In the script called after submit the form, place a SELECT before the INSERT
        to check if this random value exists.

        If so, return a message saiyng something like 'the data is already stored'
        oh, simply, don't do anything.





        En las nuevas, Mark escribió:[color=blue]
        > I have a working PHP/MySQL application used for data entry. The data
        > entry screen includes a "Save" button. The PHP code for this button
        > looks like this:
        >
        > if (isset($_POST['cmdSave']))
        > {
        > if ($_POST[txtStateFileNum ber] == "")
        > {
        > include ("InsertRecord. inc"); // Insert new record
        > }
        > else
        > {
        > include ("UpdateRecord. inc"); // Update existing record
        > }
        > }
        >
        > This works great. If the State File Number (primary ID) field is
        > blank, a new record is added and a new State File Number assigned,
        > otherwise the existing record is updated. However, if the user enters
        > some data and clicks "Save" to insert a new record and then clicks the
        > browser (IE) Refresh button, the insert logic is repeated and another
        > record is added to the database. Apparently, the cmdSave button
        > remains set and pressing Refresh executes the "InsertReco rd" logic
        > again. The "Post" version of State File Number also remains blank
        > even though it exists on the screen after "Save".
        >
        > I have tried quite a number of fixes for this problem, none of which
        > have worked satisfactorily. What I would like to do is reset the
        > cmdSave button after the InsertRecord logic executes. Is that
        > possible?
        >
        > Alternately, if I could sense that the Refresh button had been clicked
        > rather than cmdSave, I could also prevent re-execution.
        >
        > Register_global s is off.
        >
        > Any suggestions are greatly appreciated.[/color]


        Comment

        • Arg

          #5
          Re: New record saved when Refresh clicked

          I use a seperate save script that, after saving the data, uses javascript to
          redirect back to the form or wherever it needs to go.

          // inputform.php
          <form method=post action=saveit.p hp>
          Data 1: <input type=data1>
          <input type=submit>
          </form>


          // saveit.php
          // search records for match
          // update if match, new record if not
          <script language="JavaS cript">
          alert('Data has been updated');
          location.href = 'inputform.php' ;
          </script>


          "Mark" <himilecyclist@ yahoo.com> wrote in message
          news:5e55e3c8.0 409080603.5f643 15e@posting.goo gle.com...[color=blue]
          >I have a working PHP/MySQL application used for data entry. The data
          > entry screen includes a "Save" button. The PHP code for this button
          > looks like this:
          >
          > if (isset($_POST['cmdSave']))
          > {
          > if ($_POST[txtStateFileNum ber] == "")
          > {
          > include ("InsertRecord. inc"); // Insert new record
          > }
          > else
          > {
          > include ("UpdateRecord. inc"); // Update existing record
          > }
          > }
          >
          > This works great. If the State File Number (primary ID) field is
          > blank, a new record is added and a new State File Number assigned,
          > otherwise the existing record is updated. However, if the user enters
          > some data and clicks "Save" to insert a new record and then clicks the
          > browser (IE) Refresh button, the insert logic is repeated and another
          > record is added to the database. Apparently, the cmdSave button
          > remains set and pressing Refresh executes the "InsertReco rd" logic
          > again. The "Post" version of State File Number also remains blank
          > even though it exists on the screen after "Save".
          >
          > I have tried quite a number of fixes for this problem, none of which
          > have worked satisfactorily. What I would like to do is reset the
          > cmdSave button after the InsertRecord logic executes. Is that
          > possible?
          >
          > Alternately, if I could sense that the Refresh button had been clicked
          > rather than cmdSave, I could also prevent re-execution.
          >
          > Register_global s is off.
          >
          > Any suggestions are greatly appreciated.[/color]


          Comment

          • Arg

            #6
            Re: New record saved when Refresh clicked

            Of course then any back-button click will cause it to resubmit the data, you
            could send it to a self closing pop-up window or use a webbug like below.

            // getdata.php
            <script language="JavaS cript">
            function setMe(){
            var d1=document.get ElementById('d1 ').value;
            // I would probably add some form verification here
            document.getEle mentById('dot') .src='saveit.ph p?d1='+d1;
            alert('Data Saved');
            document.getEle mentById('d1'). value='';
            }
            </script>
            Data 1 <input type=text id=d1><br>
            <input type=button value='Save' onClick="setMe( );">
            <img id=dot src='dot.png' style='display: none'>

            // saveit.php
            <?php
            // Put your data verification and save here
            Header("Content-type: image/png");
            $image = ImageCreate(5,5 );
            $bg = ImageColorAlloc ate($image,0,15 0,0);
            imagefilledrect angle($image, 0,0, 5,5, $bg);
            ImagePNG($image ,'',100);
            ImageDestroy($i mage);
            ?>

            You have to have gd library active in your php.ini
            The image color or size does not really matter as it is hidden by the
            style='display: none'.
            You could use the image to signal the save if you wanted to, I have used a
            yellow image before the save and then changed it to green to show it was
            saved.


            "Arg" <r_arg@hotmail. com> wrote in message
            news:10jua21g0l 1mqe8@corp.supe rnews.com...[color=blue]
            >I use a seperate save script that, after saving the data, uses javascript
            >to redirect back to the form or wherever it needs to go.
            >
            > // inputform.php
            > <form method=post action=saveit.p hp>
            > Data 1: <input type=data1>
            > <input type=submit>
            > </form>
            >
            >
            > // saveit.php
            > // search records for match
            > // update if match, new record if not
            > <script language="JavaS cript">
            > alert('Data has been updated');
            > location.href = 'inputform.php' ;
            > </script>
            >
            >
            > "Mark" <himilecyclist@ yahoo.com> wrote in message
            > news:5e55e3c8.0 409080603.5f643 15e@posting.goo gle.com...[color=green]
            >>I have a working PHP/MySQL application used for data entry. The data
            >> entry screen includes a "Save" button. The PHP code for this button
            >> looks like this:
            >>
            >> if (isset($_POST['cmdSave']))
            >> {
            >> if ($_POST[txtStateFileNum ber] == "")
            >> {
            >> include ("InsertRecord. inc"); // Insert new record
            >> }
            >> else
            >> {
            >> include ("UpdateRecord. inc"); // Update existing record
            >> }
            >> }
            >>
            >> This works great. If the State File Number (primary ID) field is
            >> blank, a new record is added and a new State File Number assigned,
            >> otherwise the existing record is updated. However, if the user enters
            >> some data and clicks "Save" to insert a new record and then clicks the
            >> browser (IE) Refresh button, the insert logic is repeated and another
            >> record is added to the database. Apparently, the cmdSave button
            >> remains set and pressing Refresh executes the "InsertReco rd" logic
            >> again. The "Post" version of State File Number also remains blank
            >> even though it exists on the screen after "Save".
            >>
            >> I have tried quite a number of fixes for this problem, none of which
            >> have worked satisfactorily. What I would like to do is reset the
            >> cmdSave button after the InsertRecord logic executes. Is that
            >> possible?
            >>
            >> Alternately, if I could sense that the Refresh button had been clicked
            >> rather than cmdSave, I could also prevent re-execution.
            >>
            >> Register_global s is off.
            >>
            >> Any suggestions are greatly appreciated.[/color]
            >
            >[/color]


            Comment

            • Mark

              #7
              Re: New record saved when Refresh clicked

              Thanks for all the helpful suggestions. The problem with the redirect
              (Header) idea is that it clears all the data from the screen. What I
              want is for the data to remain on the screen so the user can continue
              with entry. There is a great deal of data (12 screens), so it is
              reasonable to expect the user to save several times during the entry
              of a record.

              As it currently exists, my InsertRecord.in c logic contains some code
              that rereads the record after the Insert:

              // Reread the record after the POST operation
              // Fields on form are refreshed after the reread via HTML "Value"
              clauses

              $sql = "SELECT * FROM rosemaster
              WHERE StateFileNumber = $NewSFN";

              $result = mysql_query($sq l) or die ("Failed rereading after insert");

              $row = mysql_fetch_arr ay($result); // Extract the record

              This repopulates the screen and lets the user continue entering more
              data. The next time "Save" is clicked, the logic senses the existence
              of a State File Number and the Update logic is called instead on
              Insert. Works great until the Refresh button comes into play.

              I have tried using session variables to indicate that a record has
              been inserted, but haven't got it to work quite right.

              Is there a way to detect that the Refresh button has been clicked?
              That seems to me to be the best solution.

              Thanks for all the help!

              Comment

              • Tony Marston

                #8
                Re: New record saved when Refresh clicked


                "Mark" <himilecyclist@ yahoo.com> wrote in message
                news:5e55e3c8.0 409090654.6d4bb d2b@posting.goo gle.com...[color=blue]
                > Thanks for all the helpful suggestions. The problem with the redirect
                > (Header) idea is that it clears all the data from the screen. What I
                > want is for the data to remain on the screen so the user can continue
                > with entry. There is a great deal of data (12 screens), so it is
                > reasonable to expect the user to save several times during the entry
                > of a record.
                >
                > As it currently exists, my InsertRecord.in c logic contains some code
                > that rereads the record after the Insert:
                >
                > // Reread the record after the POST operation
                > // Fields on form are refreshed after the reread via HTML "Value"
                > clauses
                >
                > $sql = "SELECT * FROM rosemaster
                > WHERE StateFileNumber = $NewSFN";
                >
                > $result = mysql_query($sq l) or die ("Failed rereading after insert");
                >
                > $row = mysql_fetch_arr ay($result); // Extract the record
                >
                > This repopulates the screen and lets the user continue entering more
                > data. The next time "Save" is clicked, the logic senses the existence
                > of a State File Number and the Update logic is called instead on
                > Insert. Works great until the Refresh button comes into play.
                >
                > I have tried using session variables to indicate that a record has
                > been inserted, but haven't got it to work quite right.[/color]

                In what way is it *not working right*?
                [color=blue]
                > Is there a way to detect that the Refresh button has been clicked?
                > That seems to me to be the best solution.[/color]

                There is nothing in the HTTP protocol which detects the REFRESH button being
                pressed. This is a browser function which simply redoes the last action
                whatever it was.

                --
                Tony Marston

                This is Tony Marston's web site, containing personal information plus pages devoted to the Uniface 4GL development language, XML and XSL, PHP and MySQL, and a bit of COBOL




                Comment

                • Mark

                  #9
                  Re: New record saved when Refresh clicked

                  "Tony Marston" <tony@NOSPAM.de mon.co.uk> wrote in message news:<chpsa8$p9 i$1$8300dec7@ne ws.demon.co.uk> ...[color=blue]
                  > "Mark" <himilecyclist@ yahoo.com> wrote in message
                  > news:5e55e3c8.0 409090654.6d4bb d2b@posting.goo gle.com...[color=green]
                  > > Thanks for all the helpful suggestions. The problem with the redirect
                  > > (Header) idea is that it clears all the data from the screen. What I
                  > > want is for the data to remain on the screen so the user can continue
                  > > with entry. There is a great deal of data (12 screens), so it is
                  > > reasonable to expect the user to save several times during the entry
                  > > of a record.
                  > >
                  > > As it currently exists, my InsertRecord.in c logic contains some code
                  > > that rereads the record after the Insert:
                  > >
                  > > // Reread the record after the POST operation
                  > > // Fields on form are refreshed after the reread via HTML "Value"
                  > > clauses
                  > >
                  > > $sql = "SELECT * FROM rosemaster
                  > > WHERE StateFileNumber = $NewSFN";
                  > >
                  > > $result = mysql_query($sq l) or die ("Failed rereading after insert");
                  > >
                  > > $row = mysql_fetch_arr ay($result); // Extract the record
                  > >
                  > > This repopulates the screen and lets the user continue entering more
                  > > data. The next time "Save" is clicked, the logic senses the existence
                  > > of a State File Number and the Update logic is called instead on
                  > > Insert. Works great until the Refresh button comes into play.
                  > >
                  > > I have tried using session variables to indicate that a record has
                  > > been inserted, but haven't got it to work quite right.[/color]
                  >
                  > In what way is it *not working right*?
                  >[color=green]
                  > > Is there a way to detect that the Refresh button has been clicked?
                  > > That seems to me to be the best solution.[/color]
                  >
                  > There is nothing in the HTTP protocol which detects the REFRESH button being
                  > pressed. This is a browser function which simply redoes the last action
                  > whatever it was.[/color]

                  Thanks, Tony. I'll try to explain the problem. I introduced a
                  session variable that contains the SFN (State File Number - unique
                  key) of a new record immediately after INSERT. It now looks like
                  this:

                  if (isset($_POST['cmdSubmitSave']))
                  {
                  if ($_POST[txtStateFileNum ber] == "")
                  {
                  if ($_SESSION['RefreshSFN'] <> "")
                  {
                  // Reread using Session Var

                  $TempSFN = $_SESSION['RefreshSFN'];

                  $sql = "SELECT * FROM rosemaster
                  WHERE StateFileNumber = $TempSFN";

                  $result = mysql_query($sq l) or die ("Failed rereading after
                  refresh");

                  $row = mysql_fetch_arr ay($result); // Extract the record

                  }
                  else
                  {
                  include ("InsertRecord. inc"); // Add a new record
                  $_SESSION['RefreshSFN'] = $NewSFN; // Store for reread if Refresh
                  clicked
                  }
                  }
                  else
                  {
                  include ("UpdateRecord. inc"); // Update existing record
                  $_SESSION['RefreshSFN'] = ""; // Clear
                  }
                  }

                  This works great. If the user clicks "Save" to INSERT a new record
                  and then clicks Refresh, the existing record is reread and returned to
                  the screen with no additional copy saved.

                  However, the program also includes a "New" button that clears the data
                  from the screen. This is a Normal button, not Submit. All it does is
                  use VBScript to clear the data from the textboxes.

                  If the user enters a record and clicks "Save", the record is INSERTed
                  and the session var loaded with the SFN. If the user then clicks
                  "New", the data are cleared from the screen, but the session var
                  remains loaded, so that when a new record is entered and "Save"
                  clicked, the session var exists and the previous record returned to
                  the screen. Not good.

                  I tried to find a way to clear the session var when "New" is clicked,
                  but haven't found a way yet since it is not a "Submit" button. Should
                  I try changing it to "Submit" and add PHP code to clear the session
                  var? Or is there a better approach?

                  Thanks again!

                  Comment

                  • Tony Marston

                    #10
                    Re: New record saved when Refresh clicked


                    "Mark" <himilecyclist@ yahoo.com> wrote in message
                    news:5e55e3c8.0 409100718.1aade 402@posting.goo gle.com...[color=blue]
                    > "Tony Marston" <tony@NOSPAM.de mon.co.uk> wrote in message
                    > news:<chpsa8$p9 i$1$8300dec7@ne ws.demon.co.uk> ...[color=green]
                    >> "Mark" <himilecyclist@ yahoo.com> wrote in message
                    >> news:5e55e3c8.0 409090654.6d4bb d2b@posting.goo gle.com...[color=darkred]
                    >> > Thanks for all the helpful suggestions. The problem with the redirect
                    >> > (Header) idea is that it clears all the data from the screen. What I
                    >> > want is for the data to remain on the screen so the user can continue
                    >> > with entry. There is a great deal of data (12 screens), so it is
                    >> > reasonable to expect the user to save several times during the entry
                    >> > of a record.
                    >> >
                    >> > As it currently exists, my InsertRecord.in c logic contains some code
                    >> > that rereads the record after the Insert:
                    >> >
                    >> > // Reread the record after the POST operation
                    >> > // Fields on form are refreshed after the reread via HTML "Value"
                    >> > clauses
                    >> >
                    >> > $sql = "SELECT * FROM rosemaster
                    >> > WHERE StateFileNumber = $NewSFN";
                    >> >
                    >> > $result = mysql_query($sq l) or die ("Failed rereading after insert");
                    >> >
                    >> > $row = mysql_fetch_arr ay($result); // Extract the record
                    >> >
                    >> > This repopulates the screen and lets the user continue entering more
                    >> > data. The next time "Save" is clicked, the logic senses the existence
                    >> > of a State File Number and the Update logic is called instead on
                    >> > Insert. Works great until the Refresh button comes into play.
                    >> >
                    >> > I have tried using session variables to indicate that a record has
                    >> > been inserted, but haven't got it to work quite right.[/color]
                    >>
                    >> In what way is it *not working right*?
                    >>[color=darkred]
                    >> > Is there a way to detect that the Refresh button has been clicked?
                    >> > That seems to me to be the best solution.[/color]
                    >>
                    >> There is nothing in the HTTP protocol which detects the REFRESH button
                    >> being
                    >> pressed. This is a browser function which simply redoes the last action
                    >> whatever it was.[/color]
                    >
                    > Thanks, Tony. I'll try to explain the problem. I introduced a
                    > session variable that contains the SFN (State File Number - unique
                    > key) of a new record immediately after INSERT. It now looks like
                    > this:
                    >
                    > if (isset($_POST['cmdSubmitSave']))
                    > {
                    > if ($_POST[txtStateFileNum ber] == "")
                    > {
                    > if ($_SESSION['RefreshSFN'] <> "")
                    > {
                    > // Reread using Session Var
                    >
                    > $TempSFN = $_SESSION['RefreshSFN'];
                    >
                    > $sql = "SELECT * FROM rosemaster
                    > WHERE StateFileNumber = $TempSFN";
                    >
                    > $result = mysql_query($sq l) or die ("Failed rereading after
                    > refresh");
                    >
                    > $row = mysql_fetch_arr ay($result); // Extract the record
                    >
                    > }
                    > else
                    > {
                    > include ("InsertRecord. inc"); // Add a new record
                    > $_SESSION['RefreshSFN'] = $NewSFN; // Store for reread if Refresh
                    > clicked
                    > }
                    > }
                    > else
                    > {
                    > include ("UpdateRecord. inc"); // Update existing record
                    > $_SESSION['RefreshSFN'] = ""; // Clear
                    > }
                    > }
                    >
                    > This works great. If the user clicks "Save" to INSERT a new record
                    > and then clicks Refresh, the existing record is reread and returned to
                    > the screen with no additional copy saved.
                    >
                    > However, the program also includes a "New" button that clears the data
                    > from the screen. This is a Normal button, not Submit. All it does is
                    > use VBScript to clear the data from the textboxes.
                    >
                    > If the user enters a record and clicks "Save", the record is INSERTed
                    > and the session var loaded with the SFN. If the user then clicks
                    > "New", the data are cleared from the screen, but the session var
                    > remains loaded, so that when a new record is entered and "Save"
                    > clicked, the session var exists and the previous record returned to
                    > the screen. Not good.
                    >
                    > I tried to find a way to clear the session var when "New" is clicked,
                    > but haven't found a way yet since it is not a "Submit" button. Should
                    > I try changing it to "Submit" and add PHP code to clear the session
                    > var? Or is there a better approach?
                    >
                    > Thanks again![/color]

                    You cannot clear a session var by running vbscript/javascript on the client
                    as all session data is held on the server. You should have a CLEAR button
                    which POSTs back to the web server (and PHP) so that the server-side script
                    can clear the session data and send back an empty screen.

                    Another way would be not to bother with storing RefeshSFN on the server but
                    rely on the contents of txtStateFileNum ber in the $_POST array. Your
                    existing NEW button should empty this variable so that your PHP script can
                    see whether to create a new record or update an exiting one.

                    I personally don't waste my time with any client-side scripting as it may be
                    turned off or incompatible with the client's browser.

                    HTH.

                    --
                    Tony Marston

                    This is Tony Marston's web site, containing personal information plus pages devoted to the Uniface 4GL development language, XML and XSL, PHP and MySQL, and a bit of COBOL




                    Comment

                    Working...