PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Nochmals Rätsel (http://www.selfphp.de/forum/showthread.php?t=19010)

jdgf 31.03.2008 12:00:12

Nochmals Rätsel
 
Hallo,
in meinem Script soll per Zufall ein Rätsel ausgewählt werden. (Die Spalten in der Datenbank haben die Bezeichnung: id, frage, datum). Das Auswahlrätsel erhält in der datum-Spalte den Eintrag des Tagesdatums z.B für heute "0331". Soweit funktioniert das Script.
Das das Script täglich mehrfach aufgerufen wird, soll pro Tag nur ein Rätsel ausgewählt werden. Meine If-Abfrage funktioniert aber nicht. Was mache ich hier falsch?
PHP-Code:

<?php
//Tagesdatum festlegen
$timestamp time();
$datum2 date("md"$timestamp);
echo 
"<br>Datum2: " .$datum2;
?>

<?php
// Anzahl der Datensätze ermitteln = $menge
$abfrage "SELECT id FROM raetsel";
$ergebnis mysql_query($abfrage);
$menge mysql_num_rows($ergebnis);
echo 
"AnzahlDatensätze: " "$menge" "<br>";
?>

<?php
$test2
="SELECT datum From raetsel WHERE datum=$datum2";
$erg=mysql_query($test2);
while (
$esatz mysql_fetch_assoc($erg))
{
echo 
$esatz["datum"];
$var2 $esatz["datum"];
}
echo 
"<br>DatumAuswahl: ".$var2;
?>

<?php
//Mit if-Abfrage überprüfen, ob für den Tag bereits ein Rätsel markiert wurde:
if $var2 == $datum2 {
$test1="SELECT id, frage, datum FROM raetsel WHERE datum=$var2";
$res=mysql_query($test1);
$num mysql_num_rows($res);
echo 
"$num Datensätze gefunden<br>";
    while (
$dsatz mysql_fetch_assoc($res))
    {
    echo 
$dsatz["frage"] . "<br>Datum: "$dsatz["datum"];
    
$var $dsatz["id"];
    }
echo 
"<br>ID: " .$var; */
}
*else {
//falls keine Markierung, dann zufälliges Rätsel auswählen
$test1="SELECT id, frage, datum FROM raetsel WHERE datum=0 ORDER BY RAND() LIMIT 1";
$res=mysql_query($test1);
$num mysql_num_rows($res);
echo 
"$num Datensätze gefunden<br>";
while (
$dsatz mysql_fetch_assoc($res))
{
echo 
$dsatz["frage"] . "<br>Datum: "$dsatz["datum"];
$var $dsatz["id"];
}
echo 
"<br>ID: " .$var;
}
?>


<?php
//Tagesrätsel mit Datum markieren
$sql "UPDATE raetsel SET datum=$datum2 WHERE ID=$var";
mysql_query($sql);
?>

Danke für die Hilfe!
Gruß, Dietmar

ascer 31.03.2008 12:28:36

AW: Nochmals Rätsel
 
warum machst du denn bei jedem "kleinem" Codeschnipsel immer ein "<?php" an den Anfang und ein "?>" ans Ende? kannst doch alles in einem <?php ?> abspeisen...

aber mal zu deinem Problem, bei deiner IF-Abfrage fehlen irgendwie die Klammern?!
PHP-Code:

//Mit if-Abfrage überprüfen, ob für den Tag bereits ein Rätsel markiert wurde: 
if $var2 == $datum2 

das müssen doch klammern hin:
PHP-Code:

if( $var2 == $datum2 ){ 
   ...
code... 



ich versteh ehrlich gesagt auch gar nicht, warum du da soviele Abfragen reinbaust, wenn du in deiner Datenbank für jeden Tag immer ein Rätsel parat hast würde doch folgendes locker ausreichen:
PHP-Code:

$datum date"md"time() );
$query "SELECT `id`,`frage`,`datum` FROM `tabelle` WHERE `datum`='".$datum."' LIMIT 0,1" 

damit hast du dann ein Query, der beginnend ab dem ersten Eintrag deiner Tabelle nach genau 1 Datensatz sucht und den ersten Datensatz komplett lädt in dem `datum`='$datum' ist...

Wenn ich nicht irgendwas falsch verstanden hab sollte das den restlichen Code von dir relativ überflüssig machen^^


gruß,
Ascer

jdgf 31.03.2008 13:05:13

AW: Nochmals Rätsel
 
Hallo Ascer,
danke für deine Hilfe.
Zitat:

Wenn ich nicht irgendwas falsch verstanden hab sollte das den restlichen Code von dir relativ überflüssig machen^^
Mit deinem Vorschlag hast du eigentlich recht. Da ich aber zur Zeit nur etwa 80 Fragen habe, klappt es noch nicht für jeden Tag.
Gruß, Dietmar

ascer 31.03.2008 21:03:00

AW: Nochmals Rätsel
 
nur etwa 80 Fragen?? sind doch paar viele eigentlich^^

und wieso nicht für jeden Tag??
die Aussage versteh ich irgendwie nicht ganz^^

jdgf 02.04.2008 08:51:08

AW: Nochmals Rätsel
 
Hallo,
Zitat:

und wieso nicht für jeden Tag??
die Aussage versteh ich irgendwie nicht ganz^^
Wenn ich zB. 365 hätte, könnte ich jedem Kalendertag einen Eintrag zuordnen und über das Datum aufrufen. Bei meinen [sogar :-)] 148 Fragen lasse ich per Zufall eine Frage auswählen und trage in das Datumsfeld den Aufruftag ein. Sind 147 Datumfelder belegt, löscht das Script alle Einträge in der Spalte Datum und beginnt wieder von neuem.
Gruß, Dietmar

