Mysqli_fetch_assoc not storing as a session variable - php

I am trying to store my outputted table from mySQL query into session variables and for use in another page. Here's what I have so far, but I do not get an output:
First page that displays the results of my search:
<?php
session_start();
$personid = ($_POST['personid']) ? $_POST['personid'] : $_GET['personid'];
if (empty($personid)) {
echo 'Please enter some search parameters';
} else {
$sql = "SELECT * FROM persons WHERE 1=1";
if ($personid)
$sql .= " AND personid='" . mysqli_real_escape_string($mysqli,$personid) . "'";
$total_records = mysqli_num_rows(mysqli_query($mysqli,$sql));
$sql .= " ORDER BY surname";
$loop = mysqli_query($mysqli,$sql)
or die ('cannot run the query because: ' . mysqli_error($mysqli));
echo "<table border='1' cellpadding='10'>";
echo "<tr> <th>Name</th> <th>Address</th> <th>City</th> <th>Province</th> <th>Postal Code</th> <th>Phone Number</th> <th>Email</th> <th></th></tr>";
while ($record = mysqli_fetch_assoc($loop)) {
echo "<tr>";
/* echo '<td>' . $record['firstname'] . $record['surname'] .'</td>';*/
echo "<td>$record[firstname] $record[surname]</td>";
echo '<td>' . $record['address'] . '</td>';
echo '<td>' . $record['city'] . '</td>';
echo '<td>' . $record['province'] . '</td>';
echo '<td>' . $record['postalcode'] . '</td>';
echo '<td>' . $record['phone'] . '</td>';
echo '<td>' . $record['email'] . '</td>';
echo ("<td>Edit</td>");
echo "</tr>";
}
echo "</table>";
$_SESSION['animals']=$loop;
echo "<center>" . number_format($total_records) . " search results found</center>";
}
?>
Click here to see if sessions work
This then goes to this script:
<?php
session_start();
echo "The results";
while ($record = mysqli_fetch_assoc($_SESSION['animals'])) {
echo "<tr>";
echo "<td>$record[firstname] $record[surname]</td>";
echo '<td>' . $record['address'] . '</td>';
echo '<td>' . $record['city'] . '</td>';
echo '<td>' . $record['province'] . '</td>';
echo '<td>' . $record['postalcode'] . '</td>';
echo '<td>' . $record['phone'] . '</td>';
echo '<td>' . $record['email'] . '</td>';
echo ("<td>Edit</td>");
echo "</tr>";
}
What might the problem be? Thanks in advance.

Session are meant to store primitive data types.
Storing a resulstset into a session is a terrible idea and mostly likely bad for server ressources.
If you really need that data somewhere else in your app just query your database again which is not overly expensive.

I can see the problem that you are trying to store the mysqli resource object to the session.
$loop = mysqli_query($mysqli,$sql)
If you want to store the final html to the session, then create a single variable that holds final html string.
$html = "<table>";
while ($record = mysqli_fetch_assoc($loop)) {
$html .= $record['something'];
// Likewise add other variables to html string.
}
$html . = "</table>";
$_SESSION['animals'] = $html
But if you want the array that holds all the database result then you can do like this
$rows = array();
while ($record = mysqli_fetch_assoc($loop)) {
$rows[] = $record;
}
$_SESSION['animals'] = $rows;
Now you use this session value in another pages and iterate and create html.

Just as other website with session variables, using isset will make the script run smoothly
if (!isset($_SESSION['basket'])){
$_SESSION['basket'] = array();
}
Pascal
multiskillz

Related

PHP foreach loop doesnt itterate over objects, and won't start

Whenever i try the following loop
if (is_object($ueberweisung)) {
print_r($ueberweisung);
foreach ($ueberweisung as $item)
{
echo '<h1>test</h1>';
echo '<tr>';
//echo '<td>' . $item['ibansender'] . '</td>';
echo '<td>' . $item->$u->getBetrag() . '</td>';
echo '<td>' . $item->u->getBicempfaenger() . '</td>';
echo '<td>' . $item->u->getBicempfaenger() . '</td>';
echo '<td>' . $item->u->getZahlungsreferenz() . '</td>';
echo '<td>' . $item->u->getVerwendungszweck() . '</td>';
echo '<td>' . $item->u->getBetrag() . '</td>';
echo '<td>' . $item->u->getDatum() . '</td>';
echo '<td>';
echo '</tr>';
}
}
it wont jump into that for each loop even though it is definitely a object and is not null$, and i don't know why.
$ueberweisung is filled by another class which is connected to a mysql database
public static function getUberweisungperIban($iban)
{
$db = Database::connect();
$sql = "SELECT * FROM ueberweisung WHERE ibansender = ?";
$stmt = $db->prepare($sql);
$stmt->execute(array($iban));
// fetch dataset (row) per ID, convert to Credentials-object (ORM)
$ueberweisung = $stmt->fetchObject('Ueberweisung');
//$ueberweisung = $stmt->fetchAll();
//return $ueberweisung;
Database::disconnect();
//return $ueberweisung;
return $ueberweisung !== false ? $ueberweisung : null;
}

