PHP to take information from one page to another - php

i am quite new to php and i have this shopping cart up which shows images. product name and details from mysql database. the code for it is the following:
<table border="0" cellpadding="2px" width="600px">
<?
$result=mysql_query("select * from products");
while($row=mysql_fetch_array($result)){
?>
<tr>
<td><img src="<?=$row['picture']?>" /></td>
<td> <b><?=$row['name']?></b><br />
<?=$row['description']?><br />
Price:<big style="color:green">
£<?=$row['price']?></big><br /><br />
<input type="button" value="Add to Cart" onclick="addtocart(<?=$row['serial']?>)" />
</td>
</tr>
<tr><td colspan="2"><hr size="1" /></td>
<? } ?>
</table>
What i want is for a user to be able to click on the picture/name of the product in which it should transfer the user to another page with the selected product being shown.
By the way, my mysql table consists of the following fields:
serial
name
description
price
picture
how should i go about doing this? thank u

Make a link like this:
<a href="product.php?product_id=<?=$row['serial']?><?=$row['name']?></a>
Then in the product.php page insert this:
$id = $_GET['product_id'];
$result=mysql_query("select * from products WHERE serial = '$id'");
$row=mysql_fetch_array($result);
Under that code you can add stuff like the picture and price etc etc :)
The serial of the product is being held ni the URL (product_id) and then called by the $_GET variable. SO product_id=1 will load the product with the serial number 1.
If you look at the URL of this current page it has the number 8142009 in the middle. If you change it to 8142008 it will load the previous question before yours. This example works in the exact same way.

You need to use either POST or GET parameters to do this.
I'll leave the actual logic of displaying the product up to you, but if you look at web addresses, they sometimes take the form of http://www.example.com/index.php?foo=bar&stuff=no. In this case, everything after the "?" is called the query string and has a "&" delimited list of variables. In this case, there are two variables, foo and stuff, which have the values of bar and no, respectively.
This will also call a script called "index.php". PHP exposes a superglobal (that is, a variable which is magically just available from everywhere) called $_GET. This is an array containing a mapping between GET variable names and their values. In this case, it would be the array ("foo"=>"bar", "stuff"=>"no"), so you can access the required values using $_GET['foo'] and $_GET['stuff'].
POST parameters are similar, but slightly different. These are submitted from HTML forms (with the "method" attribute set to "post"). In this case, the superglobal $_POST is filled out in the same way, but the array keys are the names of input elements in the HTML and their values are the values of the respective elements, so <input type="hidden" name="foo" value="bar" /> would create an entry in $_POST called "foo" with the value "bar".
From this, you should be able to have a decent go at implementing what you need.

you will probably need a new field in your mysql table to store product page url, then do the following
<table border="0" cellpadding="2px" width="600px">
<?
$result=mysql_query("select * from products");
while($row=mysql_fetch_array($result)){
?>
<tr>
<td><img src="<?=$row['picture']?>" /></td>
<td> <b><?=$row['name']?></b><br />
<?=$row['description']?><br />
Price:<big style="color:green">
£<?=$row['price']?></big><br /><br />
<input type="button" value="Add to Cart" onclick="addtocart(<?=$row['serial']?>)" />
</td>
</tr>
<tr><td colspan="2"><hr size="1" /></td>
<? } ?>
</table>
or you could easily use peters answer lol

Related

Send "Button"-ID on Submit

