Code für Abgabe von Kommentaren - Page 2 Code für Abgabe von Kommentaren - Page 2
 

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]

Main Menu

Code für Abgabe von Kommentaren

Started by cmfa, January 31, 2011, 09:18:32 PM

Previous topic - Next topic

0 Members and 3 Guests are viewing this topic.

cmfa

Hi,

bitte. Im Anhang

Αndré

Entfern die letzte Leerzeile (ganz am Ende, unter dem '?>'). Ich habe es nicht getestet, damit sollte es dann aber gehen.

cmfa

och menno, :o

nun krieg ich es gerade nicht auf die Reihe. Jetzt habe ich schon 12 Testkommentare gemacht aber Bilder darf ich nicht mehr hochladen.
Das was ich getan hab ist den Browser zu schliessen. 
Was nun??
Anbei ein Auszug aus dem SQL Server.


VG

Αndré

Keine Ahnung was du mir mit dem angehängten Screenshot sagen willst. Wenn du keine Dateien mehr hochladen kannst, hast du bereits mehr als doppelt so viele Dateien hochgeladen wie Kommentare geschrieben.

Ersetz
if (USER_ID && !GALLERY_ADMIN_MODE) {
    $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
    $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
    if ($comments/$uploads < 2) {
        cpg_die(ERROR, "Du hast zu wenig Kommentare um weitere Dateien hochzuladen", __FILE__, __LINE__);
    }
}

durch
if (USER_ID && !GALLERY_ADMIN_MODE) {
    $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
    $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
    if ($comments/$uploads < 2) {
        cpg_die(ERROR, "Du hast zu wenig Kommentare um weitere Dateien hochzuladen.<br />Kommentare: $comments<br />Dateien: $uploads", __FILE__, __LINE__);
    }
}


Dann siehst du gleich die Anzahl der Kommentare und Dateien.

cmfa

Moin moin,

danke für deine Geduld...
Anbei die aktuelle Meldung, ich versteh es nicht mehr...

VG

Αndré

Ersetze
if (USER_ID && !GALLERY_ADMIN_MODE) {
    $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
    $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
    if ($comments/$uploads < 2) {
        cpg_die(ERROR, "Du hast zu wenig Kommentare um weitere Dateien hochzuladen.<br />Kommentare: $comments<br />Dateien: $uploads", __FILE__, __LINE__);
    }
}

durch
if (USER_ID && !GALLERY_ADMIN_MODE) {
    $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
    $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
    if ($comments > 0 && $uploads/$comments > 2) {
        cpg_die(ERROR, "Du hast zu wenig Kommentare um weitere Dateien hochzuladen.<br />Kommentare: $comments<br />Dateien: $uploads", __FILE__, __LINE__);
    }
}

cmfa

hi,

mh jetzt gibt es keine Beschränkung mehr. es können beliebig viele Bilder hoch geladen werden

VG

Αndré

Manchmal ist es von Vorteil seinen Code auch zu testen ;)

Der hier sollte nun wie gewünscht funktionieren:
if (USER_ID && !GALLERY_ADMIN_MODE) {
    $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
    $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
    if ($comments == 0 || $uploads/$comments >= 2) {
        cpg_die(ERROR, "Du hast zu wenig Kommentare um weitere Dateien hochzuladen.<br />Kommentare: $comments<br />Dateien: $uploads", __FILE__, __LINE__);
    }
}



Dabei ist nach wie vor folgendes zu beachten:
Quote from: Αndré on March 19, 2010, 04:22:31 PM
Zusätzlich sollte man dann auch noch vor dem einfügen in die Datenbank überprüfen, ob noch genügend "Punkte" vorhanden sind (db_input.php). Ansonsten könnte ein Besucher mehrere Upload-Formulare öffnen und somit deine Grenze umgehen.

Ich weiß nicht ob das in deinem Fall benötigt wird oder nicht. Jetzt ist es z.B. so, dass jemand mit 2 Kommentaren und bereits 3 hochgeladenen Dateien das Uploadformular öffnen kann. Eigentlich könnte er jetzt nur noch 1 Datei hochladen. Öffnet er aber das Formular mehrmals oder benutzt den Flashuploader, kann er so viele Dateien hochladen wie er möchte.

cmfa

Hi,

