Zufall generieren

fixxxxxi

Erfahrenes Mitglied
Ich habe folgende "Vision" welche ich gern mittels PHP umsetzen möchte.

In einer Datenbank bestehen 5 Benutzer. Diese 5 Benutzer sollen durch einen Klick auf einen Button - nennen wir ihn "Generieren", eine Zahl (0 oder 1) in die Datenbank geschreiben bekommen. Jedoch soll die 0 insgesammt nur 1 mal vorkommen und die 1, 4 mal.

Wie kann ich dies umsetzen, das ein Wert nur einmal generiert wird?
 
Zuletzt bearbeitet:
Vor jedem mal prüfen ob die 0 schon gesetzt ist.

PHP:
<?php

for($i=0; $i<5; $i++){
    if($flag){
        $zahl = 1;        
    }elseif($i==4 && !$flag){
        $zahl = 0;
    }else{
        $zahl = mt_rand(0, 1);
        $flag = ($zahl == 0);
    }
    echo $zahl;
}

?>
 
Danke für den Tip ;)

Ich hab es nun ganz anders gelöst. Ich habe ein kleines Würfelspiel gecodet was auch funktioniert. Jedoch habe ich ein Problem... Wenn ich auf den Würfel klicke, wird auf den Link

$zahl1='<a href="index.php?wars-more-'.$_GET['mehr'].'-zahl1-'.$uid.'"><img widht="17" src="/include/images/icons/offen.png" border="0" alt="0" title="Noch alles offen..."></a>';

weitergeleitet. Jedoch wird hier die Zahl noch nicht angezeigt, sondern es sieht so aus als wenn noch nicht gewürfelt wurde. Von der Sache her logisch, denn es wird erst der Wert gesetzt, nachdem in der URL der Wert "zahl1" steht. Aber so muss man leider nochmals aktualisieren. Ich habe evtl. an einen Auto Reload gedacht oder mittels JAVA onClick o.ä., jedoch ist das nicht das wahre... Wie kann ich den Wert vorher korrekt setzen?

Wie kann ich das sonst lösen?

PHP:
      # würfeln falls mehr als mindestmember
      
			$uid = $_SESSION['authid'];
      if ($menu->get(3) == 'zahl1') { $uid = $menu->get(4); }
      $ck = db_count_query("SELECT COUNT(wid) FROM prefix_warmember WHERE wid = ".$_GET['mehr']." AND uid = ".$uid);
      
	
			#zahl 1
      if (($row1['zahl1']=='') && (has_right(array($row['tid'])) === true AND $row1['uid'] == $_SESSION['authid'])) 
      $zahl1='<a href="index.php?wars-more-'.$_GET['mehr'].'-zahl1-'.$uid.'"><img widht="17" src="/include/images/icons/offen.png" border="0" alt="0" title="Noch alles offen..."></a>';
      else 
      $zahl1='<img widht="17" src="/include/images/icons/offen.png" alt="0" title="Zum Würfeln klicken...">';				
			
      if ($row1['zahl1']>'0') $zahl1='<img widht="17" src="/include/images/icons/'.$row1['zahl1'].'.png" alt="'.$row1['zahl1'].'" title="'.$row1['zahl1'].'">';
      if ($row1['zahl1']=='') $check='1'; 
		  if (isset ($check)) {
      if (($row1['zahl1']=='') && ( $menu->get(3) == 'zahl1' AND (has_right(array($row['tid'])) === true AND $row1['uid'] == $_SESSION['authid']))) {


      $zufall1 = rand(1,6); 
			db_query("UPDATE prefix_warmember SET zahl1='".$zufall1."' WHERE wid = ".$_GET['mehr']." AND uid = ".$uid ); 
       } 
      }			
  
      #zahl 2 [...]
      
      #zahl 3 [...]


      $ergebnis=$row1['zahl1']+$row1['zahl2']+$row1['zahl3'];
			
			if (($ergebnis>'3') && ($row1['zahl3']>'0')) $ergebnis_pic='<img widht="17" src="/include/images/icons/_'.$ergebnis.'.png" alt="'.$ergebnis.'" title="'.$ergebnis.'">'; 
			else $ergebnis_pic='<img widht="17" src="/include/images/icons/offen_2.png" alt="offen" title="Noch ist alles offen!">'; 
       
      $istgleich='<img widht="17" src="/include/images/icons/istgleich.png" alt="=" title="=">';       			
			//mindestmember
			if (($available<$needed) && ($row1['zahl1']=!'0'))
			$wuerfelspiel='<td width="128">'.$zahl1.''.$zahl2.''.$zahl3.''.$istgleich.''.$ergebnis_pic.'</td>';
			else
			$wuerfelspiel="";
			
    	$aout5 = array (
			'wuerfelspiel' => $wuerfelspiel);
			$tpl->set_ar_out($aout5,66);	
      
  
      #würfeln ende
 

Anhänge

  • Unbenannt-4.jpg
    Unbenannt-4.jpg
    126 KB · Aufrufe: 22
Zuletzt bearbeitet:
Das ist ein Fehler, der auftritt wenn du eine Ausgabe tätigst bevor du den Header sendest, wobei hier selbst ein Leerzeichen gilt!

schau dir z.B. einmal ob_start() an. Ausgabepufferung.
auch header() sollte man sich durchlesen, bevor man eine Funktion benutzt, wobei man keine Ahnung hat wie sie funktioniert, was sie macht und das nur weil jemand gesagt hat, dass man es tun soll ;)
 
ok... das mit den leerzeichen hab ich soweit verstanden... nur macht die php mehr wie einfach nur dieses würfelspiel. wenn ich also am anfang als erstes

header('Location: http://www.example.com/');

schreibe, wir der rest der php nicht mehr verarbeitet. ich darf den header aber auch nicht nach der vearbeitung aufrufen, da es sonst nicht funktioniert. soweit richtig?
 
Ahhh... THX

PHP:
<?php
     ob_start();
#code
      header('Location: http://www.example.com/');
#code
?>

Nur was ich nicht verstehe. Wann muss ich ob_end_flush(); einsetzen?
 
Zuletzt bearbeitet:
Zurück