Advanced search  

News:

cpg1.5.48 Security release - upgrade mandatory!
The Coppermine development team is releasing a security update for Coppermine in order to counter a recently discovered vulnerability. It is important that all users who run version cpg1.5.46 or older update to this latest version as soon as possible.
[more]

Pages: [1]   Go Down

Author Topic: I need a little help with a MOD  (Read 2640 times)

0 Members and 1 Guest are viewing this topic.

noeinstein

  • Coppermine newbie
  • Offline Offline
  • Posts: 7
I need a little help with a MOD
« on: September 15, 2008, 01:38:31 pm »

Hi, i am working on a ’Easy Keyword insert MOD v3’ for coppermine 1.4.x.  I am almost there but have run into a problem. With this code i am able to read the keywords from the database and display 1 checkbox for every keyword, but only the last keyword selected is going into the database. I don’t understand why.

I would be very greatful if somebody could help me with this, I have spent days trying to figure this out.

The code:
Quote
// Ok, go with "Easy keyword insert MOD v2"
//mod here

// The text Keyword form  <---- modded     input function. Takes the text label for the box, the input name, the maximum length for text boxes,
// and the number of iterations.
function keyword_box_input($text, $name, $max_length, $iterations, $default='') {

    global $CONFIG;

    $ordinal = '';

    if (($text == '') and ($iterations == '')) {
        echo "        <input type=\"hidden\" name=\"$name\" value=\"$default\" />\n";
        return;
    }

    // Begin loop
    for ($counter=0; $counter<$iterations; $counter++) {

    // Create a numbering system when necessary.
    if ($text == '') {
        $cardinal = $counter + 1;
        $ordinal = "".$cardinal.". ";
    }
// Hop stop here ! Add request of keyword_select.php to get the keyword list
$query = "SELECT * FROM {$CONFIG['TABLE_PREFIX']}dict ORDER BY keyword";
$result = cpg_db_query($query);


while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $keywordIds[] = $row["keyId"];
    $keywords[]   = $row["keyword"];
}
$form = "";
foreach ($keywords as $keyword) {
         $form.= '<input type="checkbox" name="keywords" value="'.$keyword.'">'.$keyword.'<br></input>';
        }
// Return at the mod
// Create the keyword  box.
    echo <<< EOT
        <tr>
            <td width="40%" class="tableb" valign="top">
                        Kategorier :
        </td>
        <td width="60%" class="tableb" valign="top">
<div align="left">
<label>
   $form
</label>
</div>


                </td>
        </tr>   

EOT;
    }
}

Quote
        // We have incoming placement data. Let's capture it.

        $album = (int)$_POST['album'];
        $title = addslashes($_POST['title']);
        $caption = addslashes($_POST['caption']);
        $keywords = addslashes($_POST['keywords']);
        $user1 = addslashes($_POST['user1']);
        $user2 = addslashes($_POST['user2']);
        $user3 = addslashes($_POST['user3']);
        $user4 = addslashes($_POST['user4']);

Quote
            // Create thumbnail and intermediate image and add the image into the DB
            $result = add_picture($album, $filepath, $picture_name, 0,$title, $caption, $keywords, $user1, $user2, $user3, $user4, $category, $raw_ip, $hdr_ip, $movie_wd, $movie_ht);
Logged

Nibbler

  • Guest
Re: I need a little help with a MOD
« Reply #1 on: September 15, 2008, 01:54:43 pm »

You need

Code: [Select]
$form.= '<input type="checkbox" name="keywords[]" value="'.$keyword.'">'.$keyword.'<br></input>';
So that the browser treats it as an array and you need this

Code: [Select]
$keywords = array_map('addslashes', $_POST['keywords']);
$keywords = implode(',', $keywords);

so that the server treats it as an array.
Logged

noeinstein

  • Coppermine newbie
  • Offline Offline
  • Posts: 7
Re: I need a little help with a MOD
« Reply #2 on: September 15, 2008, 08:47:06 pm »

Hi, and thank you very much for your reply.