I have an PHP page, which contains a form with some different input fields, e. g. day, month, year etc.. The form method is POST, only one non-editable field (The user ID) is sent via GET.
Of course, there is a "Submit"-Button, which triggers the form Action (PHP Script on Server).
The form tags contain a table with empty cells too. Now comes my question:
If the user clicks into one of the table cells, the form should be submitted, but additional to the regular form data the ID of the table cell should be transmitted too (If via POST or GET doesn't matter to me). How can I do that?
//Edit 2:
...
<form method="post" action="<?= DOMAIN?>/.../addUserTimetable.php?uid=<?= $user->getUserID() ?>">
<select id="day" name="day">
...
</select>
...
<input name="yearend" id="yearend" ...>
<button type="submit">...</button>
<table class="bordered">
<tr>
<th>Std.</th>
<th>Montag</th>
<th>Dienstag</th>
<th>Mittwoch</th>
<th>Donnerstag</th>
<th>Freitag</th>
</tr>
<?php
for($i=1; $i<13;$i++) {
echo "<tr>";
echo "<th>".$i. "</th>";
for($j=1;$j<6;$j++) {
echo "<td id='h".$i. "d".$j. "' onclick='???'></td>";
}
echo "</tr>";
}
?>
</table>
</form>
...
The server sided procession is fine, but I haven't got any ideas - even after two hours google - how I could transmit the cell id additionally.
That shouldn't be to hard. Have a look at the following example:
<form>
<input type="text" name="something">
<table>
<tr>
<td><input type="submit" name="cel1">
</tr>
<tr>
<td><input type="submit" name="cel2">
</tr>
<tr>
<td><input type="submit" name="cel13">
</tr>
</table>
<input type="submit" value="save">
</form>
By giving the submit buttons in the table cells a name attribute, that name will also be present as a key on the $_REQUEST. Go ahead and var_dump the $_REQUEST and you'll see you can find out in the backend which button got pushed by checking which key exists.
Note that POST / GET is completely irrelevant here, both will work just the same. And obviously you could apply some css to those buttons to make them transparent and lay them on top of the table cells, so they don't look like buttons, but just "capture" the user's click.
One last side note, are you sure you want to send the userID as a GET parameter? That would be very easy for someone with bad intentions to manipulate. Consider not sending the ID at all, but keeping it in the session on the server.

How to get selected product's price and show it on table?

so the requirement is to have a table which allows the user to create a new estimate online. I went as far as adding rows/ deleting them, having my DB's product list on the product field. But once I select the product, I would like the field 'Price' to pull up its price.
Here's the code I am currently using:
<INPUT type="button" value="Add Row" onclick="addRow('dataTable')" />
<INPUT type="button" value="Delete Row" onclick="deleteRow('dataTable')" />
<TABLE id="dataTable" width="350px" border="1">
<TR>
<TD><INPUT type="checkbox" name="chk"/></TD>
<TD><INPUT type="text" name="txt"/></TD>
<TD>
<SELECT name="country" onchange="getPrice(this.value, this.closest('tr').rowIndex);">
<?php while($row = mysql_fetch_array($query)) {
echo '<option value="' .$row['nom'] . '">'.$row['nom'].'</option>'; }
?>
</SELECT>
</TD>
<TD><INPUT type="text" name="txt"/></TD>
</TR>
</TABLE>
Ok, so what I assume is that your javascript function getPrice(name, tablecell) should retrieve the price stored in your database and puts it's price-value into the given table cell.
Before I write out a possible solution, I would like to add: This solution will keep the values from the database in a client-side array. Thus visible for any user, reviewing the code of your page. This shouldn't be an issue if you only store non-critical information though.
// For testing purpose i filled in a mini-json, but in
// the PHP-example later this post you will find a short
// example how to fill this with PHP from your database
var prices = {
'test_prod_1' : 16.46,
'test_prod_2' : 21.55,
'test_prod_3' : 7.4
};
function getPrice( prodID, tableCell )
{
if (typeof prices[prodID] !== 'undefined')
tableCell.innerHTML = '€' + prices[prodID]; // Get the price from the pre-loaded price information
else
tableCell.innerHTML = '?';
}
<input type="button" value="click me" onClick="javascript:getPrice('test_prod_2', document.getElementById('test_cell'));">
<table border=1 cellspacing=0 cellpadding=5>
<tr>
<td>Product name</td>
<td>price</td>
</tr>
<tr>
<td>test</td>
<td id="test_cell"></td>
</tr>
</table>
And then with PHP You would be able to create this price list dynamically. But, remember that the data is visible client side, so this example will only select the price and name/id data. Make sure to edit the variable names to the ones you use.
<script type="text/javascript">
var prices = <?php
$js_pricelist = array();
// Retireve the information from the server's database. Assume that $result is a result set in an ASSOC
foreach( $result as $row )
$js_pricelist[ $row['prodID'] ] = $row['prodPrice'];
echo JSON_Encode( $js_pricelist );
?>
</script>
Please check the last script as I haven't tested it yet, and is meant more to give you an idea of the possibilities
Conclusion: The main idea is, that once you load the page, you assemble a javascript object containing all price data (Using PHP). You echo this object to a javascript block, and make a function that reads from this newly created array/object to retrieve the price that corresponds to the product_id.

HTML form to update Mysql with PHP (and HTML)

I've been trying to develop a real estate page where people can add listings. I am new to the world of php mysql. I have been over this problem for over a day and can't figure out where the problem is.
I have a form where people can add data. That's good and working. Now I am starting to have a place where people can add / delete / update their info. I am trying to build this step by step.
This is where a user could pull the information. My problem is with the piece of the code:
edit_form.php?idBAR=$row[id].
Full code below.
<table>
<tr>
<td align="center">EDIT DATA</td>
</tr>
<tr>
<td>
<table border="1">
<?php
include"configS_OH.php";//database connection
$order = "SELECT * FROM braaasil_brokerstour.property";
$result = mysql_query($order);
while ($row=mysql_fetch_array($result)){
echo ("<tr><td>$row[id]</td>");
echo ("<td>$row[address]</td>");
echo ("<td>$row[day]</td>");
echo ("<td>$row[hours]</td>");
echo ("<td>Edit</td></tr>");
}
?>
</table>
</td>
</tr>
</table>
Then this tutorial try to pass id through the address bar (I don't know much about php to actually say much)
It tries to upload the data into a new form where a person could edit info.
But I can't load the data into the new form. If I use where id=7, I get the info into the form. But this method of passing the info in the address bar like ?idBAR=8... and then try to catch it in the other code (where id=$idBAR), is not working.
Here is the code:
<table border=1>
<tr>
<td align=center>Form Edit Employees Data</td>
</tr>
<tr>
<td>
<table>
<?php
include "configS_OH.php";//database connection
print $database;
$order = "SELECT * FROM braaasil_brokerstour.property
WHERE id='$idBAR'";
print $idBAR;
$result = mysql_query($order) or die( mysql_error() );
$row = mysql_fetch_array($result);
?>
<form method="post" action="edit_data.php">
<input type="hidden" name="idBAR" value="<?php echo "$row[id]"?>">
<tr>
<td>Address</td>
<td>
<input type="text" name="address"
size="20" value="<?php echo "$row[address]"?>">
</td>
</tr>
<tr>
<td>Date</td>
<td>
<input type="text" name="day" size="40"
value="<?php echo "$row[day]"?>">
</td>
</tr>
<tr>
<td>Time</td>
<td>
<input type="text" name="time" size="40"
value="<?php echo "$row[hours]"?>">
</td>
</tr>
<tr>
<td align="right">
<input type="submit"
name="submit value" value="Edit">
</td>
</tr>
</form>
</table>
</td>
</tr>
</table>
I tried an tried and tried..
Thank you for your time in advance.
WHERE id='$idBAR'
You haven't assigned $idBAR any value. You need to read it from the $_GET array first:
$idBAR = $_GET['idBAR'];
You should, of course, check that this value exists first, and is acceptable.
I don't see anywhere you have actually used the GET data, just the reference name which is used in GET.
If you first query is working and is getting the $row['id'] value ok - you can verify this when you go to edit_form.php, in your browser URL bar at the top, does it say this:
edit_form.php?idBAR=7
(or whatever number should be there)
If so, then you just need to use the PHP GET. Your data is stored in $_GET[], and in this case, the reference name is idBAR. So your id from your previous page query is sent through the link into your URL, and on your edit_form.php page, you'd use that data as:
$_GET['idBAR']
You can use that, but personally I assign the data to a variable, such as:
$strGetId = $_GET['idBAR'];
Then you can use $strGetId throughout your code.
Also, check things like isset(), empty() etc, just so you know you are working with A) something is actually there, and B) it's not empty etc
if you are putting a variable directly in a string without concatenating, it can't be an array variable; you must concatenate those you also need to surr. so this
echo ("<td>Edit</td></tr>");
should be this
echo ("<td>Edit</td></tr>");
also, it looks like your form is sending data with POST. When you pass form data in the url string after the question mark, that is passing with get.
so...in your form where you want to use that variable, you set it up like this
$idBAR=$_GET['idBAR']; //to get the variable if it was part of the URL
$idBAR=$_POST['idBAR']; //if it was sent with post, as is the case with your form
also, request contains both get and post, so
$idBAR=$_REQUEST['idBAR'];
will work in either case.
The problem is the $row[id] is seen as text just like everything else. You want the value of $row[id]. Instead of
echo ("<td>Edit</td></tr>");
try
echo ("<td>Edit</td></tr>");

