Scherzfrage des Tages

  • Habe ein paar Minuten zeit gehabt:
    Die Tabelle:

    Code
    CREATE TABLE `tabelle` (
     `id` int(11) NOT NULL auto_increment,
     `frage` text NOT NULL,
     `antwort` text NOT NULL,
     `datum` date NOT NULL default '0000-00-00',
     PRIMARY KEY  (`id`)
    )

    Da ich nicht wusste, wo ich diese Zeilen eingeben muss, habe ich die Tabelle von Hand angelegt. Hat auch einwandfrei funktioniert. Der nachher angezeigte Code sah so aus wie deiner.

    Einlesen der CSV

    Mit der while-Schleife stimmt was nicht. Sie wird nicht verlassen. Es erscheinen tausende von Zeilen mit dieser Warnung:

    Warning: fgetcsv() expects parameter 1 to be resource, null given in /home/www/tabelle.php on line 13

    Ich habe dann nach einer Minute abgebrochen. Da waren dann 200.000 Einträge in der Tabelle :)

    Zuerst dachte ich, es läge daran, dass in der csv-Datei als Trennzeichen ";" und nicht "," eingestellt ist. Aber die entsprechende Änderung im Code hat nicht geholfen.

    Kann sich bitte nochmal jemand den Code angucken?

  • Schreibe an den Anfang:

    error_reporting(E_ALL);
    ini_set("display_errors", true);

    Wenn es dann immer noch keine Fehlermeldung gibt, poste dein aktuelles Script.

  • Nee, gab immer noch keine Fehlermeldung. Hier ist das Script:

    Die Felder "host", "name", "passwort" und "datenbank" sind natürlich sinnvoll gefüllt. Die csv-Datei heißt "scherzfragen.csv", die Tabelle "scherzfrage". Die Anzahl habe ich auf 992 geändert, da es nur 496 sind :)

  • So auf den ersten Blick erkenne ich da keinen Fehler. Da hilft nur:

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • Ich weiß nicht genau wieso und warum, aber auf jeden Fall sind jetzt die 992 Datensätze in der Tabelle drin :)

    Aber beim Frage-ermitteln-Script gibt es leider auch wieder eine Fehlermeldung:

    Parse error: syntax error, unexpected '[' in /home/www/frage.php on line 34

    Hier ist nochmal der Code:

    Kannst du bitte nochmal drübergucken?Den Feldnamen in der Tabelle habe ich von "frage" auf "question" geändert.

    Edit: So, ich habe den Fehler gefunden. Bei "row" hat an manchen Stellen das "$" davor gefehlt. Ich versuche, das jetzt mit der Antwort hinzukriegen.

    Vielen Dank, Bandit. Du hast mir sehr geholfen :)

    Nochmal Edit: So, ich bin noch einen Schritt weiter. Die passende Antwort habe ich jetzt auch. Jetzt hätte ich gerne noch ein bisschen Javascript eingebunden:

    Code
    echo '<script type="text/javascript"><img style="width: 78px; height: 33px;" onclick="alert('$antwort')" alt="Lösung" src="buttons/raetsel-loesung.png" /></script>';

    Die Antwort soll durch ein Klick auf einen Button per Alert angezeigt werden. Wenn ich das einbinde, gibt es aber folgende Fehlermeldung:

    Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /home/www/frage.php on line 97

    Wahrscheinlich habe ich die Einbindung völlig falsch gemacht. Kann sich das bitte nochmal jemand angucken?

  • Die Kombination von " und ' ist nicht richtig, nochmal genau hinsehen. Außerdem ist der Script-Teil falsch.

  • csv_to_database.php

    get_question.php

    So müsste bandits code funktionieren ;)

  • So, ich habe es geschafft, das Script fertigzustellen. Mit Antwort und Javascript. Ich kopiere es hier nochmal rein. Für zukünftige Generationen ;)

    Edit: Aaargggh, es gibt doch noch ein Problem :( Wenn ich das Skript einfach so als Datei aufrufe, funktioniert es einwandfrei. Wenn ich es aber mit

    PHP
    <? include ("http://www.raetselstunde.de/frage.php"); ?>

    in einer html-Datei aufrufe, gibt es folgende Fehlermeldungen:

    Warning: include() [function.include]: URL file-access is disabled in the server configuration in /home/www/test.html on line 36

    Warning: include(http://test.raetselstunde.de/scherzfrage-des-tages.php) [function.include]: failed to open stream: no suitable wrapper could be found in /home/www/test.html on line 36

    Warning: include() [function.include]: Failed opening 'http://www.raetselstunde.de/frage.php' for inclusion (include_path='.:/usr/share/php') in /home/www/test.html on line 36

    Woran liegt denn das jetzt schon wieder? Fehlen mir da irgendwelche Rechte?

  • lies dir die fehlermeldung durch die sagt doch alles!
    nimm nicht den absoluten pfad sondern einen relativen

    Orthografie und Grammatik in diesem Beitrag sind frei erfunden und eine eventuell gefundene Übereinstimmung mit einer lebenden oder toten Sprache sollte von allen Beteiligten unverzüglich ignoriert werden.

    K-Progs (In bearbeitung)
    Der inoffizielle Forum-hilfe IRC-Channel
    (Server: irc.freenode.net ; Channel: #forum-hilfe) (Client für FF)
    Ich hab auch 'n Jabber-Account beim CCC ;)

  • lies dir die fehlermeldung durch die sagt doch alles!
    nimm nicht den absoluten pfad sondern einen relativen

    Ja, daran lag's. Danke für den Tipp.

    Allerdings ergibt sich dadurch dann ein neues Problem. Ich würde nämlich gerne anderen Webmastern die Möglichkeit bieten, dieses PHP-Script bei sich einzubinden (ähnlich wie bei "Das Zitat des Tages"). Das funktioniert allerdings nur, wenn ich es absolut einbinden kann. Oder würde ich sowas besser mit Javascript machen?


    Ich mach es eben schnell udn schmerzlos:
    Deine datei darf nicht .html heißen sonder "muss" .php heißen ;)

    Nee, damit hatte es nichts zu tun. Ich habe "AddHandler application/x-httpd-php .html" in meiner .htaccess drin, also funktioniert es auch mit .html.

  • ja sie könnens schon einbinden aber auf deinem server ist es nunmal nicht erlaubt urls einzubinden

    Orthografie und Grammatik in diesem Beitrag sind frei erfunden und eine eventuell gefundene Übereinstimmung mit einer lebenden oder toten Sprache sollte von allen Beteiligten unverzüglich ignoriert werden.

    K-Progs (In bearbeitung)
    Der inoffizielle Forum-hilfe IRC-Channel
    (Server: irc.freenode.net ; Channel: #forum-hilfe) (Client für FF)
    Ich hab auch 'n Jabber-Account beim CCC ;)

  • Wenn ich das richtig verstehe, müssten die Webmaster dann selbst eine Tabelle in einer MySQL-Datenbank anlegen, die Fragen hochladen und dann das Skript einbinden.

    Mir wäre es aber lieber, wenn der Zugriff über meine Datenbank erfolgen würde und die Webmaster nur einen kleinen Code einbinden müssten. Das geht wohl nur mit Javascript, oder?

  • natürlich du machstes einfach so wie jetzt nur benutzt du anstatt das absoluten pfad also http://www....... benutzt du einen realtiven wie z.b. ../irgendwas/dingens dann kannst dus includieren und die webmaster könnten dann die datei die DU inkludierst via frame einbinden, oder wenn es auf ihren server erlaubt ist, includieren

    Orthografie und Grammatik in diesem Beitrag sind frei erfunden und eine eventuell gefundene Übereinstimmung mit einer lebenden oder toten Sprache sollte von allen Beteiligten unverzüglich ignoriert werden.

    K-Progs (In bearbeitung)
    Der inoffizielle Forum-hilfe IRC-Channel
    (Server: irc.freenode.net ; Channel: #forum-hilfe) (Client für FF)
    Ich hab auch 'n Jabber-Account beim CCC ;)

  • Ich hab's hingekriegt :D

    Die Datei test.html sieht wie folgt aus:

    Code
    <? include ("frage.php"); ?><br />

    Und die Datei test2.html so:

    Code
    <iframe name="test" src="http://www.raetselstunde.de/test.html" frameborder="0" height="1000" width="100%" scrolling="auto" align="center"></iframe>

    Vielen Dank nochmal für deine Hilfe :D

  • Ich hätte noch eine Frage dazu. Ist das nicht ein Sicherheitsrisiko wenn ich in dem Skript meine ganze Daten wie Benutzername und Passwort eintrage? Oder hat man darauf von aussen keinen Zugriff?

  • Solange der Server funktioniert, sprich, PHP-Files geparst werden, kann da nichts passieren. Ich habe bei mir immer ein Verzeichnis, auf dass man von außen nicht drauf zugreifen kann, sondern nur per Script. In diesem Verzeichnis befindet sich dann eine Konfigurationsdatei mit allen wichtigen Daten.

  • Kannst du mal bitte erläutern, wie das geht? Ich suche schon lange nach einer Möglichkeit, bin aber mit .htaccess nicht so begabt. Als ich das mal probiert habe, konnte ich mit gar nichts drauf zugreifen, nicht einmal per Script. Es wäre toll, wenn du mal deine Lösung zeigen könntest :)