For each loop - setting session variables - php

I have a listing page (mysite.com/listing) in PHP that uses a foreach loop. It outputs a user ID e.g. user1, user2 and a link to a detail page eg: mysite.com/detail
Output:
1. User ID = user1 Detail Page
2. User ID = user2 Detail Page
...
10. User ID = user10 Detail Page
The detail page (mysite.com/detail) needs to receive the corresponding user ID from the listing page e.g if user clicks item 1 "user1" is set in a Session variable and passed from the listings page to the detail page.
In the detail page then I want to just output "The users id is user1".
I am wondering how Session variable work in a foreach loop or is there a better solution?
If I use something like:
$_SESSION['user_id'] = (string)$user->primary_id;
echo $_SESSION['user_id'];
..in a foreach loop in the listings page it will capture the last User ID in the loop e.g. user10
and
echo $_SESSION['user_id'];
...in the detail page will output 'user10' instead of 'user1'.
Is it ok to even use session variables in a foreach loop?
Thanks

"user1" is set in a Session variable and passed from the listings page to the detail page...there is no need to do that. Sessions are not the best way to achieve this (not least because that model of transferring data breaks if you have the site open in more than one tab in your browser).
Just put a query parameter in the hyperlink URL and retrieve it using $_GET.
e.g.
User 1 Detail Page
User 2 Detail Page
...etc.
and in the "detail" page:
$userID = $_GET["user"];

Related

1 php page, different contents based on an identifier

I want to make a PHP page that will changing it's content based on some sort of an ID.
The idea is: the index page will have 4 squares, the content of those 4 squares will be the top 4 records in the database, they obviously have their own IDs in the DB.
What I want to happen is when I click on one of the squares it will pass the ID to another PHP page that will get all the details about it in the page.
To be more clear:
Lets say it is a cars website, the 4 squares would be an image of top 4 cars in the database with the IDs 1,2,3 and 4 respectively, when I click on the car's image (lets say 1) I will be directed to a PHP page called CarInfo.php
what i want to happen here is for the ID of the square to be passed to this page (maybe page will appear something like carInfo.php?id=1) and the page will load all the information from the database where the ID will match the recieved ID (in this case the record with ID = 1).
The problem is I don't even know how to start doing it... How can I pass the ID? How can the other page receive it? And can I use a variable to pass it to so I can use it in the query carteria? If so how?
Note: there will be 1 PHP page that displays the information ONLY (aside from index), all content will be dynamic.
very easy. exactly as you have said. you will use address with parameter, like
carInfo.php?id=1
and on carinfo page you can use php get variable http://php.net/manual/en/reserved.variables.get.php
$_GET["id"]
it will give you selected id, and you can then use is in database
In the first page you have to do something like this for each car:
Click Here
Click Here
Click Here
Click Here
Then, in show.php you need to write a code like this to recive information form the provided ID if the database you're using is MySQL:
<?php
$db = mysqli_connect('localhost','USERNAME', 'PASSWORD','DATABASE');
$result = mysqli_query($db, "SELECT * FROM YOUR-TABLE WHERE id = '{$_GET["id"]}'");
while($row = mysqli_fetch_assoc($result)){
echo "Color : {$row['color']}";
// ...
}
?>

Session variable calls only the last id from mysql table

Currently I use SESSIONS to call for my varibles from a different page,where multiple data are retrieved from mysql database using a while() statement, onto another page. The many retrieved rows has a specific id which is retrieved from the table. Each row also has a link that when clicked takes you to the page 2 to show details of the person marching that id.
For instance on page1, these are the data shown
id | name
1 | Kamena
2 | aman
3 | Forfie
sample of my code on page 1
session_start();
$stmt="select id,name from table1";
$result=$db->query($stmt);
while($row=mysqli_fetch_assoc($result)){
$id=$row['id'];
$name=$row['name'];
$_SESSION['id']=$id;
echo "<table>
<tr>
<td><a href='page2.php'>id</a></td>
<td>name</td>
</tr>
</table>";
}
On page 2, this is a sample of my codes
session_start();
if (isset($_SESSION['id']))
$id=$_SESSION['id'];
$stmt="select id,name from table1 where id=$id";
$result=$db->query($stmt);
$row= mysqli_fetch_assoc($result);
$perID=$row['perID'];
$name=$row['name'];
The problem here is when the link, id which is 1 with Kamena been the name, is clicked to page 2 the id returns 3 on the page 2 mean while it suppose to return id which is equal to 1. Please is there is something I am doing wrong?
Yes you are writing to SESSION['id'] and overwriting it each time, thus storing the last value only. You need to do this...
$_SESSION['id'][$id] = $id;
This way you have access to it, and can access it as a key/value.
So on your next page if the id you want to access is 7, you would access it as such...
echo($_SESSION['id']['7']);
But a problem I see, is that you don't know which ID you clicked to be able to access on the next page. In your link you need to somehow reference it, then check if its in the session. Which kinda defeats the point of the SESSION variable anyways. Because then you could just pass it as a GET request
Like so,...
<a href='page2.php?id=7'>PAGE 2</a>
And on page two...
if(isset($_GET)){
$id = $_GET['id'];
}
$stmt="select id,name from table1 where id=$id";
$result=$db->query($stmt);
$row= mysqli_fetch_assoc($result);
This is completely unrecommended though, just highlighting the fact that you need to somehow pass it to the next page, and SESSION isnt the way since you need a way to reference that session somehow anyways. If you know what Im trying to say.