insert php values $row into database in another .php file

I have a table with php values (table.php )retrieve from mysql database.
I want to insert this particular value into another database with the insertion code inside another php file (admin.php)
How should I go about doing it?
Code from table.php
<tr>
<td class="brack_under cell_1">
<?php
$row = mysql_fetch_row($data);
echo "<a>".$row[2]."</a>";
?>
</td>
<td class="cell_2"> </td>
<td class="cell_3"> </td>
<td class="cell_4"> </td>
<td class="cell_5"> </td>
<td class="cell_6"> </td>
</tr>
Code from admin.php
<?php
it is something like : $a = $_POST[ $row[2] ]; ???
$sql="INSERT INTO matchTable (schInitial, schName,position)VALUES
('$_POST[ $row[1] ]','$_POST[$row[2] ]','top8')";
mysql_close($con)
?>
According to the comment discussion and your comments, I'm gonna try to help you a bit here (hopefully I got the point)
You need to POST a <form ...> to your script. Unless you do that, there is no $_POST available. E.g.:
<form method="post" action="myscript.php">
<input type="hidden" name="some_var" value="player1" />
<input type="submit" />
</form>
This gives the following in myscript.php where you can do your filtering and insertion and stuff.
print_r($_POST);
// output: array( 'some_var' => 'player1' );
Which means, according to your tries (and to keep it understandable)
$a = $_POST['some_var']
// $a is now 'player1'
So, the only thing you need to do: create a form beneath your table, put some hidden fields in it with data you need to do your math things, and put a submit button in it.

