# Lottosystem mit PHP



## Trixa (12. März 2005)

Hi,
Ich bin noch ein blutiger Anfänger in PHP. Ich habe mich vor kurzem dazu entschlossen, mal php zu lernen, um in einem Jahr oder so mal ein Onlinegame zu erstellen. Dazu habe ich mir ein Buch gekauft, indem php und mysql halt erklärt wird. 
Da es aber ziemlich trocken ist, die ganze Zeit zu lesen, wollte ich zwischendurch auch mal eine Kleinigkeit programmieren. Aber wie erwartet klappt das nicht . Ich wollte ein Lottosystem erstellen. Dazu habe ich ein Formular erstellt, welches die Variable $usr_zahl1 bei der Eingabe erstellt, erstellt. Also erstmal muss nur eine Zahl angegeben werden. Und dann habe ich mit einer if-Funktion geschrieben, dass wenn die Variable $usr_zahl1 gesetzt ist, dass alle Lottozahlen dann hingeschrieben werden sollen, aber das klappt irgendwie nicht. Wie gesagt, das ist noch nicht fertig, aber wenn es jetzt schon Probleme gibt, dann ist es natürlich schlecht, weiter zu machen. Ich poste hier einfach mal den Quelltext.



> <html>
> <head>
> </head>
> <body>
> ...


Dann schonmal im voraus Danke 
mfG Trixa


----------



## SilentWarrior (12. März 2005)

Aus Sicherheitsgründen solltest bzw. kannst du von einem Formular übergebene Variable nicht mehr direkt aufrufen. Dieser Code:
	
	
	



```
if(isset($usr_zahl1))
```
sollte also so aussehen:
	
	
	



```
if(isset($_POST['usr_zahl1']))
```
Je nachdem, ob du ein post- oder ein get-Formular verwendest, musst du auf ein anderes Array zugreifen ($_POST bzw. $_GET).


----------



## Trixa (12. März 2005)

ah ok, das wusste ich nicht...danke 

<edit>
sorry, aber irgendwie funktioniert es trotzdem nicht. Wenn ich einen Wert in das Feld eintrage, dann passiert einfach gar nicht 
</edit>


----------



## BSA (12. März 2005)

Sorry, nimms mir nicht übel, ich habe jetzt den ganzen Thread nicht gelesen, aber die ersten Zeilen haben mich schon sehr verwundert. Und zwar wundert es mich das du gerade anfängst mit PHP,  und nen Lottosystem programmierst...

Mhh, das ist wie wenn du gerade anfängst laufen zu lernen und nen Marathon laufen willst....


----------



## Trixa (12. März 2005)

naja, was hätte ich denn davon, wenn das nicht mein Script wäre? Außerdem, wenn du dir den thread noch nicht ganz durch gelesen hast, dann kannst du das nicht beurteilen, weil du dir dann auch nicht den Quelltext und meinen Text durch gelesen hast. In meinem Text steht, dass das system noch nicht fertig ist u.s.w. . Und wenn man den Befehl rand(x,y) kennt und sich in einem PHP Buch auf Seite 180 befindet, sollte man schon so ein Script auf die Beine stellen können, außerdem habe ich mir auch alle tutorials von Schattenbaum.de durchgelesen. 
Und mit dem Posting hilfst du mir leider auch nicht. 
mfG Trixa

<edit>
ist nich böse gemeint, aber das ist halt meine Meinung 
</edit>


----------



## BSA (12. März 2005)

was willst du mit rand(1,49) erreichen?


----------



## Trixa (12. März 2005)

ähm, dass eine zufällige Zahl zwischen 1 und 49 gesetzt wird?


----------



## BSA (12. März 2005)

Wieso soll denn dann bitte der Benutzer ne Zahl eingeben?


----------



## Trixa (12. März 2005)

Weil das beim Lotto so ist! 
Man füllt einen Lottoschein aus (Zahl eingeben) und vergleicht das dann mit den ZUFÄLLIGEN 6 Zahlen. Wenn die übereinstimmen, dann gewinnt man etwas.


----------



## Dennis Wronka (12. März 2005)

Du solltest auch noch sicherstellen, dass die Zufallszahlen keine Duplikate ergeben.


----------



## BSA (12. März 2005)

Ahja, jetzt versteh ich das.....


----------



## Trixa (12. März 2005)

reptiler hat gesagt.:
			
		

