Best approach to run queries only when user chooses

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

    Best approach to run queries only when user chooses

    Hello
    I am trying to run a few INSERT queries only if the user clicks 'continue'
    in a <a href> The queries takes variables created from SELECT queries. I
    have tried to acheive this by putting The INSERT queries into a function at
    the top of my php file and having the SELECT queries below it. I have a
    message that pops up that includes a link to the function but I cant get
    this to work and am not sure of the best approach. Can anyone help?
    My striped down code is below. Im not even sure if you can just use a
    function to contain code that doesnt return a value. Mine just runs some
    INSERT INTO queries

    *************** *************** *************** *************** *******
    <?php
    function PurchaseQuestio ns(){

    various INSERT INTO queries here

    <h1>Confirmatio n</h1><br>
    <p><a href="logout.ph p"> Logout</a> or return to <a href="Questions .php">
    Questions Database</a></p><br><br><br>
    Congratulations <b><?php echo $_SESSION[username] ?></b>, your order has
    been completed.</p>

    <?php
    }
    ?>


    <?php
    $OrderDate = date('d/m/Y');

    Three SELECT queries here which provides variables for the
    PurchaseQuestio ns() function
    ?>
    <h1>Order Status</h1>
    <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
    of <strong>£<?ph p echo $QuestSel*.8; ?></strong>
    If you wish to proceed with the transaction click <a href=<?php echo
    PurchaseQuestio ns() ?>> Continue</a>.<br>
    <?php

    }

    ?>
    <?php
    mysql_close($co nn);
    ?>


  • Gordon Burditt

    #2
    Re: Best approach to run queries only when user chooses

    >I am trying to run a few INSERT queries only if the user clicks 'continue'[color=blue]
    >in a <a href> The queries takes variables created from SELECT queries. I
    >have tried to acheive this by putting The INSERT queries into a function at
    >the top of my php file and having the SELECT queries below it. I have a
    >message that pops up that includes a link to the function but I cant get[/color]

    You can't have a link to a PHP function. Code inside a function
    will not be executed unless something calls it. You CAN have a SUBMIT
    button for a form, which the user can fill in and click on.
    [color=blue]
    >this to work and am not sure of the best approach. Can anyone help?
    >My striped down code is below. Im not even sure if you can just use a
    >function to contain code that doesnt return a value. Mine just runs some
    >INSERT INTO queries[/color]

    A function does not have to return a value, and in any case, you
    could always supply a dummy value to return.

    After a user clicks on the SUBMIT button to a form, you look at
    what's in $_GET and $_POST to decide whether or not to call the
    function, like the name of the submit button or whether the fields
    in the form were filled in.

    Gordon L. Burditt
    [color=blue]
    >
    >************** *************** *************** *************** ********
    ><?php
    >function PurchaseQuestio ns(){
    >
    >various INSERT INTO queries here
    >
    ><h1>Confirmati on</h1><br>
    ><p><a href="logout.ph p"> Logout</a> or return to <a href="Questions .php">
    >Questions Database</a></p><br><br><br>
    >Congratulation s <b><?php echo $_SESSION[username] ?></b>, your order has
    >been completed.</p>
    >
    ><?php
    >}
    >?>
    >
    >
    ><?php
    >$OrderDate = date('d/m/Y');
    >
    >Three SELECT queries here which provides variables for the
    >PurchaseQuesti ons() function
    > ?>
    > <h1>Order Status</h1>
    > <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
    >of <strong>£<?ph p echo $QuestSel*.8; ?></strong>
    > If you wish to proceed with the transaction click <a href=<?php echo
    >PurchaseQuesti ons() ?>> Continue</a>.<br>
    > <?php
    >
    > }
    >
    >?>
    ><?php
    >mysql_close($c onn);
    >?>
    >
    >[/color]


    Comment

    • Ian Davies

      #3
      Re: Best approach to run queries only when user chooses

      Thanks for the reply
      [color=blue]
      > After a user clicks on the SUBMIT button to a form, you look at
      > what's in $_GET and $_POST to decide whether or not to call the
      > function, like the name of the submit button or whether the fields
      > in the form were filled in.[/color]

      I dont have any fields that need submitting. Could I put the function in the
      form and if user clicks submit it calls the function if I put the functions
      name in the forms 'action'?


      Comment

      • Gordon Burditt

        #4
        Re: Best approach to run queries only when user chooses

        >> After a user clicks on the SUBMIT button to a form, you look at[color=blue][color=green]
        >> what's in $_GET and $_POST to decide whether or not to call the
        >> function, like the name of the submit button or whether the fields
        >> in the form were filled in.[/color]
        >
        >I dont have any fields that need submitting.[/color]

        The submit button itself can have a name.
        [color=blue]
        >Could I put the function in the
        >form[/color]

        NO, you cannot put functions in HTML. Well, you can put the text
        of the function, but then it won't be a function.
        [color=blue]
        >and if user clicks submit it calls the function if I put the functions
        >name in the forms 'action'?[/color]

        No, you cannot put function names in HTML and expect it to do any good.

        Gordon L. Burditt

        Comment

        • Mike Willbanks

          #5
          Re: Best approach to run queries only when user chooses

          >>>After a user clicks on the SUBMIT button to a form, you look at[color=blue][color=green][color=darkred]
          >>>what's in $_GET and $_POST to decide whether or not to call the
          >>>function, like the name of the submit button or whether the fields
          >>>in the form were filled in.[/color]
          >>
          >>I dont have any fields that need submitting.[/color]
          >
          >
          > The submit button itself can have a name.
          >
          >[color=green]
          >>Could I put the function in the
          >>form[/color]
          >
          >
          > NO, you cannot put functions in HTML. Well, you can put the text
          > of the function, but then it won't be a function.
          >
          >[color=green]
          >>and if user clicks submit it calls the function if I put the functions
          >>name in the forms 'action'?[/color]
          >
          >
          > No, you cannot put function names in HTML and expect it to do any good.[/color]

          While all of this is true what he could do is use ajax to call the
          function and pass the parameters that way :)



          --
          Mike Willbanks
          Zend Certified Engineer

          Comment

          • Colin Fine

            #6
            Re: Best approach to run queries only when user chooses

            Ian Davies wrote:[color=blue]
            > Hello
            > I am trying to run a few INSERT queries only if the user clicks 'continue'
            > in a <a href> The queries takes variables created from SELECT queries. I
            > have tried to acheive this by putting The INSERT queries into a function at
            > the top of my php file and having the SELECT queries below it. I have a
            > message that pops up that includes a link to the function but I cant get
            > this to work and am not sure of the best approach. Can anyone help?
            > My striped down code is below. Im not even sure if you can just use a
            > function to contain code that doesnt return a value. Mine just runs some
            > INSERT INTO queries
            >
            > *************** *************** *************** *************** *******
            > <?php
            > function PurchaseQuestio ns(){
            >
            > various INSERT INTO queries here
            >
            > <h1>Confirmatio n</h1><br>
            > <p><a href="logout.ph p"> Logout</a> or return to <a href="Questions .php">
            > Questions Database</a></p><br><br><br>
            > Congratulations <b><?php echo $_SESSION[username] ?></b>, your order has
            > been completed.</p>
            >
            > <?php
            > }
            > ?>
            >
            >
            > <?php
            > $OrderDate = date('d/m/Y');
            >
            > Three SELECT queries here which provides variables for the
            > PurchaseQuestio ns() function
            > ?>
            > <h1>Order Status</h1>
            > <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
            > of <strong>£<?ph p echo $QuestSel*.8; ?></strong>
            > If you wish to proceed with the transaction click <a href=<?php echo
            > PurchaseQuestio ns() ?>> Continue</a>.<br>
            > <?php
            >
            > }
            >
            > ?>
            > <?php
            > mysql_close($co nn);
            > ?>
            >
            >[/color]

            I may be misunderstandin g you - in which case I apologise for
            patronising you - but it seems to me that you are not understanding how
            the web works.

            Anything the user does is entirely on their client machine. They can
            fill in forms and pick links (and possibly completely change what's on
            the page they're looking at, if you've embedded suitable client-side
            scripting in it- typically Javascript). But nothing can happen on the
            server (such as changing the database) until they have requested a new
            page, either by picking a link or submitting a form.
            Of course, if it is to do anything other than simply sending HTML, that
            page must be a CGI script. But it will not have any data from the user's
            page unless the data has been sent back as CGI variables - either GET or
            POST. Alternatively, in PHP they can have been preserved (on the server)
            from when the previous page was processed, by using a _SESSION.

            If I understand correctly, what you really want is logically two
            separate pages:

            page1.php:
            // extract the data from SQL
            // display it to the user
            print "<a href='page2.php ?arg1=$val1&arg 2=$val2'>Confir m</a>";

            page2.php:
            $sql = "INSERT INTO ... (arg1, arg2 ... ) VALUES ($_GET['arg1'],
            $_GET['arg2'])";

            // display whatever you want the page to look like

            You can make them a single page if you want by (eg) making the link

            href='page1.php ?confirm=yes&ar g1=$val1&arg2=v al2'

            and then starting your page with

            <?php
            if (array_key_exis ts('confirm', $_GET) && $_GET['confirm'] == 'yes') {
            // update database
            } else {
            // send request-confirmation page
            }

            but you must still pass the data back from the client.


            All the above assumes that it is practical and desirable to send the
            data by GET. If you prefer POST (because there's too much of it, or
            because you would rather it didn't appear in the URL, then you need to
            use a form, even if there is nothing on it but a submit button:

            <form method='POST' action = 'page2.php'>
            <input type='hidden' name='arg1' value='<?php echo $val1 ?>'>
            <input type='hidden' name='arg2' value='<?php echo $val2 ?>'>
            <submit name='confirm'>
            </form>

            Then the variables will be available in the $_POST array in the next page.

            Colin

            Comment

            • Ian Davies

              #7
              Re: Best approach to run queries only when user chooses

              Colin
              [color=blue]
              > I may be misunderstandin g you - in which case I apologise for
              > patronising you - but it seems to me that you are not understanding how
              > the web works.[/color]

              You right there. I am new to web programming. I have a VB project that need
              to become web enabled and I am learning as I rewrite this project for the
              web. Thank you for all your information, it has been saved and will be added
              to my resources for future use.

              Another question. It seems that a variable can only be passed on to the next
              form. How can I pass it to a third form in the line? Would I have to 'leap
              frog' it from one hidden field to the next via a form's POST action or
              should I use sessions.
              Also if you know of a good link to a tutorial on the above and also on
              filtering values in a dropdown list based on the values in preceeding
              dropdown list I would be v grateful as most of my searches for such things
              lead usually to dead ends

              Thanks
              Ian
              [color=blue]
              >
              > Anything the user does is entirely on their client machine. They can
              > fill in forms and pick links (and possibly completely change what's on
              > the page they're looking at, if you've embedded suitable client-side
              > scripting in it- typically Javascript). But nothing can happen on the
              > server (such as changing the database) until they have requested a new
              > page, either by picking a link or submitting a form.
              > Of course, if it is to do anything other than simply sending HTML, that
              > page must be a CGI script. But it will not have any data from the user's
              > page unless the data has been sent back as CGI variables - either GET or
              > POST. Alternatively, in PHP they can have been preserved (on the server)
              > from when the previous page was processed, by using a _SESSION.
              >
              > If I understand correctly, what you really want is logically two
              > separate pages:
              >
              > page1.php:
              > // extract the data from SQL
              > // display it to the user
              > print "<a href='page2.php ?arg1=$val1&arg 2=$val2'>Confir m</a>";
              >
              > page2.php:
              > $sql = "INSERT INTO ... (arg1, arg2 ... ) VALUES ($_GET['arg1'],
              > $_GET['arg2'])";
              >
              > // display whatever you want the page to look like
              >
              > You can make them a single page if you want by (eg) making the link
              >
              > href='page1.php ?confirm=yes&ar g1=$val1&arg2=v al2'
              >
              > and then starting your page with
              >
              > <?php
              > if (array_key_exis ts('confirm', $_GET) && $_GET['confirm'] == 'yes') {
              > // update database
              > } else {
              > // send request-confirmation page
              > }
              >
              > but you must still pass the data back from the client.
              >
              >
              > All the above assumes that it is practical and desirable to send the
              > data by GET. If you prefer POST (because there's too much of it, or
              > because you would rather it didn't appear in the URL, then you need to
              > use a form, even if there is nothing on it but a submit button:
              >
              > <form method='POST' action = 'page2.php'>
              > <input type='hidden' name='arg1' value='<?php echo $val1 ?>'>
              > <input type='hidden' name='arg2' value='<?php echo $val2 ?>'>
              > <submit name='confirm'>
              > </form>
              >
              > Then the variables will be available in the $_POST array in the next page.
              >
              > Colin
              >[/color]


              Comment

              • Jon

                #8
                Re: Best approach to run queries only when user chooses

                Once you start to pass variables to more than just one page, I've found the
                best method is to use session variables and start calling them from the
                different pages. I try and limit the usage of sessions because it gets hard
                to control where all of your data is located, but it's really handy if you
                need to hold variables for multiple pages.

                As far as the drop-down, I'm not quite sure what you're saying I guess. If
                you want to populate a drop down list based on conditions, it's fairly easy
                in PHP - Here's an outline of the process I would use:

                <select name="nameSelec t">
                <?php
                if/else conditions here
                if($a==3){
                echo "<option>Op tion from if condition</option>";
                }else{
                echo "<option>Op tion from else condition</option>";
                }
                ?>

                That's kind of the process I use - you are basically echoing the values in
                the select list - if this were coming from a DB, you'd basically run this in
                a loop of some sort likely using mysql_fetch_arr ay
                (while($row=mys ql_fetch_array( $queryResults)) {
                psuedocode from above here
                }

                Does that help?

                "Ian Davies" <iandan.dav@vir gin.net> wrote in message
                news:1bn7f.443$ sA4.156@newsfe2-win.ntli.net...[color=blue]
                > Colin
                >[color=green]
                >> I may be misunderstandin g you - in which case I apologise for
                >> patronising you - but it seems to me that you are not understanding how
                >> the web works.[/color]
                >
                > You right there. I am new to web programming. I have a VB project that
                > need
                > to become web enabled and I am learning as I rewrite this project for the
                > web. Thank you for all your information, it has been saved and will be
                > added
                > to my resources for future use.
                >
                > Another question. It seems that a variable can only be passed on to the
                > next
                > form. How can I pass it to a third form in the line? Would I have to 'leap
                > frog' it from one hidden field to the next via a form's POST action or
                > should I use sessions.
                > Also if you know of a good link to a tutorial on the above and also on
                > filtering values in a dropdown list based on the values in preceeding
                > dropdown list I would be v grateful as most of my searches for such things
                > lead usually to dead ends
                >
                > Thanks
                > Ian
                >[color=green]
                >>
                >> Anything the user does is entirely on their client machine. They can
                >> fill in forms and pick links (and possibly completely change what's on
                >> the page they're looking at, if you've embedded suitable client-side
                >> scripting in it- typically Javascript). But nothing can happen on the
                >> server (such as changing the database) until they have requested a new
                >> page, either by picking a link or submitting a form.
                >> Of course, if it is to do anything other than simply sending HTML, that
                >> page must be a CGI script. But it will not have any data from the user's
                >> page unless the data has been sent back as CGI variables - either GET or
                >> POST. Alternatively, in PHP they can have been preserved (on the server)
                >> from when the previous page was processed, by using a _SESSION.
                >>
                >> If I understand correctly, what you really want is logically two
                >> separate pages:
                >>
                >> page1.php:
                >> // extract the data from SQL
                >> // display it to the user
                >> print "<a href='page2.php ?arg1=$val1&arg 2=$val2'>Confir m</a>";
                >>
                >> page2.php:
                >> $sql = "INSERT INTO ... (arg1, arg2 ... ) VALUES ($_GET['arg1'],
                >> $_GET['arg2'])";
                >>
                >> // display whatever you want the page to look like
                >>
                >> You can make them a single page if you want by (eg) making the link
                >>
                >> href='page1.php ?confirm=yes&ar g1=$val1&arg2=v al2'
                >>
                >> and then starting your page with
                >>
                >> <?php
                >> if (array_key_exis ts('confirm', $_GET) && $_GET['confirm'] == 'yes') {
                >> // update database
                >> } else {
                >> // send request-confirmation page
                >> }
                >>
                >> but you must still pass the data back from the client.
                >>
                >>
                >> All the above assumes that it is practical and desirable to send the
                >> data by GET. If you prefer POST (because there's too much of it, or
                >> because you would rather it didn't appear in the URL, then you need to
                >> use a form, even if there is nothing on it but a submit button:
                >>
                >> <form method='POST' action = 'page2.php'>
                >> <input type='hidden' name='arg1' value='<?php echo $val1 ?>'>
                >> <input type='hidden' name='arg2' value='<?php echo $val2 ?>'>
                >> <submit name='confirm'>
                >> </form>
                >>
                >> Then the variables will be available in the $_POST array in the next
                >> page.
                >>
                >> Colin
                >>[/color]
                >
                >[/color]


                Comment

                • Ian Davies

                  #9
                  Re: Best approach to run queries only when user chooses

                  Thanks everyone for your feedback. Ive used hidden fields and will read up
                  on sessions. Still need some good links to info about drop down lists though
                  Ian

                  "Ian Davies" <iandan.dav@vir gin.net> wrote in message
                  news:fM57f.1146 7$6i4.9746@news fe7-gui.ntli.net...[color=blue]
                  > Hello
                  > I am trying to run a few INSERT queries only if the user clicks 'continue'
                  > in a <a href> The queries takes variables created from SELECT queries. I
                  > have tried to acheive this by putting The INSERT queries into a function[/color]
                  at[color=blue]
                  > the top of my php file and having the SELECT queries below it. I have a
                  > message that pops up that includes a link to the function but I cant get
                  > this to work and am not sure of the best approach. Can anyone help?
                  > My striped down code is below. Im not even sure if you can just use a
                  > function to contain code that doesnt return a value. Mine just runs some
                  > INSERT INTO queries
                  >
                  > *************** *************** *************** *************** *******
                  > <?php
                  > function PurchaseQuestio ns(){
                  >
                  > various INSERT INTO queries here
                  >
                  > <h1>Confirmatio n</h1><br>
                  > <p><a href="logout.ph p"> Logout</a> or return to <a href="Questions .php">
                  > Questions Database</a></p><br><br><br>
                  > Congratulations <b><?php echo $_SESSION[username] ?></b>, your order has
                  > been completed.</p>
                  >
                  > <?php
                  > }
                  > ?>
                  >
                  >
                  > <?php
                  > $OrderDate = date('d/m/Y');
                  >
                  > Three SELECT queries here which provides variables for the
                  > PurchaseQuestio ns() function
                  > ?>
                  > <h1>Order Status</h1>
                  > <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
                  > of <strong>£<?ph p echo $QuestSel*.8; ?></strong>
                  > If you wish to proceed with the transaction click <a href=<?php echo
                  > PurchaseQuestio ns() ?>> Continue</a>.<br>
                  > <?php
                  >
                  > }
                  >
                  > ?>
                  > <?php
                  > mysql_close($co nn);
                  > ?>
                  >
                  >[/color]


                  Comment

                  Working...