Zufallszahl und Vergleichen

Oh stimmt, super!

Bekomme bloß nen Error:

Parse error: syntax error, unexpected ';' in /web/include/functions.php on line 209

Das ist die Zeile:
PHP:
$coordinates = rand(1, $row[sectors].':'.rand(1, $row[citysectors]);

PHP:
$row=mysql_fetch_assoc(mysql_query("SELECT * FROM config", $db));
$i = 0;
do
{
$coordinates = rand(1, $row[sectors].':'.rand(1, $row[citysectors]);
$found = mysql_num_rows(mysql_query("SELECT coordinates FROM citys WHERE coordinates = '$coordinates'", $db));
$i++;
}
while ($found && $i < $sectors*$citysectors);
 
Das ist richtig, aber dass er dabei alle Möglichkeiten durchläuft, ist statistisch sehr unwahrscheinlich; wahrscheinlicher ist, dass manche Möglichkeiten mehrfach generiert werden.
Da hast du recht. Deswegen sollte besser vorher geprüft werden, ob überhaupt noch Kombinationen möglich sind. Bei vielen möglichen Kombinationen wäre es vielleicht sogar besser, die letzten verbleibenden zu ermitteln und daraus dann eine zufällig wählen.
 
So würde ichs vorschlagen:

PHP:
$freeCoordinates = array();
$existingCoordinates = array();

// select existing coordinates
$rs = mysql_query("SELECT `coordinates` FROM `citys`");
while (list($coordinate) = mysql_fetch_row($rs)) {
  $existingCoordinates[$coordinate] = true;
}

// generate list with available coordinates
for ($i=1;$i<=$sections;$i++) {
  for ($j=1;$j<=$citysectors;$j++) {
    if (!isset($existingCoordinates[$i.':'.$j])) {
      $freeCoordinates[$i.':'.$j] = true;
    }
  }
}

// get random coordinate
$coordinate = array_rand($freeCoordinates);
 
Aber den ersten Code kann ich doch wenigstens noch in einer Sache verbauen;

Ich generiere eine ID und wenn diese bereits in der DB ist wird erneut generiert! Ist da mein folgendes Vorgehen richtig?

PHP:
do
{
$pool = "qwertzupasdfghkyxcvbnm";
$pool .= "23456789";
$pool .= "WERTZUPLKJHGFDSAYXCVBNM";
srand ((double)microtime()*1000000);
for($index = 0; $index < 20; $index++)
{
$sessionID .= substr($pool,(rand()%(strlen ($pool))), 1);
}
$found = mysql_num_rows(mysql_query("SELECT sessionID FROM user WHERE sessionID = '$sessionID'", $db));
} while ($found < $sectors);
 
PHP:
$pool = '...';
do {
  $sessionID = '';
  do {
    $sessionID .= substr($pool, rand(0, strlen($pool), 1);
  } while (strlen($sessionID) <= 20);
} while (mysql_num_rows(mysql_query("SELECT sessionID FROM user WHERE sessionID = '".$sessionID."'")) > 0);
 
Also irgendwie wills nicht! Habe es nun bei mir eingebau;

Es wird also nur eine neue ID erstellt, wenn in der Datenbank die Dauer kleiner ist als die aktuelle Zeit! Aber ich bekomme den Error;

Parse error: syntax error, unexpected T_ELSE, expecting T_WHILE in /web/include/functions.php on line 257

PHP:
if ($row[validity] < time())
{

$pool = "qwertzupasdfghkyxcvbnm";
$pool .= "23456789";
$pool .= "WERTZUPLKJHGFDSAYXCVBNM";
do
{
do
{
$sessionID .= substr($pool, rand(0, strlen($pool), 1));
}
while (strlen($sessionID) <= 20);
}
while (mysql_num_rows(mysql_query("SELECT sessionID FROM user WHERE sessionID = '".$sessionID."'")) > 0);


}
else
{ 

##############

}
 
Zuletzt bearbeitet:
PHP:
if ($row[validity] < time())
{
  do
  {
    $pool = "qwertzupasdfghkyxcvbnm";
    $pool .= "23456789";
    $pool .= "WERTZUPLKJHGFDSAYXCVBNM";
    do 
    {
      do 
      {
        $sessionID .= substr($pool, rand(0, strlen($pool), 1));
      }
      while (strlen($sessionID) <= 20);
    }
    while (mysql_num_rows(mysql_query("SELECT sessionID FROM user WHERE sessionID = '".$sessionID."'")) > 0);
  }
  else 
  { 
      ##############
  }

// Hier müsste eigentlich erst die IF-Bedingung geschlossen werden!

Du machst 3x ein DO für eine WHILE-Schleife auf, jedoch gibst du nur insgesamt 2 While-Bedingungen an. Ich hoffe durch meine Einrückung kannst du erkennen, was er mit dem Fehler meint...

Gruß
Bratkartoffel
 
Zurück