Box nicht anzeigen?

snoopy1972fc

Grünschnabel
Hallo,
ich habe einen kleinen Fotowettbewerb auf:
http://www.kinderfotowettbewerb.com/bilder/displayimage.php?album=toprated&cat=0&pos=3
Dort erscheint für angemeldete Benutzer eine Box zum Bewerten der Bilder.
Wenn Ihr als nicht angemeldete Benutzer die Bilder anseht erscheint diese Box nicht.

Es ist aber leider so, das diese Box zum Bewerten auch erscheint, wenn man das Bild schon bewertet hat. In dem Fall würde ich diese gerne auch ausblenden.
Mein Problem sind meine mangelhaften PHP-Kenntnisse. Da wäre ich für Eure Hilfe sehr dankbar!

Die Abfrage, das ein angemeldetes Mitglied diese Box sieht ist hier:
Code:
if (!function_exists('theme_html_rating_box')) {  //{THEMES}
function theme_html_rating_box()
{
    global $CONFIG, $CURRENT_PIC_DATA, $CURRENT_ALBUM_DATA, $THEME_DIR;
    global $template_image_rating, $lang_rate_pic;

    if (!(USER_CAN_RATE_PICTURES && $CURRENT_ALBUM_DATA['votes'] == 'YES')) return '';

    $votes = $CURRENT_PIC_DATA['votes'] ? sprintf($lang_rate_pic['rating'], round($CURRENT_PIC_DATA['pic_rating'] / 2000, 1), $CURRENT_PIC_DATA['votes']) : $lang_rate_pic['no_votes'];
    $pid = $CURRENT_PIC_DATA['pid'];

    if (defined('THEME_HAS_RATING_GRAPHICS')) {
        $location= $THEME_DIR;
    } else {
        $location= '';
    }

    $params = array('{TITLE}' => $lang_rate_pic['rate_this_pic'],
        '{VOTES}' => $votes,
        '{RATE0}' => "ratepic.php?pic=$pid&rate=0",
        '{RATE1}' => "ratepic.php?pic=$pid&rate=1",
        '{RATE2}' => "ratepic.php?pic=$pid&rate=2",
        '{RATE3}' => "ratepic.php?pic=$pid&rate=3",
        '{RATE4}' => "ratepic.php?pic=$pid&rate=4",
        '{RATE5}' => "ratepic.php?pic=$pid&rate=5",
        '{RUBBISH}' => $lang_rate_pic['rubbish'],
        '{POOR}' => $lang_rate_pic['poor'],
        '{FAIR}' => $lang_rate_pic['fair'],
        '{GOOD}' => $lang_rate_pic['good'],
        '{EXCELLENT}' => $lang_rate_pic['excellent'],
        '{GREAT}' => $lang_rate_pic['great'],
        '{WIDTH}' => $CONFIG['picture_table_width'],
        '{LOCATION}' => $location,        //theme dir or default images directory
        );

Eine Abfrage, ob das Bild schon bewertet wurde sollte das hier sein:
Code:
// Check if user already rated this picture
$user_md5_id = USER_ID ? md5(USER_ID) : $USER['ID'];
$sql = "SELECT * " . "FROM {$CONFIG['TABLE_VOTES']} " . "WHERE pic_id = '$pic' AND user_md5_id = '$user_md5_id'";
$result = cpg_db_query($sql);
if (mysql_num_rows($result)) cpg_die(ERROR, $lang_rate_pic_php['already_rated'], __FILE__, __LINE__);

Wie kann ich das jetzt oben so integrieren, das die Box nicht angezeigt wird, wenn ich bereits bewertet habe?
 
Zuletzt bearbeitet:
Hallo...

für mich sieht der zweite Code eher so aus, als wenn er zurückgibt, ob in dem Album (in dem das Bild ist) überhaupt gevotet werden darf und wieviele votings für dieses Bild schon abgegeben wurden, bzw. wie das durchschnittliche (oder Gesamt-) Rating für das Bild ist.
Man kann also damit feststellen, ob für ein Bild schon gevotet wurde oder nicht, aber in keinster Weise, ob ein bestimmter User für ein Bild schon gevotet hat.

Der erste Code zeigt meiner Meinung nach eine (unvollständige) Funktion in der einige Einstellungen für das Bild, das be-votet werden soll, vorgenommen werden. Ich weiss nicht, was sonst noch in dieser Funktion folgt, aber ich denke mal es ist besser deine Abfrage (Hat aktueller User schon für dieses Bild gevotet?) dort einzubauen, wo diese Funktion aufgerufen wird.

Allgemein befürchte ich aber, dass bei deinem System nirgendwo mitgeloggt wird, welcher User schon für welches Bild gevotet hat. Deshalb erfordert es wahrscheinlich einer ganzen Menge Arbeit diese Funktionalität einzubauen. Vielleicht gibt es ja im Verwaltungsbereich deiner Gallery eine Einstellung, mit der du einschalten kannst, dass ein User für ein Bild nur einmal voten darf.
 
für mich sieht der zweite Code eher so aus, als wenn er zurückgibt, ob in dem Album (in dem das Bild ist) überhaupt gevotet werden darf und wieviele votings für dieses Bild schon abgegeben wurden, bzw. wie das durchschnittliche (oder Gesamt-) Rating für das Bild ist.
Man kann also damit feststellen, ob für ein Bild schon gevotet wurde oder nicht, aber in keinster Weise, ob ein bestimmter User für ein Bild schon gevotet hat.

Stimmt! Ich habe mir das nochmal angesehen und einen anderen Code gefunden:
Code:
// Check if user already rated this picture
$user_md5_id = USER_ID ? md5(USER_ID) : $USER['ID'];
$sql = "SELECT * " . "FROM {$CONFIG['TABLE_VOTES']} " . "WHERE pic_id = '$pic' AND user_md5_id = '$user_md5_id'";
$result = cpg_db_query($sql);
if (mysql_num_rows($result)) cpg_die(ERROR, $lang_rate_pic_php['already_rated'], __FILE__, __LINE__);

Es gibt für diese Funktion leider keine Einstellmöglichkeiten.
Ich habe das im Supportforum der Galerie schon gepostet und es wurde mir zugestimmt, das es besser wäre, wenn es so funktionieren würde, wie ich es beschrieben habe.
Eine Lösung gab es dort leider noch nicht. Ich denke aber, das es eigentlich möglich sein muss, weil alles, was man braucht schon mal irgendwo abgefragt wurde.
 
Zuletzt bearbeitet:
Hmm..
Der Code von dir sieht ja so aus, als wenn das nach dem Bewerten abgefragt werden würde. Wenn der User dann nämlich schon eine Bewertung abgegeben hatte (num_rows ist gleich 1 also true) dann wird da irgendwie irgendwo ein Fehler generiert.

Du müsstest also die Stelle finden, wo die Box angezeigt wird (bzw. diese Funktion zum Box-Anzeigen aufgerufen wird). Dann könntest du das ganze so gestalten:

PHP:
//Check if user has rights to vote for picture
//....
if ($user_has_rights) //oder so ähnlich
   {
   // Check if user already rated this picture
   $user_md5_id = USER_ID ? md5(USER_ID) : $USER['ID'];
   $sql = "SELECT * " . "FROM {$CONFIG['TABLE_VOTES']} " . "WHERE pic_id = '$pic' AND user_md5_id = '$user_md5_id'";
   $result = cpg_db_query($sql);
   if (mysql_num_rows($result))
      {
      //Box anzeigen
      }
   }
 
Zurück