BenthamLtd
asked on
Serialize (PHP)
Following up from Webvogel's excellent advice, I'm now trying to retrieve serialized() data from a MySQL database. The data is being sent to the database row as "a:1:{i:0;s:25:"CompanyNam e field changed";}" which is great, as I know it works. The problem therein, however, is pulling it back to unserialize it.
Even if I do a simple <?php echo unserialize($row2['Adjustm ent']); ?> it returns a blank value. Yet, doing an echo $row2['Adjustment'] returns the serialized stuff mentioned above. For everything else, it returns "Array".
I'll attach the code I'm using. Any help would, as always, be much appreciated. I expect I'm doing something really quite simple (as usual). Thanks.
Even if I do a simple <?php echo unserialize($row2['Adjustm
I'll attach the code I'm using. Any help would, as always, be much appreciated. I expect I'm doing something really quite simple (as usual). Thanks.
/* snippet */
/* the <div> is basically a mouseover tooltip that is meant to display the unserialized data from the database....hence why I called the variable $tooltip.... ;) */
<?php do { ?>
<?php if ($row2['Adjustment'] == "emailed") { echo "emailed"; } else if ($row2['Adjustment'] == "printed") { echo "printed"; } else if ($row2['Adjustment'] == "bookmarked") { echo "bookmarked"; } else if ($row2['LatestModification'] <> "") { echo "<div onMouseover=\"ddrivetip('".$tooltip."', 250)\"; onMouseout=\"hideddrivetip()\">modified</div>"; } ?></td>
<?php } while ($row2 = mysql_fetch_assoc($sql2));
$tooltip = unserialize($row2['Adjustment']); # <-- !!!!!! this here !!!!!!!
$rows = mysql_num_rows($sql2);
if($rows > 0) {
mysql_data_seek($sql, 0);
$row2 = mysql_fetch_assoc($sql2);
}
?>
<?php } ?>
/* and just in case you need to know the Array....here it is. Thanks again for this Webvogel! */
<?php
foreach($row as $key => $val){
if ($row[$key] != $_POST[$map[$key]]){
$change[] = $key.' field changed';
}
}
$adjustment = serialize($change);
?>
You have a ; at the end of your while loop. Remove it.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Parse error: syntax error, unexpected T_VARIABLE, expecting ';' on line 1204
The while loop was working anyway. Any other ideas?
The while loop was working anyway. Any other ideas?
I am not clear whether you are trying to achieve this
while ($row2 = mysql_fetch_assoc($sql2))
$tooltip = unserialize($row2['Adjustm ent']); # <-- !!!!!! this here !!!!!!!
$rows = mysql_num_rows($sql2);
if($rows > 0) {
mysql_data_seek($sql, 0);
$row2 = mysql_fetch_assoc($sql2);
}
or this
while ($row2 = mysql_fetch_assoc($sql2)) {
$tooltip = unserialize($row2['Adjustm ent']); # <-- !!!!!! this here !!!!!!!
$rows = mysql_num_rows($sql2);
if($rows > 0) {
mysql_data_seek($sql, 0);
$row2 = mysql_fetch_assoc($sql2);
}
}
while ($row2 = mysql_fetch_assoc($sql2))
$tooltip = unserialize($row2['Adjustm
$rows = mysql_num_rows($sql2);
if($rows > 0) {
mysql_data_seek($sql, 0);
$row2 = mysql_fetch_assoc($sql2);
}
or this
while ($row2 = mysql_fetch_assoc($sql2)) {
$tooltip = unserialize($row2['Adjustm
$rows = mysql_num_rows($sql2);
if($rows > 0) {
mysql_data_seek($sql, 0);
$row2 = mysql_fetch_assoc($sql2);
}
}
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Whoops sorry, I forgot to update this post. We've solved it now but thank you for all your help guys. Seems we didn't need to use serialize after all. Just implode.
Happy to give a throw a few points around for the useful comments.
Happy to give a throw a few points around for the useful comments.
<?php
// GET VALUES FROM DATABASE TABLE. STORE THEM INTO ARRAY. //
$query0 = "SELECT Status, ActioneeID, TypeID, Sales_Ledger_No, ProblemsClass, CompanyName, InvoiceDate, ContactName, AccountManager, Postcode, OrderConfirmedByID, Email, Phone, GoodsToBeReturned_1, GoodsToBeReturned_1_qty, GoodsToBeReturned_2, GoodsToBeReturned_2_qty, GoodsToBeReturned_3, GoodsToBeReturned_3_qty, GoodsToBeReturned_4, GoodsToBeReturned_4_qty, GoodsToBeReturned_5, GoodsToBeReturned_5_qty, GoodsToBeReturned_6, GoodsToBeReturned_6_qty, GoodsToBeReturned_7, GoodsToBeReturned_7_qty, GoodsToBeReturned_8, GoodsToBeReturned_8_qty, GoodsToBeReturned_9, GoodsToBeReturned_9_qty, GoodsToBeReturned_10, GoodsToBeReturned_10_qty, GoodsToBeReturned_11, GoodsToBeReturned_11_qty, GoodsToBeReturned_12, GoodsToBeReturned_12_qty from vedit_sheet WHERE Sheet_No='$sheet'";
$sql0 = mysql_query($query0) or die(mysql_error());
$row0 = mysql_fetch_assoc($sql0);
$rows0 = mysql_num_rows($sql0);
# FORMAT: a<form> = hidden form for array lookup (drop down boxes). f<form> = original form name from sheet (text fields).
$map = array('Status' => 'aStatus', 'Actionee' => 'aActionee', 'Type' => 'aType', 'Sales_Ledger_No' => 'fSalesRef', 'ProblemsClass' => 'aProblems', 'CompanyName' => 'fCompany', 'InvoiceDate' => 'fInvoice', 'ContactName' => 'fContact', 'AccountManager' => 'aAccountMan', 'Postcode' => 'fPostcode', 'OrderConfirmedByID' => 'fConfirmedBy', 'Email' => 'fEmail', 'Phone' => 'fPhone'); // map array: name of database field = name of form field
foreach($row0 as $key => $val){
if ($row0[$key] != $_POST[$map[$key]]){
$array[] = $key.' field changed from '.$val.' ' ;
}
}
$comma_sep = implode("<br>",$array);
$update_sheet_history = "INSERT INTO sheet_history (Sheet_No, UserID, LatestModification, Adjustment) VALUES ('$sheet', '$_SESSION[userID]', now(), '$comma_sep') ";