Beiträge von Sören

    Fehler Gefunden :D

    @Waldschrat: in der .htaccess müsste allow und deny umgekekehrt werden, es ist immer die Reihenfolge, in der es im Code steht.
    Es sollten aber besser die gesperrten Adressen nach dem allow stehen, ist ja sinnlos, wenn du erst welche verbietest und dann alle wieder erlaubst. :wink:
    Verbessert:

    Code
    order allow,deny
    allow from all 
    deny from 127.0.0.1
    deny from 127.0.0.2
    deny from 127.0.0.3

    Den selben Fehler hatte ich auch mal, mich haben so ein paar Idioten aufgeregt, die Wochenlang versucht haben irgendetwas mit meinem Gästebuch zu machen, aber nie irgendetwas erreicht haben. :D

    Wozu machst du $data zu einem array, nur um in_array verwenden zu können? in_array prüft glaube ich nämlich nur, ob ein Wert enthalten ist, der genau dem Suchstring entspricht und da deine ip.txt aus mehreren ips besteht, kann das gar nicht sein.

    Besser geeignet wäre strpos.

    Zitat von "Sarkkan"

    Ich würde das ja bequem über die .htaccess machen :D

    Code
    order allow,deny
    deny from 127.0.0.1
    deny from 127.0.0.2
    deny from 127.0.0.3
    allow from all

    einfach für jede gesperrte IP ein weiteres deny from xxx.xxx.xxx.xxx anlegen :D

    Die Methode "Database" ist der Konstruktor, da sie den selben Namen, wie die Klasse hat.

    Wenn man vollständig objektorientiert arbeiten möchte, kann man das so machen, aber man kann die Klasse ja auch in "normalem" prozeduralen Code benutzen.

    Wenn du deine Inhalte jetzt noch leicht ändern willst, fehlt noch eine UPDATE-Funktion: (Hab ich jetzt nicht getestet, müsstest du so in Sarkkans Klasse einfügen können)

    PHP
    <span class="syntaxdefault"><br />public </span><span class="syntaxkeyword">function </span><span class="syntaxdefault">update</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$table</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$updates</span><span class="syntaxkeyword">) {<br />    </span><span class="syntaxdefault">$query </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"UPDATE `"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">database</span><span class="syntaxkeyword">.</span><span class="syntaxstring">"`.`$table` SET"</span><span class="syntaxkeyword">;<br />    foreach (</span><span class="syntaxdefault">$updates </span><span class="syntaxkeyword">as </span><span class="syntaxdefault">$key </span><span class="syntaxkeyword">=> </span><span class="syntaxdefault">$value</span><span class="syntaxkeyword">) {<br />        </span><span class="syntaxdefault">$query </span><span class="syntaxkeyword">.= </span><span class="syntaxstring">" $key = '$value',"</span><span class="syntaxkeyword">;<br />    }<br />    return </span><span class="syntaxdefault">$this</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">query</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$query</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">, -</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">).</span><span class="syntaxstring">";"</span><span class="syntaxkeyword">);<br />}<br /> </span><span class="syntaxdefault"></span>

    Als $updates muss ein assoziates Array mit den Feldnamen als Schlüsseln genommen werden.

    PHP
    <span class="syntaxdefault">$db</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">update</span><span class="syntaxkeyword">(</span><span class="syntaxstring">"article"</span><span class="syntaxkeyword">, array(</span><span class="syntaxstring">"titel" </span><span class="syntaxkeyword">=> </span><span class="syntaxstring">"Test"</span><span class="syntaxkeyword">, </span><span class="syntaxstring">"datum" </span><span class="syntaxkeyword">=> </span><span class="syntaxdefault">time</span><span class="syntaxkeyword">(), </span><span class="syntaxstring">"beschreibung" </span><span class="syntaxkeyword">=> </span><span class="syntaxstring">"Dies ist eine Seite"</span><span class="syntaxkeyword">)); </span><span class="syntaxdefault"></span>

    Sarkkan: Wozu hast du in der Klasse die private Methode escapeString, die in den anderen Methoden gar nicht benutzt wird?

    Das heißt, dein Provider hat bei deinem Webspace diese Dinge nicht erlaubt.
    Vielleicht gibt es ja im "Kundencenter" die Möglichkeit, diese Dinge freizuschalten, sonst solltest du dir vielleicht einen anderen Webspace suchen.

    Versuchs mal mit php_flag statt php_value, laut Sarkkans Quelle soll das für boolesche Werte verwendet werden.

    Zitat von &quot;http://www.php.net/manual/de/configuration.changes.php&quot;

    Hinweis: Verwenden Sie php_value nicht, um boolesche Werte zu setzen. php_flag (siehe unten) sollte stattdessen verwendet werden.

    Bei deiner Zeitausgabe erzeugst du ziemlich falschen HTML-Code. Richtig müsste es so sein:

    PHP
    <span class="syntaxdefault"></span><span class="syntaxkeyword">echo </span><span class="syntaxstring">"<p class=\"zeit\">" </span><span class="syntaxkeyword">. </span><span class="syntaxdefault">date </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"d.m.Y H:i:s"</span><span class="syntaxkeyword">).</span><span class="syntaxstring">"</p>"</span><span class="syntaxkeyword">; </span><span class="syntaxdefault"></span>

    Außerdem hat sowieso jeder ne eigene Uhr am Computer, das ist damit überflüssig.

    In deinem CSS-Code wird zuerst versucht die Schirftart "Arial" zu benutzen, wenn diese nicht da ist wird irgendeine serifenlose Schriftart benutzt, nur wenn keine vorhanden ist, wird "Verdana" verwendet. Da Verdana aber auch eine serifenlose Schriftart ist, kann sie gar nicht da sein, wenn keine serifenlose Schriftart vorhanden ist.

    Die Einheit pt ist nicht für den Bildschirm geeignet, da sie absolut in cm ist. (Hört sich ein bischen komisch an, ich weiß nicht, wie ich das sonst sagen soll^^) Außerdem benutzt du zur Angabe der Schriftgröße px und pt, also zwei komplett verschiedene Einheiten.

    Für margin gibt es genau die Selbe Kurzschreibweise, wie für padding. Du musst da nicht alle Werte einzeln angeben.

    Wenn man die Grafiken entfernt sieht man gar nichts mehr, da Schrift- und Hintergrundfarbe weiß ist, du solltest noch Hintergrundfarben definieren.
    Dies gilt vor allem für den Header, da hier bei großen Auflösungen das Bild rechts wiederholt wird. Hier solltest du das Wiederholen auf der x-Achse verhindern und als Hintergrundfarbe, die Farbe nehmen, mit der das Bild rechts aufhört.

    Du kannst das auch über reguläre Ausdrücke machen, die aktuelle Tabelle hat die Klasse "result-set". Somit kannst du dann das erste Vorkommen einer Tabelle mit class="result-set" suchen und den Inhalt extrahieren.
    So ist das zu Mindest bem Bremer Click-TT, wenns bei dir anders ist, musst dus halt anpassen.

    PHP
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br /></span><span class="syntaxcomment">// Seite, von der eingebunden werden soll<br /></span><span class="syntaxdefault">$seite </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"http://fttb.click-tt.de/cgi-bin/WebObjects/ClickNTTV.woa/wa/groupPage?championship=DTTB+10%2F11&group=137857"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxcomment">// Seite laden<br /></span><span class="syntaxdefault">$datei </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> file_get_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$seite</span><span class="syntaxkeyword">);<br /></span><span class="syntaxcomment">// findet das erste Vorkommen der Tabelle und speichert deren Inhalt in $matches[1] ($matches[0] enthält auch das außenrum<br /></span><span class="syntaxdefault">$pattern </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"~<table class=\"result-set\" cellpadding=\"0\" border=\"0\" cellspacing=\"0\">(.*?)</table>~is"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$pattern</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $datei</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $matches</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">   $tblinhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"<table>"</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$matches</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">].</span><span class="syntaxstring">"</table>"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// inhalt der Tabelle in einer neuen Tabelle speichern<br /></span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">else </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">   $tblinhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"Falsche Datei eingebunden"</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// wenn Tabelle nicht gefunden, falsche URL<br /></span><span class="syntaxkeyword">}<br /><br /></span><span class="syntaxdefault">echo $tblinhalt</span><span class="syntaxkeyword">;</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// Tabelle ausgeben<br /></span><span class="syntaxdefault">?><br /></span></span>


    Die Seite musst du natürlich anpassen, du willst wohl nicht die Bundesliga haben.
    Wenn du was nicht verstehst, dann frag mich.

    Du musst die Überprüfung der E-Mail Adresse auch in die Bedingung, ob abgesendet wird, reinschreiben. Sonst prüft er die E-Mail Adresse ja nur, wenn irgendetwas anderes falsch ist.

    Du solltest die Rückgabewerte der Funktion noch ändern, beispielsweise so:

    PHP
    <span class="syntaxdefault"><br /></span><span class="syntaxkeyword">function </span><span class="syntaxdefault">is_mail </span><span class="syntaxkeyword">( </span><span class="syntaxdefault">$testmail </span><span class="syntaxkeyword">) {        </span><span class="syntaxcomment">//funktion zur überprüfung der Emailadresse ob sie valide ist!<br />        </span><span class="syntaxdefault">$suchmuster </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"/^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$/"</span><span class="syntaxkeyword">;<br />        if (</span><span class="syntaxdefault">preg_match</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$suchmuster</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$testmail</span><span class="syntaxkeyword">) {<br />         return </span><span class="syntaxdefault">true</span><span class="syntaxkeyword">;<br />        }<br />        else { <br />         return </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">;<br />        }<br />}<br /> </span><span class="syntaxdefault"></span>


    Die Bedingung könnte dann so aussehen:

    PHP
    <span class="syntaxdefault"><br />    </span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">$benutzername </span><span class="syntaxkeyword">== </span><span class="syntaxstring">"" </span><span class="syntaxkeyword">OR<br />        </span><span class="syntaxdefault">$mail         </span><span class="syntaxkeyword">== </span><span class="syntaxstring">"" </span><span class="syntaxkeyword">OR<br />        </span><span class="syntaxdefault">$betreff      </span><span class="syntaxkeyword">== </span><span class="syntaxstring">"" </span><span class="syntaxkeyword">OR<br />        </span><span class="syntaxdefault">$nachricht    </span><span class="syntaxkeyword">== </span><span class="syntaxstring">""  </span><span class="syntaxkeyword">OR<br />        </span><span class="syntaxdefault">false </span><span class="syntaxkeyword">=== </span><span class="syntaxdefault">test_mail</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$mail</span><span class="syntaxkeyword">) )<br /> </span><span class="syntaxdefault"></span>

    Du vergleichst den String aus der Eingabe mit dem Array vom Captcha-Script (jeder Buchstabe ist in einem Paar des Arrays gespeichert), das geht aber nicht.
    Genau das Selbe Problem hatte ich auch, als ich das Captcha nachbauen wollte. ;)

    Du bräuchtest jetzt eine Funktion, die aus dem Array einen String macht oder aus dem String einen Array. Wobei ersteres beim Vergleichen weniger Code wäre. Wenn du, so wie ich damals, keine Funktion dafür findest, musst du das manuell machen, was bei 4 Zeichen durchaus geht, indem du alle Werte des Array hintereinander einem String zuweist:

    PHP
    <span class="syntaxdefault">$captcha </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $text</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">$text</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">$text</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">2</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">$text</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">3</span><span class="syntaxkeyword">].</span><span class="syntaxdefault">$text</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">4</span><span class="syntaxkeyword">];</span><span class="syntaxdefault"> </span>


    Diesen Wert musst du dann in die Session-Variable packen und du kannst es mit der Eingabe vergleichen.

    Ich habe das Problem damals übrigens gelöst, indem ich mir den Teil mit der Zufallsgenerieung des Captcha-Wertes vom Icybook abgeguckt habe. :wink:


    Edit: Mir fällt gerade ein, das geht einfacher mit einer foreach-Schleife:

    PHP
    <span class="syntaxdefault"><br />foreach </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$text as $value</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">    $captcha </span><span class="syntaxkeyword">.=</span><span class="syntaxdefault"> $value</span><span class="syntaxkeyword">;<br />}</span><span class="syntaxdefault"> </span>

    Nein, auch MySQL-Befehle muss man mit einem Semikolon beenden. Zumindest wenn in der Query noch ein weiterer Befehl folgt.
    Da hier aber nur ein Befehl ist, ist das Semikolon nicht unbedingt notwendig.