danke,  :)
ja der Flashuploader wird nur verwendet. Hier sollte der "Schutz" auch reifen, wenn möglich.
Bestätigen kann ich das ich mit dem Flashuploader mehrere Dateien hochladen kann.
Die Prüfung der "Punkte" benötige ich zu zeit nicht. Wie aufwendig wäre die Prüfung?

VG

Αndré

#29
Ich glaube wir reden schonwieder völlig aneinander vorbei.

1.) Bestätige mir, dass der Code wie gewünscht funktioniert, nachdem du Dateien hochgeladen hast und das Uploadformular erneut öffnen möchtest.
2.) Die Abfrage greift bei jedem Aufruf der Datei upload.php. D.h. es wirkt sich sowohl auf den Flashuploader als auch auf das normale Formular aus. Jedoch nur beim Laden des Formulars und nicht direkt beim Hochladen der Dateien.
3.) Ich werde mich bei Gelegenheit mal ransetzen und den Schutz so einbauen, dass er direkt beim Hochladen der Dateien überprüft ob das Datei-Kommentar-Verhältnis stimmt.
4.) Ich verstehe nicht, was du mir damit sagen willst:
Quote from: cmfa on February 02, 2011, 01:50:16 PM
Die Prüfung der "Punkte" benötige ich zu zeit nicht. Wie aufwendig wäre die Prüfung?
Ersetze "Punkte" durch "Datei-Kommentar-Verhältnis" und dann sprechen wir wahrscheinlich über 3.)

cmfa

Hi,

nein wir reden nicht aneinander vorbei.
1. Code funktioniert nach erfolgter Prüfung nicht richtig. Mit dem Flashuploader kann ich soviel Bilder hochladen wie ich möchte, hattest du ja geschrieben. Ein Blockrierung kommt nicht mehr.
2. Das hatte ich schon so verstanden
3. danke dafür
4. hier hast du selber die Frage aufgeworfen und ich habe in meiner Antwort die Frage mit aufgegriffen.
Quote from: Αndré on March 19, 2010, 04:22:31 PM
Zusätzlich sollte man dann auch noch vor dem einfügen in die Datenbank überprüfen, ob noch genügend "Punkte" vorhanden sind (db_input.php). Ansonsten könnte ein Besucher mehrere Upload-Formulare öffnen und somit deine Grenze umgehen.

VG

Αndré

Quote from: cmfa on February 02, 2011, 02:09:54 PM
2. Das hatte ich schon so verstanden
Scheinbar nicht, siehe
Quote from: cmfa on February 02, 2011, 02:09:54 PM
1. Code funktioniert nach erfolgter Prüfung nicht richtig. Mit dem Flashuploader kann ich soviel Bilder hochladen wie ich möchte, hattest du ja geschrieben. Ein Blockrierung kommt nicht mehr.

Die Sperre greift momentan nur beim laden der Datei upload.php. Ist diese Seite einmal geladen, kannst du mit dem Flash-Uploader so viele Dateien hochladen wie du willst. Deswegen auch 3.)


zu 4.) Das Zitat ist fast ein Jahr alt. Das Wort "Punkte" steht nicht ohne Grund in Anführungszeichen. Nämlich weil es in der Praxis keine Punke gibt sondern immer das Verhältnis von Kommentaren und Dateien berechnet wird. Ich wollte dir lediglich mitteilen, was ich hier schon an mehreren Stellen versucht habe:
Quote from: Αndré on February 02, 2011, 01:38:46 PM
Öffnet er aber das Formular mehrmals oder benutzt den Flashuploader, kann er so viele Dateien hochladen wie er möchte.
Die Prüfung der "Punkte" ist also in Wahrheit die Prüfung des Verhältnisses von Kommentaren und Dateien. Ich bin mir daher nicht sicher was du mir hiermit sagen wolltest:
Quote from: cmfa on February 02, 2011, 01:50:16 PM
Die Prüfung der "Punkte" benötige ich zu zeit nicht. Wie aufwendig wäre die Prüfung?


Meiner Meinung nach ist nur noch bei 3.) Handlungsbedarf. D.h. die Überprüfung während des Hochladens und nicht nur während des Aufrufen des Formulars. Sind wir uns da einig?

cmfa


Αndré