ascer 05.04.2008 03:05:14

AW: Nochmals Rätsel
 
ok, jetzt versteh ich deine aussage^^


gibt's jetzt eigentlich noch konkrete Probleme mit irgendwas??

und mal der Neugier halber: wie wählst du die Einträge denn per Zufall aus?


gruß,
Ascer

jdgf 08.04.2008 14:56:15

AW: Nochmals Rätsel
 
Hallo Ascer,

ein Problem gibts es nicht mehr, du kannst die Rätselseite hier ansehen.

Zitat:

und mal der Neugier halber: wie wählst du die Einträge denn per Zufall aus?
durch den Befehl "ORDER BY RAND()"-->
PHP-Code:

    $test1="SELECT id, titel, frage, datum FROM raten WHERE datum=0 ORDER BY RAND() LIMIT 1"

Gruß, Dietmar

ascer 08.04.2008 22:31:47

AW: Nochmals Rätsel
 
ok, ist nicht schlecht, aber bei order by rand limit 1 müsste doch eigentlich immer eine spezielle spalte per ASC oder DESC rauskommen, oder? also wäre es quasi nicht komplett zufällig, glaub ich jetzt zumindest mal, bin da grad auch etwas "überfragt"^^

ich weiß nicht, ich glaube ich hätte nur die ID in ein Array geladen von allen Datensätzen die noch datum=0 haben und dann per random in php über den index des arrays irgendeine datenbank id gezogen und die dann quasi geladen...und das ganze dann als CronJob laufen lassen, halt einmal täglich damit jeden tag ne neue frage kommt...

oder ein skript schreiben, was man halt einmal jährlich ( oder wie oft auch immer ) startet, das dann jeder frage per zufall nen datum mitteilt ( also in die db schreibt )...so das man das skript einmal laufen lässt und dann für's komplette jahr schon per zufall für jeden tag ne frage gezogen hat...

gruß,
Ascer

jdgf 09.04.2008 08:40:45

AW: Nochmals Rätsel
 
Hallo Ascer,
ich wollte erreichen, dass die Fragen immer etwas durchgemischt werden, damit sich die Reihenfolge nicht wiederholt.
Zitat:

ORDER BY RAND() in Kombination mit LIMIT ist nützlich zur Auswahl eines Zufallswerts aus einer Datensatzmenge:
mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d -> ORDER BY RAND() LIMIT 1000;
RAND() ist nicht als perfekter Zufallsgenerator gedacht, sondern stellt eine gute Möglichkeit da, ad hoc Zufallszahlen zu erzeugen, die innerhalb derselben MySQL-Version plattformübergreifend funktioniert.
Nach der Beschreibung reicht hierfür der RAND-Befehl aus. Da ich bei jeder veröffentlichten Frage statt der 0 ein Datum in die Spalte datum eingefügt wird, müßte es laufen. Getestet habe ich es nur mit 4 Fragen. Dort war es ok.
Gruß, Dietmar

ascer 09.04.2008 12:07:52

AW: Nochmals Rätsel
 
joa, wird schon klappen^^

ich mach mir nur, bzw. würde mir gedanken machen wie gut das klappt, muss aber wie gesagt dazu sagen, das ich mich nicht so gut mit MySQL auskenne, hab bis jetzt noch nie wirkliche MySQL Tutorials, Lehrgänge oder Bücher oder so durchgelesen, mein sämtliches MySQL wissen beschränkt sich auf, bzw. beziehe ich auf die MySQL Dokumentation, wo ich suche, wenn ich mal was nicht weiß/nicht finde und das, was einem in PHP Büchern beigebracht wird^^


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:16:20 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.