> Du solltest auch noch sicherstellen, dass die Zufallszahlen keine Duplikate ergeben.


 
Jo. Habe ich auch schon überlegt. Aber wie gesagt, das System ist ja heute erst entstanden und ich wäre ja auch schon viel weiter, wenn dieses Problem nicht wäre.
Und, damit es keine Duplikate gibt, kann man doch ne einfache If Funktion machen oder?
if($Zahl[1], $Zahl[2]..........$Zahl[5] == $Zahl[1].........$ahl[5]
{
dann einen replace Befehl
}

<edit>


			
				BSA hat gesagt.:
			
		

> Ahja, jetzt versteh ich das....


Ja, habe ich vielleicht ein bisschen blöd erklärt, aber nun hast du das ja verstanden


----------



## Dennis Wronka (12. März 2005)

Du musst halt jede Zahl mit jeder anderen vergleichen und dann gegebenenfalls neu belegen.


----------



## Gumbo (12. März 2005)

Punkt 1: Das Formularelement besitzt keinen Namen.
Punkt 2: Das HTML-Element font gilt als veraltet und wurde deshalb vom W3C abgeleht. HTML ist eine Auszeichnungssprache und _keine_ Darstellungs- oder Formatierungssprache, wie etwa CSS.

Ich hab dann noch die Ermittlung der Pseudo-Zufallszahlen dahin verändert, dass keine doppelten Werte auftreten:
	
	
	



```
<?php

	$zahlen = array();
	$i = 0;
	mt_srand();
	while( $i<7 ) {
		$temp = (mt_rand() % 49) + 1;
		if( !in_array($temp, $zahlen) ) {
			$zahlen[] = $temp;
			$i++;
		}
	}
	print_r($zahlen);

?>
```


----------



## Sway (12. März 2005)

Vielleicht solltest du erstmal ein paar Grundlagen lernen. Und ich rede nicht von PHP, sondern vom Programmieren. Erst überlegen, dann logisch überprüfen und erst am Ende, wenn das Programm auf dem Papier existiert, erst dann den Coden.

Zum Programmieren gehört ne Menge mehr als nur einfach irgendwas in die Tastatur einzuhämmern. Aber sowas steht nie in den Anfänger Büchern.

Schau dir in dem zusammenhang einfach mal an, wie "Programm Ablauf Plan(PAP)" oder auch "Strukrogramme" funktionieren. Wenn du vorher, z.B. ein PAP gemacht hast, ist es nur noch "abtippen". Und das beste ist, man kann diese Papier Unterlagen später in fast allen Programmiersprachen umsetzten. Mein Dozent sagte immer: Programmieren ist zu 60% Planung, 30% Fehlersuche und nur zu 10% Coden. Wenn man so arbeitet, stimmt das sogar.


----------



## SilentWarrior (12. März 2005)

Leute, fallt doch nicht gleich mit der Tür ins Haus. Besonders die Hinweise von Gumbo auf das veraltetet <font>-Tag sind zwar korrekt, hier im PHP-Forum völlig fehl am Platze.

Und wenn ihr (bzw. du, BSA) den Thread genau durchgelesen hätte(s)t, dann wäre auch aufgefallen, dass dieses sogenannte Lotto-System lediglich aus einem simplen Formular besteht. Und das ist imo nicht zuviel für den Anfang.

MfG

SilentWarrior (plädiert für anfängerfreundliche Antworten)


----------



## Dennis Wronka (12. März 2005)

SilentWarrior hat gesagt.:
			
		

> SilentWarrior (plädiert für anfängerfreundliche Antworten)



Ich plaediere fuer vollstaendige Antworten. Die sollten natuerlich moeglichst einsteigerfreundlich gehalten sein. Wenn man vollstaendige Informationen liefert, und das in einem nicht zu verwirrenden Durcheinander, sondern schoen strukturiert ist das schon recht einsteigerfreundlich, finde ich.


----------



## Sway (12. März 2005)

SilentWarrior hat gesagt.:
			
		

> SilentWarrior (plädiert für anfängerfreundliche Antworten)



Ganz deiner Meinung, trotzdem glaub ich, das jemand der Programmieren will, auch die (Programmierspachen unabhängigen) Grundlagen kennen sollte.


----------



## Trixa (13. März 2005)

Sway hat gesagt.:
			
		

> Vielleicht solltest du erstmal ein paar Grundlagen lernen. Und ich rede nicht von PHP, sondern vom Programmieren. Erst überlegen, dann logisch überprüfen und erst am Ende, wenn das Programm auf dem Papier existiert, erst dann den Coden.
> 
> Zum Programmieren gehört ne Menge mehr als nur einfach irgendwas in die Tastatur einzuhämmern. Aber sowas steht nie in den Anfänger Büchern.


 
Ich bin mir den logischen Operationen einer Programmiersprache - wie ich denke - sehr wohl bewusst, zumal dies auch nicht meine erste Programmiersprache ist. Und den Fehler, den ich gemacht habe (mit $_POST) der hatte meiner Meinung nach wenig damit zutun, dass ich den allgemeinen Aufbau eines Scripts nicht kenne, sondern viele eher damit, dass ich dachte, dass man Variablen von Html-Codes Direkt in PHP Codes übernehmen kann, aber was soll's, ihr habt mir geholfen, ich bin froh  ihr solltet froh sein, eine gute Tat vollbracht zu haben () und ich will auch nicht, dass das hier in irgendeiner Art im Streit endet, also schlage ich vor, dass der Thread geschlossen wird.
Nochmals Danke für die Hilfe..
mfG Trixa


----------



## Sven Mintel (13. März 2005)

```
<input name="<? $usr_zahl1 ?>" type="text" size="30" maxlength="50">
```

Wenn in deiner PHP-Konfiguration register_globals an ist, kannst du auch direkt auf die Variable zugreifen.Ich sehe aber nicht, wo du diese Variable deklarierst, es sollte da doch reichen:


```
<input name="usr_zahl1" type="text" size="30" maxlength="50">
```
.... nur dann wird eine Variable dieses Namens auch übermittelt.


----------



## Trixa (16. März 2005)

jo, nochmal vielen Dank für die Hilfe...
Ich habe mir in meinem Buch noch einmal das Kapitel für Formulare / $HTTP_POST/GET_VARS durchgelesen und nun hab ich es auch besser drauf... 
mfG Trixa


----------



## din_wiesel (7. Juli 2005)

Hallo Luete

Ich habe hier im Forum und Tutorials folgendes Php-Skript gefunden.


```
<?
// die folgende Zeile erzeugt einen internen Startwert für den Zufallsgenerator
srand ((double)microtime()*1000000);

// die Schleife wird sooft durchlaufen wie $i kleiner 7 ist,
// da wir ja 6 Zahlen brauchen
for($i=1; $i<7; $i++){
   $val = rand(1,49);
   // $val ist eine zufällige Zahl zwischen 1 und 49

   (!strpos(" ".$vals, "$val")) ? $vals .= $val." " : $i--;
// Ist $val noch nicht in $vals enthalten hänge es zzgl. Leerzeichen an
// wenn doch verringere $i um 1 damit am Ende 6 Zahlen rauskommen
}

$arrayLotto = explode(" ", trim($vals));
// zum Sortieren verwandeln wir die Zahlen am Besten in ein Array
// trim() entfernt das hintere Leerzeichen

sort($arrayLotto);
// jetzt wird sortiert

$Lottozahlen = implode(", ", $arrayLotto);
// und das Array wieder in einen String zurück verwandelt
// wobei die Zahlen mit Komma und Leerzeichen getrennt werden

echo $Lottozahlen;
?>
```

Das funktioniert auch ganz prächtig.

Ich wollte jetzt jetzt fragen ob ich in dem Skript etwas einbauen kann das diese nur am Donnerstag un Montag neu aktualiesiert wird

danke für die hilfe


----------



## German (8. Juli 2005)

din_wiesel hat gesagt.:
			
		

> Ich wollte jetzt jetzt fragen ob ich in dem Skript etwas einbauen kann das diese nur am Donnerstag un Montag neu aktualiesiert wird


Um die generierten Zahlen zu behalten musst Du Sie abspeichern, in einer Datei oder DB.

Am Donnerstag und am Montag müssen diese durch neue Zahlen ersetzt werden.

Wenn Du einen eigenen Server betreibst kann das ein Crown-Job erledigen, wenn nicht dann geht das Gebastel los:

- Die Zahlen werden generiert, zusammen mit
- dem Timestamp vom kommenden Do bzw. Mo 0:00 Uhr
- Beides wird abgespeichert
- User kommt auf Seite, Zahlen und Timestamp werden ausgelesen
- ist der gespeicherte Timestamp größer als der aktuelle werden die Zahlen ausgegeben anderenfalls werden neue Zahlen generiert.


----------



## Dennis Wronka (9. Juli 2005)

Damit Deine Suche etwas einfacher ausfaellt:
Es heisst nicht "Crown-Job" sondern "Cron-Job".

Ausserdem wirst Du dafuer wohl keinen Cron-Job brauche, Du kannst das alles auch beim Aufruf der Website machen.


----------