PHP While Loop: Second While Loop not showing data

I'm having trouble on While Loop. Here is my code:
<?php
//DISPLAY'S SKILL LIST
$showItemList = $con->query('SELECT * FROM items');
if ($showItemList->num_rows > 0) {
$x=1;
// output data of each row
while($row = $showItemList->fetch_assoc()) {
echo '<tr>';
echo '<td>' . $x++ . '</td>';
echo '<td>' . $row['item_id'] . '</td>';
echo '<td>' . $row['item_name'] . '</td>';
echo '<td>' . $row['item_category'] . '</td>';
echo '<td>' . $row['item_costprice'] . '</td>';
echo '<td>' . $row['item_retailprice'] . '</td>';
echo '<td>' . $row['item_tax'] . '%</td>';
echo '<td>';
$showInHouseQty = $con->query('SELECT SUM(item_quantity) AS TotalQuantityInStock FROM item_inventory_inhouse WHERE item_id="'.$row['item_id'].'"');
while($row = $showInHouseQty->fetch_assoc()) {
echo $row['TotalQuantityInStock'];
}
echo '</td>';
echo '<td>';
$showPharmaQty = $con->query('SELECT SUM(item_quantity) AS TotalPharmaQty FROM item_inventory_inpharmacy WHERE item_id="'.$row['item_id'].'"');
while($row = $showPharmaQty->fetch_assoc()) {
echo $row['TotalPharmaQty'];
}
echo '</td>';
echo '</tr>';
}
}
?>
Well, the problem is, I can't get the result of $row['TotalPharmaQty'];
If you use the same variables in nested while loops as are in the parent while loop, they will overwrite. Change $row in the second and third while loops to $row2 and $row3 respectively, and it should work fine.

Add feature to datatable?

Hey guys i was just playing around with datatables, i was wondering if anyone new of a possible way to do the following:
When you have a TD for Description, if the description is lengthy is there a way to add like a read more link or a ... instead of warping the row height?
Any resources you have on this would be useful!
Here is my current setup:
require_once('db_config.php');
$sql = "SELECT * FROM routes";
$stmt = $conn->prepare($sql);
$stmt->execute();
echo '<table class="table table-striped table-bordered" id="basic-datatable" border="0" cellpadding="10">';
echo '<thead><tr><th>Business ID</th><th>Business Type</th><th>Price</th><th>Down Payment</th><th>Weekly Net</th><th>City</th><th>State</th><th>Business Description</th></tr></thead>';
echo '<tbody>';
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo "<tr>";
echo '<td>' . $row['route_id'] . '</td>';
echo '<td>' . $row['route_title'] . '</td>';
echo '<td>$' . $row['total_price'] . '</td>';
echo '<td>$' . $row['down_payment'] . '</td>';
echo '<td>$' . $row['weekly_net'] . '</td>';
echo '<td>' . $row['city'] . '</td>';
echo '<td>' . $row['state'] . '</td>';
echo '<td>' . $row['remarks'] . '</td>';
echo "</tr>";
}
echo '</tbody>';
echo '</table>';
Thanks
There are two ways to go about this kind of behavior.
One is CSS using text-overflow: ellipsis;, though that only handles the ellipsis part. (Since you want more than just that, I won't go into the details here, but here are the MDN docs for that, in case you're interested.)
The way to do it in PHP is to determine how many characters fit into your table cell, including "Read More," and truncating the string accordingly.
So, if $row['remarks'] is the field you want to handle, you might do something like:
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
if(strlen($row['remarks']) >= 50) {
$row['remarks'] = substr($row['remarks'],50) . "... Read More";
}
echo '<tr>'...
}

how to echo sum value in row