No POST data being returned when hidden input type is present

I think that there is either an error in my code, or my PHP or Apache is set up incorrectly.
When I submit a form with a hidden field in it, I do not get any data in my $_POST array...
When I comment out the hidden field in my code, the POST data is returned correctly...
HTML FORM
<form action='/utils/login.php ' method='POST'>
<table>
<tr>
<td colspan='2'>
Login
</td>
</tr>
<tr>
<td>
Username
</td>
<td>
<input type='text' name='userid' value='' size='12' />
</td>
</tr>
<tr>
<td>
Password
</td>
<td>
<input type='password' name='password' size='12' />
</td>
</tr>
<tr>
<td>
<input type='hidden' name='formtype' value='login' />
</td>
</tr>
<tr>
<td>
<input type='submit' value='Submit' />
</td>
</tr>
</table></form>
Here is the code that is processing it in PHP...
foreach ($_POST as $var => $value) {
echo "$var = $value<br>";
}
I am using PHP 5 and Apache 2.2 on my server.
Any ideas?
EDIT...
I have narrowed it down to this...
$command = $_POST['formtype'];
When I removed the # sign from my $_POST, I am getting the following error...
Notice: Undefined variable: formtype in C:\webroot\utils\login.php on line 17
If I comment out that line, the POST data is passed into the program without a problem.
I would suggest changing the code you are using to display the contents of $_POST to a single call:
print_r($_POST);
Anytime you are displaying the entire contents of an array, this is better than a loop w/ echo, as it will show every value at every level of the array.
Also, as was mentioned in a comment, make sure you close the form in the html.
You never closed your <form> tag.
And I see now that someone beat me to it by a mile in the comments. Still, this is the right answer.
Have you tried taking the hidden input out of the table and placing it right after the opening form tag?
You can also use:
var_dump($_POST);
...to view the post variables.
Also, if any inputs are being dynamically created or might be missing from the POST variables... you can use:
variable = 'default';
if(isset($_Post['variable'])) $variable = $_POST['variable'];
...to dynamically set variables that could be there or not.
I changed my form to work with Twig. The changed form was not sending the hidden input value with post.
In case someone has the same problem, I solved it by doing the following.
The original line was:
<input hidden name='foo[{{ loop.index }}][id]' value='{{id}}' />
I sold it by making type='hidden':
<input type='hidden' name='foo[{{ loop.index }}][id]' value='{{id}}' />
Please try with:
<form action="..." method="post" enctype="application/x-www-form-urlencoded">

Categories