Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „PHP/Datenbank Problem (Datensatz richtig zuweisen)“

covenas

Noch nicht viel geschrieben

Hallo zusammen!
Habe ein großes Problem und zwar möchte ich gerne für eine Sportart eine Online Spiele Verwaltung machen. D.h. Benutzer können sich anmelden und der Admin kann dann per Klick das Turnier (K.O.System) starten. Dazu möchte ich zufällig 2 Spieler aus der Datenbank auswählen. Es gibt sozusagen 2 Tabellen: user und spiele. Aus user sollen per php alle angemeldeten Benutzer ausgelesen und dann zufällig in spiele paarweise zufällig zusammengesetzt werden. Leider funktioniert das nicht so wie ich mir das vorstelle. Sitze schon seit einigen Stunden an diesem Problem. Meine php Kenntnisse sind etwas begrenzt.

<?php
require_once('config.inc.php');

try {
$db = new PDO('mysql:host=localhost;dbname='.DB_NAME, DB_USER, DB_PASSWORD);
} catch (PDOException $e) {
echo "Verbindung fehlgeschlagen";
die();
}
$sql = "SELECT * FROM users WHERE user_id != 1 ORDER BY RAND()";
$result = $db->query($sql);
$result = $result->fetchAll();


foreach($result as $row){
$spieler = $row['username'];



$sql = "INSERT INTO spiele (spieler)
VALUES ('$spieler)";
$db->exec($sql);

header("Location: main.php");
}

?>


Das Problem ist, dass ich mit foreach ja nur ein array speichere und die Zeile danach is sozusagen Schwachsinn (das hab ich selbst schon bemerkt.) Es sollen sozusagen ALLE User abgerufen und in die neue Tabelle eingefügt werden ca. so

...
$spieler1 = 1.Ergebnis
$spieler 2 = 2. Ergebnis
...
$sql = "INSERT INTO spiele (spieler1,spieler2)
VALUES ('$spieler1','$spieler2')";
$db->exec($sql);


usw. bis alle User in zweier Teams verteilt sind.

Hoffe jemand kann mir dabei weiterhelfen.
mit bestem Dank
lg covenas
 

ChrisvA

Aktives Mitglied

AW: PHP/Datenbank Problem (Datensatz richtig zuweisen)

Falls deine MySQL-Abfrage funktioniert und sie dir die Spieler zufällig zurück liefert, würde ich das ganze mit einer for-Schleife statt foreach lösen.
PHP:
$spiele=array();
for($i=0; $i < count($result); $i += 2){
$spiele[($i/2)][0]=$result[$i]['username'];
$spiele[($i/2)][1]=$result[($i + 1)]['username'];
} 
//print_r($spiele);
In $spiele müsste nach der Schleife jeweils die Spieler stehen. Für die Struktur des Arrays kannst du print_r() benutzen, um sie dir anzuschauen.

PS: Bitte verwende nächstes Mal die Code-tags beim Posten.
 

covenas

Noch nicht viel geschrieben

AW: PHP/Datenbank Problem (Datensatz richtig zuweisen)

Vielen Dank.
Glaube ich weiß jetzt wie ich weiter machen kann. Nur noch eine kurze Frage: Wie sollte ich den Code denn hier umschreiben damit das klappt.

PHP:
$sql = "INSERT INTO spiele (spieler) 
VALUES ('$spieler)";
$db->exec($sql);

wollte das so lösen aber das geht leider nicht.

PHP:
   $spiele=array();
 
  for($i=0; $i < count($result); $i += 2){
   $spiele[($i/2)][0]=$result[$i]['username'];
   $spiele[($i/2)][1]=$result[($i + 1)]['username'];
 
   $sql = "INSERT INTO spiele (spieler1, spieler2) 
   VALUES ('$spiele[($i/2)][0]','$spiele[($i/2)][1]')";
   $db->exec($sql);
 
   }
 

saila

Moderatorle

AW: PHP/Datenbank Problem (Datensatz richtig zuweisen)

Hi,

ohne mich in das Thema zu vertiefen, aber mit der for-Schleife wird das auch nichts.

Du willst aus einer User-Tabelle zufällige Spielpaare bilden - wenn ich das richtig verstanden habe. Dazu musst du im Vorfeld prüfen, ob die Tabelle User auch eine gerade Anzahl an User hat, sonst wird das schon mal nichts. Wenn das wiederum Sichergestellt ist, musst du eine rekursive Schleife (foreach) durchlaufen. In dieser Schleife wird ein Array mit Spielparen befüllt. Dabei musst du jedoch wiederum Prüfen, ob der durchlaufende Username bereits in das Array eingetragen wurde, ansonsten beginnt (somit rekursiv) die Schleife wieder von neuem bzw. trägt den Spieler ein. Ist der Spieler eingetragen, muss das gleiche für den Spielpartner erfolgen.

Wenn dieses Array gebildet ist, hast du dein Ziel erreicht. Da wird dir eine for-Schleife kaum was nützen! Abgesehen davon - wenn nun einen neue Spielerpaar-Zusammenstellung erfolgt, sollte diese ja nicht die gleiche Zusammenstellung an Spielpaar-Namen enthalten.

Da sage ich schon mal viel Spass beim nachdenken, wie das auf die schnelle (wohl kaum möglich) zu lösen ist, ohne die Spielpaare zu speichern um danach zu vergleichen ;)
 

sharkandy

Noch nicht viel geschrieben

AW: PHP/Datenbank Problem (Datensatz richtig zuweisen)

Schau mal ob das dein Problem löst:

PHP:
<?php
 $db_name = "...";
 $db_host = "localhost";
 $db_user = "...";
 $db_passwd = "...";
 $db = mysql_connect($db_host, $db_user, $db_passwd);
 if ($db == -1) 
 {
  die("Could not connect to database");
 }
 
 $sql = "SELECT * FROM users WHERE user_id!=1 ";
 if ($result = mysql_db_query($db_name, $sql))
 {
  while ($row=mysql_fetch_array($result))
  {
   $users[]=$row["username"];
  }
 }
 else
 {
  echo "Fehlermeldung...";
  }
 
 $n = count($users);
 if (floor($n/2)*2==$n)
 {
  $pos = 0;
  srand ((double)microtime()*1000000);
  for ($i=0; $i<$n/2;$i++)
  {
   $r = rand(1,$n);
   while ($r>0)
   {
    $pos = ($pos+1) % $n;
    if ($users[$pos]!=="")
    {
     $r--;
    }
   }
   $sp1 = $users[$pos];
   $users[$pos]="";
   $r = rand(1,$n);
   while ($r>0)
   {
    $pos = ($pos+1) % $n;
    if ($users[$pos]!=="")
    {
     $r--;
    }
   }
   $sp2 = $users[$pos];
   $users[$pos]="";
   $spiele[] = array($sp1,$sp2);
  }
 }
 else
 {
  echo "Fehler ... Spielerzahl nicht durch 2 teilbar!";
 }
 foreach ($spiele as $sp)
 {
  $sql = "INSERT INTO spiele (Spieler1,spieler2) VALUES('" . $sp[0] . "','" . $sp[1] . "')";
  if (!mysql_db_query($db_name, $sql))
  {
   echo "Fehlermeldung...";
  }
 }
?>

Gruß

Andreas
 
Zuletzt bearbeitet:
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Statistik des Forums

Themen
175.189
Beiträge
2.582.077
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben