Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
Register FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 02-11-2007, 08:37 PM
TomasDR TomasDR is offline
 
Join Date: Feb 2006
Posts: 121
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default unserialize not working correctly

I am trying to use a hack that is no longer supported and the original coder isn't replying even on his own board. I am hoping someone can assist me since I am very confused about what is wrong.

I am using FC4 with updated RPMs, so PHP=5.0.4 & SQL=4.1.20, I also use MYSQLi to connect to the database.

The original code is:
Code:
    $cdfield = "field" . $vbulletin->options["countdownfield"];
    $query = $vbulletin->db->query_read( "SELECT $cdfield FROM " . TABLE_PREFIX . "userfield WHERE userid='" . $post["userid"] . "';" );
    $result = mysql_fetch_array( $query );
  
    $cddata = unserialize( str_replace( """, '"', $result[$cdfield] ) );
  
    if ( $cddata["enabled"] == "Yes" )
I know $cdfield is working and returning the proper field#.

So I made this test code to figure out what is wrong:
Code:
<?php
$link = mysql_connect('localhost', 'dbname', 'dbpassword');
if (!$link) {
   die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully'.'<br />';
$result = mysql_query("SELECT field10 FROM vbulletin.vb_userfield WHERE userid='3531'");
if (!$result) {
   die('Invalid query: ' . mysql_error());
}
echo 'Query Results'.'<br />';
var_dump ($result);
$result2 = str_replace( "&quot;", '"', $result['field10'] );
echo '<br/>'.'Replace Results'.'<br />';
var_dump ($result2);
$serializedarray = unserialize($result2['field10']);
echo '<br/>'.'Unserialized'.'<br />';
var_dump ($serializedarray);
echo $result["enabled"];
?>
I receive:
Code:
Connected successfully
Query Results
resource(3) of type (mysql result) 
Replace Results
string(0) "" 
Unserialized
bool(false)
My raw data in the SQL table looks like this:
Code:
a:8:{s:7:&quot;enabled&quot;;s:3:&quot;Yes&quot;;s:3:&quot;day&quot;;s:1:&quot;1&quot;;s:5:&quot;month&quot;;s:1:&quot;1&quot;;s:4:&quot;year&quot;;s:4:&quot;2009&quot;;s:4:&quot;hour&quot;;s:1:&quot;0&quot;;s:6:&quot;minute&quot;;s:1:&quot;0&quot;;s:5:&quot;event&quot;;s:14:&quot;Happy New Year&quot;;s:7:&quot;overmsg&quot;;s:15:&quot;Make Resolution&quot;;}
Any help would be greatly appreciated.
Reply With Quote
  #2  
Old 02-12-2007, 01:20 AM
Analogpoint's Avatar
Analogpoint Analogpoint is offline
 
Join Date: Feb 2007
Posts: 656
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Did you try doing an unserialize on the serialized data before other manipulations such as the str_replace?

EDIT:
Also, mysql_query returns a MySQL "resource", you should pass it to one of the functions such as mysql_fetch_assoc to return a php array of the data.

PHP Code:
<?php
$link = mysql_connect('localhost', 'dbname', 'dbpassword');
if (!$link) {
   die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully'.'<br />';
$result = mysql_query("SELECT field10 FROM vbulletin.vb_userfield WHERE userid='3531'");
if (!$result) {
   die('Invalid query: ' . mysql_error());
}
echo 'Result resource<br />';
var_dump ($result);

echo 'Result array<br />';
$result = mysql_fetch_assoc ($result);
var_dump ($result);

echo 'Result unserialized<br />';
$result = unserialize ($result['field10']);
var_dump ($result);

echo 'Result quotes replaced<br />';
$result = str_replace( "&quot;", '"', $result);
var_dump ($result);

?>
Reply With Quote
  #3  
Old 02-12-2007, 01:23 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Bingo.

Remember that a when you serialize something, PHP records the lengths of all the strings, arrays, etc. Changing things like &quot; to " would muck this up, resulting in an usable data.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:54 PM.


Powered by vBulletin® Version 3.9.0
Copyright ©2000 - 2017, vBulletin Solutions Inc.