kostenloser Webspace werbefrei: lima-city


Zufallsgenerator Bild & Text

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo! :wave:

    Ich habe auf einer Seite einen Zufallsgenerator, der bei jedem Klick auf die Seite ein neues tag/bild">Bild samt dazugehörigem Text aus der DB anzeigen soll. Das Problem ist, dass immer wieder dasselbe Paar erscheint und erst einen Tag später wechselt (nichteinmal das Leeren des Browser-Caches oder ein Neustart des PC's schafft Abhilfe). Es ist so, dass man zuvor auf einer anderen Seite klicken muss, um auf die Zufalls-Seite zukommen. Obwohl ich für die Zufalls-Seite das Cachen via meta-Tag verboten habe, erscheint bei einem Klick auf "zurück" und einen erneuten Klick auf den Button "Zufall!" dasselbe Paar wie zuvor. Das Paar wechselt manchmal nur einen direkten Reload der Zufalls-Seite, aber das ist nicht Sinn der Sache.


    Zur Zeit nutze ich folge Abfrage, da nur wenige Einträge aus der DB zu lesen sind:

    ORDER BY RAND(NOW()) LIMIT 1



    Ich habe auch mal Folgendes probiert, jedoch hat sich daduch nichts geändert:

    ORDER BY RAND() LIMIT 1



    Wer kann mir sagen, was da falsch läuft und wie ich einen richtigen PHP-Zufalssgenerator hinbekomme, der mit den Datensätzen aus der DB harmoniert und nicht immer dasselbe anzeigt? Danke schonmal im Voraus!


    Gruß,
    webdesignerin :angel:


    Beitrag zuletzt geändert: 11.2.2013 16:14:48 von webdesignerin
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo webdesignerin,

    ORDER BY RAND(NOW()) LIMIT 1
    Liefert das heutige Datum. Ergo kein Bildwechsel für heut, erst wieder morgen.

    Warum möchtest du die Zufallszahlen im MySql-Bereich generieren und nicht ausserhalb?

    mfg,
    timebandit


    Beitrag zuletzt geändert: 11.2.2013 16:44:23 von timebandit
  4. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo timebandit! :wave:

    Es geht um ein Gimmick, das Zitate, Sprüche und Weisheiten mit einem Bild anzeigt. Warum sollte ich das nicht mit mysql versuchen? JavaScript möchte ich nicht benutzen, denn falls das Jemand ausgeschaltet hat oder das Plugin NoScript! benutzt kann er das Gimmick nicht nutzen. Da die Bilder und der Text zusammen in der DB stehen, dachte ich, wäre es auch die eleganteste Lösung, es zuerst mit einem mysql-Befehl zu versuchen. Hast Du eine andere Idee? Dann her damit! :wink:

    Du sagst dieses NOW() lässt pro Tag nur einen Bildwechsel zu - wieso tritt dann dasselbe Problem auch ohne den NOW() Befehl auf?


    Gruß,
    webdesignerin :angel:
  5. h**s

    hi,

    das mit order by rand() mit verbindung von limit 1 ist bei manchen mysql-versionen echt ein problem... und wenns viele datensätze werden ein noch größeres... :slant:

    man kann sich so behelfen:
    SELECT * FROM `table` WHERE `id` >= (SELECT FLOOR(MAX(`id`) * RAND()) FROM `table`)
    allerdings nur wenn man fortlaufende ids hat, also ohne "löcher"...

    ansonsten würd ich dir raten erstmal in einem query alle ids abzuholen und dann php eine davon zufällig auswählen zu lassen mit der du dann die daten holst...
  6. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo hcms! :wave:

    hcms schrieb:
    das mit order by rand() mit verbindung von limit 1 ist bei manchen mysql-versionen echt ein problem... und wenns viele datensätze werden ein noch größeres... :slant:


    Und ich dachte schon, ich wäre die Einzige mit dem Problem. :wink:

    hcms schrieb:
    man kann sich so behelfen:
    SELECT * FROM `table` WHERE `id` >= (SELECT FLOOR(MAX(`id`) * RAND()) FROM `table`)
    allerdings nur wenn man fortlaufende ids hat, also ohne "löcher"...


    Werde das gleich mal probieren, aber was bitte sind fortlaufende IDs ohne Löcher - meinst Du damit, dass die numerische Reihenfolge nicht durch einen nicht vorhandene ID unterbrochen werden darf? :confused:

    hcms schrieb:
    ansonsten würd ich dir raten erstmal in einem query alle ids abzuholen und dann php eine davon zufällig auswählen zu lassen mit der du dann die daten holst...


    Ich glaube zwar in Etwa zu wissen, wie Du das meinst, jedoch reicht mir glauben nicht aus. Würde es Dir was ausmachen, das an einem Codebeispiel zu zeigen? Danke! :thumb:


    Gruß,
    webdesingerin :angel:
  7. h**s

    meinst Du damit, dass die numerische Reihenfolge nicht durch einen nicht vorhandene ID unterbrochen werden darf?
    exact :thumb:




    <?php
    	$ids = array;
    	$result = mysql_query('SELECT id FROM tabelle');
    	while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    		$ids[] = $aSql;
    	}
    	
    	shuffle($ids);
    	$id = $ids[0];
    	$result = mysql_query('SELECT * FROM tabelle WHERE id="'.$id.'"');
    	$endergebnis = mysql_fetch_array($result, MYSQL_ASSOC);
    	
    	print_r($endergebnis);
    ?>
  8. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo hcms, :wave:

    Danke für den Code, aber ich erhalte bei
    $ids = array
    die Fehlermeldung:

    Parse error: syntax error, unexpected ';', expecting '(' in XYZ on line 123

    Komme also gerade nicht weiter, weil ich nicht weiß, was falsch ist. Wie würde mit Deinem Script eigentlich die Ausgabe der Datensätze aussehen?



    Gruß,
    webdesignerin :angel:
  9. $ids = array();

    mfg,
    timebandit
  10. h**s

    ohja gleich zwei fehlerchen... war kurz vor feierabend :-D

    <?php
        $ids = array();
        $result = mysql_query('SELECT id FROM tabelle');
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $ids[] = $aSql['id'];
        }
         
        shuffle($ids);
        $id = $ids[0];
        $result = mysql_query('SELECT * FROM tabelle WHERE id="'.$id.'"');
        $endergebnis = mysql_fetch_array($result, MYSQL_ASSOC);
         
        print_r($endergebnis);
    ?>
  11. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo ihr Beiden, :wave:

    jaja der Feierabend, schon klar! :biggrin:

    Danke für die korrigierte Version, aber wie muss jetzt die Ausgabe aussehen, damit das Sprichwort und das zum Sprichwort passende Bild gleichzeitig ausgegeben werden? Bisher habe ich die Datensätze mit
    echo $row->Spalte
    ausgegeben. Wie muss ich das jetzt machen?


    Gruß,
    webdesignerin :angel:
  12. h**s

    hmm - wie wärs wenn du das stück (php-)code postest ?

    sonst bleiben da zuviele fragen offen wie:
    wie heissen deine felder in der datenbank ?
    liegen die bilddaten in der datenbank oder im filesystem ?
    etc...
  13. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hall hcms! :wave:

    Wozu? Du kanst doch Platzhalter wie Feld1 usw. nehmen - ein bisschen verstehe ich schon von PHP und mysql. :wink:

    Ich ersetze die dann einfach mit den Namen meiner Felder. Die Bilder selbst liegen natürlich auf dem Webspace, doch der Bildpfad dazu ist in der DB gespeichert.


    Gruß,
    webdesignerin :angel:
  14. h**s

    hmm naja dann so:
    <?php
        $ids = array();
        $result = mysql_query('SELECT id FROM tabelle');
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
            $ids[] = $aSql['id'];
        }
          
        shuffle($ids);
        $id = $ids[0];
        $result = mysql_query('SELECT feldsprichwort, feldbild FROM tabelle WHERE id="'.$id.'"');
        $row = mysql_fetch_array($result, MYSQL_ASSOC);
          
        echo '<p>'.$row['feldsprichwort'].'</p>';
    	echo '<img src="'.$row['feldbild'].'" alt="">';
    ?>
  15. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo hcms, :wave:

    jetzt kommen wir dem Ganzen schon näher, allerdings bleibt die Ausgabe bei mir leer. Woran kann das liegen? :confused:

    Ich meine, die Platzhalter sind alle korrekt ausgetausch worden und einen Fehler im Code gibt es nicht.


    Gruß,
    webdesignerin :angel:
  16. Versuch mal aus:
    $ids[] = $aSql['id'];


    zu machen
    $ids[] = $row['id'];
  17. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo all-in1,

    ja danke, damit klappt die Ausgabe. Obwohl ich jetzt einen anderen Zufallsgenerator habe, hat sich an meinem Probem nichts geändert, denn sobald ich wieder den JavaScript Button anklicke, der mit dem Attribut
    onclick="location='zufallsspruch-ermitteln.html'
    auf die vorherige Seite verlinkt, von der man den Zufallsspruch samt Bild ermitteln lassen kann, dort dann erneut auf einen JavaScript Button mit dem Attribut
    onclick="location='der-zufallsspruch.html'
    namens "Zufall" klicke, erscheint auf der Seite der-zufallsspruch.html derselbe Spruch, den ich vorher hatte. Also genau dasselbe Problem wie voher... :confused:


    Gruß,
    webdesingerin :angel:
  18. h**s

    hmm na sowas...

    nochmal zum verständnis:
    du rufst eine .html seite auf (der-zufallsspruch.html) in der dann aber php-code steht... oder ?
    versuch doch mal den cache dort schon via php-header zu verbeiten:
    <?php
      header("Cache-Control: no-cache, must-revalidate");
      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    ?>
    <!-- Hier dann den Rest der Seite -->
  19. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo, :wave:

    ja genau, in der HTML Seite der-zufallsspruch.html steht der PHP-Code. Danke für den Tipp, den Cache via PHP zu verbieten, denn das scheint des Rätsels Lösung gewesen zu sein. Es geht jetzt endlich alles wie es soll, herzlichen Dank! :thumb:


    Gruß,
    webdesignerin :angel:
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!