Database management php mysql

I started learning Php scripting today only,i want to create an auction website for my college. I have a bid table having the following columns:
Userid
Itemid
Bidamount
When a user logs in ,and goes to "Items.php" page and when he will click on the bid option on an item (each item has an itemid)he will be redirected to "bid.php" page.
My doubt is: I will get the useid by $_SESSION['userid'], will i similarly also get the
itemid automatically by the $_SESSION['itemid'], if not how do i pass the itemid to the bid.php page.
another way is to to use an href tag to pass a variable to your bid.php and fetch it using get.
i.e
Bid now!
in your bid.php
$id = $_GET['id'];
you would create a from and use POST or GET information that is passed by the form. you would not get this from session
here's a tutorial: http://www.tizag.com/phpT/postget.php

Two Part Question on Creating a Simple Page Counter in PHP

1) How do I add a simple page counter to a PHP page and insert the values in a MySQL table? Also I would need the MySQL table value to be updated with each new visit.
2) The trick is that the PHP page is a template for a variety of user generated landing pages. For example, I would like each of these pages to have their own separate counters:
examplesite.com/template.php?getvalue=bob
examplesite.com/template.php?getvalue=sam
examplesite.com/template.php?getvalue=samantha
My impression is that if I put the counter on the "template.php" file then it will add up all the visits from each user to a grand total. The output that I would like is to have each user only get counts for the individual landing page.
So, if there are a total of 12 visits, dispersed as follows:
examplesite.com/template.php?getvalue=bob had 4 visits
examplesite.com/template.php?getvalue=sam had 2 visits
examplesite.com/template.php?getvalue=samantha had 6 visits
then I would want bob's page counter to read as '4', sam's as '2' and samantha's as '6.' Am I correct in assuming that if I just put the counter on template.php that each user's landing page would read as '12?' Do you have a solution for an easy way to fix this?
That's pretty simple:
pdo::prepare( 'UPDATE counter SET hits = hits+1 WHERE value = ?');
pdo::execute($_GET['getvalue']);
if ( pdo::rowCount() == 0 ) {
pdo::prepare('INSERT INTO counter (?,0)');
pdo::execute($_GET['getvalue']);
}
Well, just as you are able to separate the requests for bob and sam when generating the page, you can do the same for the counter?
You'll probably do something with $_GET['getvalue']. Just use that value (escaped, paramterized etc) in a query to update your counter....
UPDATE yourtable SET count = count + 1 WHERE pagename = ?
and then bind the getvalue...
You would want to have a row in your MySQL table for each user. When you go to update the table, update the appropriate row for that user by reading the getvalue. Then do the same for displaying the user's page counter.

php search results

I've seen alot of tutorials on search with php and mysql, but im having trouble with generating a link with the search result. For example say i have an item called "item1" in my db and the user searhes for item , item1 should be returned as a link so the user can click the link to get more information about that product. Does anyone have any scripts , or snippets of code for how to acheive this?Thanks
You probably need to create an item page say item.php that accepts an id which will then search teh database for that item and display the item information.
Your search results will then have to display the name of the item in a link that also includes the id of the item.
<?php echo $itemname"?>
This would of course be in a loop that goes through the list of items one at a time.
When the user clicks the link it will take them to item.php and send id as a parameter.
that's a simply example with no check and no control by datatype or query results. just start from it and do what you need...
<?php
//your db connection
//col1 is where the id is saved
//col2 is the url
$qry="SELECT col1, col2 FROM table WHERE col1='".$_GET['var']."'";
$result=mysql_fetch_array(mysql_query($sql));
echo 'LINK';
?>
edit:
if you want a direct redirect do this instead of echoing
header('Location: '.$result['col2']);

Categories