But I have tried to change this lines and now all that goes into the database is 'Array', no keywords :(.

I also noticed another bug with this mod, The first keyword is checked/unchecked everytime one of the other checkboxes is checked/unchecked.

Appreciate a little more help.

Noeinstein

Logged

noeinstein

  • Coppermine newbie
  • Offline Offline
  • Posts: 7
Re: I need a little help with a MOD
« Reply #3 on: September 15, 2008, 09:45:27 pm »

Sorry that i don't know much php.

I found this line in upload.php:
Quote
array($lang_upload_php['keywords'], 'keywords', 5, 255, 1,(isset($iptc['Keywords'])) ? implode(' ',$iptc['Keywords']): ''),

Does this do something like this line you wrote?
Quote
$keywords = implode(',', $keywords);
Logged

noeinstein

  • Coppermine newbie
  • Offline Offline
  • Posts: 7
Re: I need a little help with a MOD
« Reply #4 on: September 16, 2008, 11:08:22 am »

Sorry for another post. This time i will try to post all relevant code conserning keywords and maybe someone can tell me where I go wrong.

This is from the original upload.php.
Quote
// The function for text areas on forms. Takes the label, field name, and maximum length as arguments.
function text_area_input($text, $name, $max_length,$default='') {

    // Create the text area.
    echo <<<EOT
        <tr>
                <td class="tableb" valign="top">
                        $text
                </td>
                <td class="tableb" valign="top">
                        <textarea name="$name" rows="5" cols="40" class="textinput" style="width: 100%;" onKeyDown="textCounter(this, $max_length);" onKeyUp="textCounter(this, $max_length);">$default</textarea>
                </td>
        </tr>
EOT;
}

This is the mod i am trying to change:
Quote
// Ok, go with "Easy keyword insert MOD v2"
//mod here

// The text Keyword form  <---- modded     input function. Takes the text label for the box, the input name, the maximum length for text boxes,
// and the number of iterations.
function keyword_box_input($text, $name, $max_length, $iterations, $default='') {

    global $CONFIG;

    $ordinal = '';

    if (($text == '') and ($iterations == '')) {
        echo "        <input type=\"hidden\" name=\"$name\" value=\"$default\" />\n";
        return;
    }

    // Begin loop
    for ($counter=0; $counter<$iterations; $counter++) {

    // Create a numbering system when necessary.
    if ($text == '') {
        $cardinal = $counter + 1;
        $ordinal = "".$cardinal.". ";
    }
// Hop stop here ! Add request of keyword_select.php to get the keyword list
$query = "SELECT * FROM {$CONFIG['TABLE_PREFIX']}dict ORDER BY keyword";
$result = cpg_db_query($query);


while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $keywordIds[] = $row["keyId"];
    $keywords[]   = $row["keyword"];
}
$form = "";
foreach ($keywords as $keyword) {
         $form.= '<input type="checkbox" name="keywords[]" value="'.$keyword.'">'.$keyword.'<br></input>';
        }
// Return at the mod
// Create the keyword  box.
    echo <<< EOT
        <tr>
            <td width="40%" class="tableb" valign="top">
                        Kategorier :
        </td>
        <td width="60%" class="tableb" valign="top">
<div align="left">
<label>
   $form
</label>
</div>


                </td>
        </tr>   


EOT;
    }
$keywords = addslashes(implode(',', $_POST['keywords']));
   
}

This is from the original mod:
Quote
               // If the type is keyword input
                case 5 :

                    // Call the text area function.
                    keyword_box_input($element[0], $element[1], $element[3], (isset($element[4])) ? $element[4] : '');
                    break;

This section is also changed by the original mod:
Quote
        // Declare an array containing the various upload form box definitions.
        $captionLabel = $lang_upload_php['description'];
        if ($CONFIG['show_bbcode_help']) {$captionLabel .= '&nbsp;'. cpg_display_help('f=index.html&amp;base=64&amp;h='.urlencode(base64_encode(serialize($lang_bbcode_help_title))).'&amp;t='.urlencode(base64_encode(serialize($lang_bbcode_help))),470,245);}
        $form_array = array(
        sprintf($lang_upload_php['max_fsize'], $CONFIG['max_upl_size']),
        array($lang_upload_php['album'], 'album', 2),
        array('MAX_FILE_SIZE', $max_file_size, 4),
        array($lang_upload_php['picture'], 'userpicture', 1, 1),
        array($lang_upload_php['pic_title'], 'title', 0, 255, 1),
        array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length']),
        array($lang_upload_php['keywords'], 'keywords', 5, 255, 1),
        array('event', 'picture', 4)
        );

Here I changed a line according to yuor post:
Quote
        // We have incoming placement data. Let's capture it.

        $album = (int)$_POST['album'];
        $title = addslashes($_POST['title']);
        $caption = addslashes($_POST['caption']);
        $keywords = array_map('addslashes', $_POST['keywords']);
        $user1 = addslashes($_POST['user1']);
        $user2 = addslashes($_POST['user2']);
        $user3 = addslashes($_POST['user3']);
        $user4 = addslashes($_POST['user4']);

Quote
            // Create thumbnail and intermediate image and add the image into the DB
            $result = add_picture($album, $filepath, $picture_name, 0,$title, $caption, $keywords, $user1, $user2, $user3, $user4, $category, $raw_ip, $hdr_ip, $movie_wd, $movie_ht);

Last quote, this changed by original mod
Quote
    $form_array = array(
    array($lang_upload_php['album'], 'album', 2),
    array($lang_upload_php['pic_title'], 'title', 0, 255, 1, $title),
    array($captionLabel, 'caption', 3, $CONFIG['max_img_desc_length'], (isset($iptc['Caption'])) ? $iptc['Caption'] : ''),
    array($lang_upload_php['keywords'], 'keywords', 5, 255, 1,(isset($iptc['Keywords'])) ? implode(' ',$iptc['Keywords']): ''),
    array('control', 'phase_2', 4),
    array('unique_ID', $_POST['unique_ID'], 4),
    );

I hope soemone can help me and that others will find this mod useful when it works the way it is supposed to

Regards Noeinstein


Logged

noeinstein

  • Coppermine newbie
  • Offline Offline
  • Posts: 7
Re: I need a little help with a MOD
« Reply #5 on: September 16, 2008, 03:01:55 pm »

Sorry, but this line is at the wrong place when I quoted.

$keywords = addslashes(implode(',', $_POST['keywords']));

are places under
 $keywords = array_map('addslashes', $_POST['keywords']);

Just me that tried a lot of things to see if I could get this to work
Logged

Nibbler

  • Guest
Re: I need a little help with a MOD
« Reply #6 on: September 16, 2008, 07:25:28 pm »

$keywords = addslashes(implode(',', $_POST['keywords']));

Remove that line.
Logged
Pages: [1]   Go Up
 

Page created in 0.022 seconds with 20 queries.