Öffne include/picmgmt.inc.php, finde
function add_picture($aid, $filepath, $filename, $position = 0, $title = '', $caption = '', $keywords = '', $user1 = '', $user2 = '', $user3 = '', $user4 = '', $category = 0, $raw_ip = '', $hdr_ip = '', $iwidth = 0, $iheight = 0)
{

und füge danach folgendes ein
    if (USER_ID && !GALLERY_ADMIN_MODE) {
        $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
        $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
        if ($comments == 0 || $uploads/$comments >= 2) {
            return array('error' => "Du hast zu wenig Kommentare um weitere Dateien hochzuladen.\nKommentare: $comments\nDateien: $uploads", 'halt_upload' => 1);
        }
    }

cmfa

hi,

leider möchte es bei mir noch nicht so richtig funktionieren.

// Add a picture to an album
function add_picture($aid, $filepath, $filename, $position = 0, $title = '', $caption = '', $keywords = '', $user1 = '', $user2 = '', $user3 = '', $user4 = '', $category = 0, $raw_ip = '', $hdr_ip = '', $iwidth = 0, $iheight = 0)
{
if (USER_ID && !GALLERY_ADMIN_MODE) {
        $uploads = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_PICTURES']} WHERE owner_id = ".USER_ID), 0);
        $comments = mysql_result(cpg_db_query("SELECT COUNT(*) FROM {$CONFIG['TABLE_COMMENTS']} WHERE author_id = ".USER_ID), 0);
        if ($comments == 0 || $uploads/$comments >= 2) {
            return array('error' => "Du hast zu wenig Kommentare um weitere Dateien hochzuladen.\nKommentare: $comments\nDateien: $uploads", 'halt_upload' => 1);
        }
    } 

In der uploade.php ist nichts mehr drin.
In dieser Form wie im Code zu sehen kommt die angehängte Fehlermeldung bei mir.
Mache ich noch was falsch?

CMFA




Αndré

Das Spiel hatten wir doch schon:
Quote from: Αndré on February 01, 2011, 09:18:15 PM
Entfern die letzte Leerzeile (ganz am Ende, unter dem '?>')

Generell dürfen gar keine Leerzeilen vor
<?php
und nach
?>
stehen.

Und wieso hast du den Code aus upload.php entfernt? Es ist doch sinnvoll deinen Benutzern auch schon vorher zu sagen, dass sie nichts mehr hochladen können anstatt sie erst versuchen zu lassen ob es noch funktioniert.

cmfa

Hi,

die Leerzeichen hatte ich schon im Vorfeld (nach deinem ersten Hinweis) entfernt. Die Fehlermeldung kommt auch wenn der Code in der Upload.php steht.
Es ist wieder eingetragen, es kommt kein Hinweis das nichts mehr hoch geladen werden darf. Nach dem hoch laden kommt dann immer noch die beschrieben Fehlermeldung.

CMFA

Αndré

Die Ursache dieser Fehlermeldung ist in den meisten Fällen, wenn in irgendeiner involvierten Datei Leerzeichen bzw. Leerzeilen vor bzw. nach den PHP-Tags stehen.

Überprüfe bitte nochmal genau, ob du irgendwo Leerzeichen eingebaut hast. Du kannst auch nochmal die beiden Originaldateien hochladen und schauen ob der Fehler dann weg ist. Wenn das so ist, füge die Änderungen erneut ein und pass genau auf Leerzeichen auf. Wenn du keinen Fehler entdecken kannst, füge die beiden Dateien wieder als Zip-Datei an deine nächste Antwort an.

cmfa

hi,

gut im Anhng sind die beiden Dateien.
Leerzeichen habe ich nochmals entfernt, auch in Mir sind einige Dateien untergekommen, wo "?>" komplett fehlt. evtl. ist das ja Absicht.
Habe dir mal eine neue Datenbank aufgesetzt. Hier kannst schauen was ich zur zeit sehe.
Benutzer: Tester PW: test
In beiden Dateien ist der Code drin

VG

CMFA

Αndré

Ich habe mich gerade eingeloggt und upload.php aufgerufen:
QuoteError
Du hast zu wenig Kommentare um weitere Dateien hochzuladen.
Kommentare: 0
Dateien: 0

Das war zu erwarten und arbeitet korrekt.


Wenn ich jetzt jedoch etwas hochladen möchte, erhalte ich eine Fehlermeldung beim Flash-Uploader und sogar eine Fehlermeldung bei dem einfachen Uploadformular. Leider ist der Debugmodus deaktiviert, weshalb ich den Fehler nicht weiter ergründen kann.


Quote from: cmfa on February 07, 2011, 04:39:04 PM
auch in Mir sind einige Dateien untergekommen, wo "?>" komplett fehlt.
Das ist erstmal egal.