i want to echo sum of 1st script in to 2nd script
and both are same page i was try but not working
example
echo '<td>' . $row['status'] . '</td>';
echo '<td>' .$final_result4. '</td>';
how can i do this please help me to fix this issue thanks....
this is my 1st script
$res1 = (($basicsalary+$allowsalary)*$days*$yeardays1)/$yeardays/$monthdays;
$res2 = (($basicsalary1+$allowsalary1)*$days*$yeardays2)/$yeardays/$monthdays;
$res3 = (($basicsalary2+$allowsalary2)*$days*$yeardays3)/$yeardays/$monthdays;
$res4 = (($basicsalary+$allowsalary)*$days*$yeardays4)/$yeardays/$monthdays;
$res5 = (($basicsalary1+$allowsalary1)*$days*$yeardays5)/$yeardays/$monthdays;
$res6 = (($basicsalary2+$allowsalary2)*$days*$yeardays6)/$yeardays/$monthdays;
$res8 = 221/730*$miscamount +$otheramount;
$res7 = $startdays -$enddays;
$result1 = number_format((round($res1, 1)),3);
$result2 = number_format((round($res2, 1)),3);
$result3 = number_format((round($res3, 1)),3);
$result4 = number_format((round($res4, 1)),3);
$result5 = number_format((round($res5, 1)),3);
$result6 = number_format((round($res6, 1)),3);
$result7 = number_format((round($res7, 1)),3);
$result8 = number_format((round($res8, 1)),3);
$final_result = number_format(($result1 +$result2 +$result3 +$result4 +$result5 +$result6 ),3);
$final_result2 = number_format((round($final_result/730*$result7 ,1 )),3);
$final_result3 = number_format((round(($final_result2 +$result8) , 1)),3);
echo $final_result4 = number_format((round(($final_result -$final_result3) , 1)),3);
//Ending of php
?>
this is my 2nd script
echo "<span align='center' class='style2'>Over All Report For The Period Of $a to $b</span>";
echo "<div id='testTable' id='non-printable'><table class='hovertable' border='1' cellpadding='10'>";
echo "<tr> <th>Date</th><th>Id</th><th>Name</th> <th>Division</th><th>Payment</th><th>Status</th><th>Total</th></tr>";
// get results1 from database
$result1 = mysql_query("SELECT * FROM fullfsaccounts where date BETWEEN '$a' AND '$b' order by date ASC");
while($row = mysql_fetch_array($result1))
{
// echo out the contents of each row into a table
echo "<tr>";
echo '<td>' . $row['date'] . '</td>';
echo '<td>' . $row['cardno'] . '</td>';
echo '<td>' . $row['name'] . '</td>';
echo '<td>' . $row['division'] . '</td>';
echo '<td>' . $row['typecash'] . '</td>';
echo '<td>' . $row['status'] . '</td>';
echo '<td>' '</td>';
echo "</tr>";
//Increment the value of the Total_total variable
//by the salary value of one row till the while loop finishes
$Total_rows=$num=mysql_num_rows($result1);
$Total_total=$Total_total+$row['total'];
}
echo "</table>";
echo "<table class='hovertable' border='1' >";
echo "<tr width='100%'>";
echo '<td>Total</td>';
echo '<td>' . $Total_rows .'</td>';
echo '<td>' . $Total_total .'</td>';
echo "</tr>";
// close table>
echo "</table>";
in your code you have one basic error in line echo '' ''; your need
put echo '' . '';
I think you also do not explain well because if they are on the same page as you say you should not have any problems to call the value of the local variables of the page.
I advise you to put different -> echo 'pass'; or echo 'pass : '.resultxxx: in controls the flow of the page, I understand that if they are on the same page and do not get out and walk in it you should be able to pick up the value of the local variables without any problem.
Please explain more your problem if you need help.

Filtering records from database table to be view and update

I'm currently trying to pull out records from database and display it on my php form for users to update it. In my database table, there's a column named stage. Under stage, there are foundation, intermediate and advance. Here's an example of it:
Valid XHTML http://img259.imageshack.us/img259/2461/databasei.png.
Valid XHTML http://imageshack.us/photo/my-images/849/profileint.png/.
So when i press the foundation button in my php form(2nd picture), only records where theirs stage are foundation, will be shown on the list(together with their name, contact number, email and student ID)
Is there any way that i can do that
Are you looking for something like this?
<?php
$stage = $_GET['stage'];
$sql = 'SELECT * FROM {$tablename} WHERE stage=:stage';
$db = new PDO('mysql:host=localhost;dbname=yourdbname', $user, $pass);
try {
$statement = $db->prepare($sql);
$statement->execute(array(':stage', db->quote($stage)));
foreach($statement->fetchAll() as $row) {
// Do things here.
}
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
<?php
include('connect-db2.php');
// get results from database
$result = mysql_query("SELECT * FROM players2 WHERE stage = 'foundation'")
or die(mysql_error());
echo "<table border='1' cellpadding='10'>";
echo "<tr> <th>S/N</th> <th>Student_ID</th> <th>Name</th> <th>Contacts No.</th> <th>Email</th><th>Stage</th></tr>";
while($row = mysql_fetch_array( $result )) {
// echo out the contents of each row into a table
echo "<tr>";
echo '<td>' . $row['id'] . '</td>';
echo '<td>' . $row['student_id'] . '</td>';
echo '<td>' . $row['name'] . '</td>';
echo '<td>' . $row['contact_no'] . '</td>';
echo '<td>' . $row['email'] . '</td>';
echo '<td>' . $row['stage'] . '</td>';
echo '<td>Edit</td>';
echo '<td>Delete</td>';
echo "</tr>";
}
?>

Categories