For Programmers: Free Programming Magazines  


Home > Archive > PHP SQL > October 2005 > Best approach to run queries only when user chooses









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Best approach to run queries only when user chooses
Ian Davies

2005-10-24, 6:56 pm

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 PurchaseQuestions(){

various INSERT INTO queries here

<h1>Confirmation</h1><br>
<p><a href="logout.php"> 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
PurchaseQuestions() function
?>
<h1>Order Status</h1>
<p>You have requested <?php echo $QuestSel; ?> questions at a total cost
of <strong>£<?php echo $QuestSel*.8; ?></strong>
If you wish to proceed with the transaction click <a href=<?php echo
PurchaseQuestions() ?>> Continue</a>.<br>
<?php

}

?>
<?php
mysql_close($conn);
?>


Gordon Burditt

2005-10-24, 6:56 pm

>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


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.

>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


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

>
> ****************************************
***************************
><?php
>function PurchaseQuestions(){
>
>various INSERT INTO queries here
>
><h1>Confirmation</h1><br>
><p><a href="logout.php"> 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
>PurchaseQuestions() function
> ?>
> <h1>Order Status</h1>
> <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
>of <strong>£<?php echo $QuestSel*.8; ?></strong>
> If you wish to proceed with the transaction click <a href=<?php echo
>PurchaseQuestions() ?>> Continue</a>.<br>
> <?php
>
> }
>
>?>
><?php
>mysql_close($conn);
>?>
>
>



Marty

2005-10-24, 6:56 pm

In article <11lq61hkf491558@corp.supernews.com>, Gordon Burditt says...
>
>
>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.
>
>
>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


You might be able to use that in conjunction with hidden input tags (such as
<input type="hidden" name="option1" value="t"> )in your form. That way you can
use different hidden fields to determine what stage the visitor was at and what
options that may have selected as they step through your questions.

Marty
--
Basic Newsguy -- 3 GB/month -- $39.95/year
http://newsguy.com/overview.htm


>
>
>


Ian Davies

2005-10-24, 6:56 pm

Thanks for the reply

> 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.


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'?


Gordon Burditt

2005-10-24, 6:56 pm

>> After a user clicks on the SUBMIT button to a form, you look at
>
>I dont have any fields that need submitting.


The submit button itself can have a name.

>Could I put the function in the
>form


NO, you cannot put functions in HTML. Well, you can put the text
of the function, but then it won't be a function.

>and if user clicks submit it calls the function if I put the functions
>name in the forms 'action'?


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

Gordon L. Burditt
Mike Willbanks

2005-10-24, 6:56 pm

>>>After a user clicks on the SUBMIT button to a form, you look at
>
>
> The submit button itself can have a name.
>
>
>
>
> NO, you cannot put functions in HTML. Well, you can put the text
> of the function, but then it won't be a function.
>
>
>
>
> No, you cannot put function names in HTML and expect it to do any good.


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
http://www.digitalstruct.com
Colin Fine

2005-10-24, 6:56 pm

Ian Davies wrote:
> 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 PurchaseQuestions(){
>
> various INSERT INTO queries here
>
> <h1>Confirmation</h1><br>
> <p><a href="logout.php"> 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
> PurchaseQuestions() function
> ?>
> <h1>Order Status</h1>
> <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
> of <strong>£<?php echo $QuestSel*.8; ?></strong>
> If you wish to proceed with the transaction click <a href=<?php echo
> PurchaseQuestions() ?>> Continue</a>.<br>
> <?php
>
> }
>
> ?>
> <?php
> mysql_close($conn);
> ?>
>
>


I may be misunderstanding 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&arg2=$val2'>Confirm</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&arg1=$val1&arg2=val2'

and then starting your page with

<?php
if (array_key_exists('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

Ian Davies

2005-10-25, 7:56 am

Colin

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


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

>
> 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&arg2=$val2'>Confirm</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&arg1=$val1&arg2=val2'
>
> and then starting your page with
>
> <?php
> if (array_key_exists('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
>



Jon

2005-10-25, 6:57 pm

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="nameSelect">
<?php
if/else conditions here
if($a==3){
echo "<option>Option from if condition</option>";
}else{
echo "<option>Option 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_array
(while($row=mysql_fetch_array($queryResu
lts)){
psuedocode from above here
}

Does that help?

"Ian Davies" <iandan.dav@virgin.net> wrote in message
news:1bn7f.443$sA4.156@newsfe2-win.ntli.net...
> Colin
>
>
> 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
>
>
>



Ian Davies

2005-10-25, 6:57 pm

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@virgin.net> wrote in message
news:fM57f.11467$6i4.9746@newsfe7-gui.ntli.net...
> 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 PurchaseQuestions(){
>
> various INSERT INTO queries here
>
> <h1>Confirmation</h1><br>
> <p><a href="logout.php"> 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
> PurchaseQuestions() function
> ?>
> <h1>Order Status</h1>
> <p>You have requested <?php echo $QuestSel; ?> questions at a total cost
> of <strong>£<?php echo $QuestSel*.8; ?></strong>
> If you wish to proceed with the transaction click <a href=<?php echo
> PurchaseQuestions() ?>> Continue</a>.<br>
> <?php
>
> }
>
> ?>
> <?php
> mysql_close($conn);
> ?>
>
>



Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com