Jump to content

[SOLVED] array help


john32

Recommended Posts

Hi,

 

I am a complete PHP/MySQL newbie and was wondering if someone could point me in the right direction please?

 

I am creating a small 'news items' list and I'm wondering how to make items 'archived'. For this basic example my 'news' table has the following fields:

 

id (tinyint)

title (varchar(255))

archived (char(1))

 

where 'archived' is 1 or 0.

 

My page would display each news title followed by a checkbox so the user can tick it to be archived if required. So after doing an sql select my code would be:

$sql = "SELECT * FROM news";
    $items = mysql_query($sql);
    $numrows = mysql_num_rows($items);
    while ($item = mysql_fetch_array($items)) {
        $n_id = $item["id"];
        $n_title = $item["title"];
        $n_archive = $item["archive"];
        if ($archive == '1') {
            $checked = 'checked="checked" ';
        } else {
            $checked = '';
        }
        echo($n_title . "<input type=\"checkbox\" name=\"archived[]\" value=\"".$n_id."\" ".$checked." /> );
    }

 

When clicking the submit button I need to update the table where those that have been ticked = 1 and those that are unticked = 0.

 

This is where I start to fall over as a complete newbie! I was thinking that it would be something relatively simple like:

for($i=0;$i<$numrows;$i++){
    $sql="UPDATE news SET archived='1' WHERE id = $archived[$i]";
}

 

but this doesn't seem to be working ... and also obviously doesn't set the 'archive' field to 0 if the checkbox has been unticked.

 

Any pointers would be very, very much appreciated. It wouldn't surprise me if I'm going completely the wrong way about it.

 

Thanks for your time and help,

 

John32

 

 

 

Link to comment
https://forums.phpfreaks.com/topic/132439-solved-array-help/
Share on other sites

There's actually a much neater shortcut here. You don't need to loop through your array and execute a separate query for each item. Because you've given the checkboxes a value corresponding to the row's ID, you can do the following:

 

$ids = implode(',',$_POST['archived'];
$sql = "UPDATE news SET archived='1' WHERE id IN ($ids)";
mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR);

$sql = "UPDATE news SET archived='0' WHERE id NOT IN ($ids)";
mysql_query($sql) or trigger_error(mysql_error(),E_USER_ERROR);

 

How does it work? Well, the implode function creates a string from the array using the delimiter to separate each element - in this case, a comma. The IN clause in the mysql query allows you to specify a comma delimited list of possible values.

 

We perform a second query using NOT IN to take care of any items which have been un-archived.

 

Also, notice how the query has been performed. In your previous code, you were suppressing the error with the @ symbol. I've explicitly made it so that errors are shown - it'll make it much easier to find any problems.

Link to comment
https://forums.phpfreaks.com/topic/132439-solved-array-help/#findComment-688598
Share on other sites

Oh, you should note that the above code isn't very secure. The values of the checkbox aren't verified, so they may not be integers. If this is anywhere live, you should make sure all the values in that array are integers before you execute the query.

Link to comment
https://forums.phpfreaks.com/topic/132439-solved-array-help/#findComment-688604
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.