Jump to content

Unserializing data


bullbreed

Recommended Posts

I have some serializes data in the db that holds the sizes of a product and i'm trying to unserialize it and show it in a menu form field but im having a few problems.

 

Heres the code

  <?php
    
        $sql = "SELECT * FROM `products` WHERE `prod_name` = '".$_GET['nid']."' limit 1 ";
        $query = mysql_query($sql) or die(mysql_error());
            
                    if (mysql_num_rows($query) > 0) {
            
                            while ($row = mysql_fetch_assoc($query)){
                            $sizes = $row['prod_sizes'];
                            $sizes = stripslashes($sizes); 
                            $sizes = unserialize($sizes);
                            $itemcount = count($sizes);
                                    for ($i=0;$i<$itemcount;$i++) {
            
    ?>      
    <div class="contwraps">
    <label>Select a size</label>
        <div class="textinput">
            <select name="sizeselect">
                <option><?php echo $sizes[$i]; ?></option>
            </select>
        </div>
    </div>
    
    
    <?php 
                                    }
                            }
                    }

    ?>

Heres what it says on screen

 

Notice: unserialize() [function.unserialize]: Error at offset 18 of 20 bytes in C:\xampp\htdocs\Fight-Stuff\CommunicoreCMS\includes\prodtype.php on line 92

 

Line 92 is - $sizes = unserialize($sizes);

 

Whats wrong?

Link to comment
https://forums.phpfreaks.com/topic/195682-unserializing-data/
Share on other sites

Ah yes, thank you. I set the size of the varchar to 10 (duh)

 

he result is a little strange though now I changes it because I now get each size displayed in its own menu dropdown so if I have sizes S-M-L-XL they display in their individual drop down menus instead of all being in 1 menu drop down

Link to comment
https://forums.phpfreaks.com/topic/195682-unserializing-data/#findComment-1028104
Share on other sites

I remember reading somewhere about ...

 

Creating code that does what you want, when and where you want it to be, is not a matter of reading somewhere about something, it is a matter of making your code do what you want and when your code does not do what you want it is a matter of troubleshooting what it is doing. Did you look at and read the code that is responsible for producing the output in question.

 

The for(){} loop that is producing the menu contains the entire code for the <select>...</select> menu inside of it, so of course you will get a complete menu for each pass through the for(){} loop.

 

Wouldn't the solution be to output just the <option>...</option> choices inside of the for(){} loop?

Link to comment
https://forums.phpfreaks.com/topic/195682-unserializing-data/#findComment-1029501
Share on other sites

Thanks for that.

 

Please be aware that I have only been doing PHP for a couple of months now and at 36 yrs old its a bit like teaching an old dog new tricks. lol. Remember I come from a time of Commodore 64 and BBC Master 128.  ;D

 

I changed the code to this;

<?php
    
        $sql = "SELECT * FROM `products` WHERE `prod_name` = '".$_GET['nid']."' limit 1 ";
        $query = mysql_query($sql) or die(mysql_error());
            
                    if (mysql_num_rows($query) > 0) {
            
                            while ($row = mysql_fetch_assoc($query)){
                            $sizes = $row['prod_sizes']; 
                            $sizes = unserialize($sizes);
                            $itemcount = count($sizes);
						}
                    }
            
    ?>     
    <label>Select a Size</label>
        <div class="textinput">
            <select name="sizeselect">
            <?php for ($i=0;$i<$itemcount;$i++) { ?>
                <option><?php echo $sizes[$i]; ?></option> 
		<?php } ?>
            </select>

 

So if I understand correctly, the issue was because the For (){} loop was performing a loop for each size option as an individual, hence individual menu form fields.

 

But because I put the for(){} loop around only the <option>...</option> code this placed the data in one meny field.

 

Thanks for your help.

Link to comment
https://forums.phpfreaks.com/topic/195682-unserializing-data/#findComment-1029535
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.