Checkboxauswahl wird in Datenbank geschrieben - Erfolgsmeldung oben anzeigen, wie?

Warum hab ich das nicht gesehen... *kopfschüttel*

Das ganze in die DB funktioniert nun hervorragend wie gewünscht ;) Danke

Nun würde ich das gerne übersichtlich wieder auslesen und anzeigen lassen.

In der Datenbank stehen zu dem User (username = $_SESSION['user']) verschiedene Spieler (Strings).

Nun möchte ich gern, dass dann eine Ausgabe kommt ähnlich wie:

Dein Team:

Torwart:
$Player1
$Player2

Abwehr:
$Player3
$Player4
$Player5

Die $Player stehen hier als Platzhalter. Dort sollen dann die Spieler aus der Datenbank auftauchen.

PHP:
session_start();
echo '<h2>Willkommen '.$_SESSION['user'].'</h2>';

//Verbindung herstellen
$db = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("xxx_de",$db) or die ("Keine Verbindung möglich: ".mysql_error());

    mysql_select_db('mirkolinho_de', $db)
            OR die ('Keine Verbindung möglich: ' . mysql_error());

    $sql="SELECT spielerid FROM kader WHERE username = '" .mysql_real_escape_string($_SESSION["user"]) ."'";
    mysql_query($sql);
    
    //Verbindung beenden
    mysql_close($db);

Soweit ist es mir klar aber wie gestalte ich den Rest?

Danke
 
PHP:
<?php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
session_start();
echo '<h2>Willkommen '.$_SESSION['user'].'</h2>';

//Verbindung herstellen
$db = mysql_connect("xxx.de.mysql", "xxx_de", "xxx") or die ("Keine Verbindung möglich: ".mysql_error());
mysql_select_db("xxx_de",$db) or die ("Keine Verbindung möglich: ".mysql_error());

    mysql_select_db('mirkolinho_de', $db)
            OR die ('Keine Verbindung möglich: ' . mysql_error());

    $sql="SELECT spielerid FROM kader WHERE username = '" .mysql_real_escape_string($_SESSION["user"]) ."'";

    $db_erg = mysql_query($sql);

if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}

echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";

  echo "<td>". $zeile['spielerid'] . "</td>";
  echo "</tr>";
}
echo "</table>";

mysql_free_result( $db_erg );


    //Verbindung beenden
    mysql_close($db);
?>

So funktioniert das schon einmal in einer Tabelle... um es nach Positionen zu sortieren brauch ich wohl noch eine Spalte in der Tabelle...

Wie sehe dann die Abfrage aus, wenn es den Aufbau username (Username), spielerid (Spielername), position (Position)
hätte

Wäre dann ja quasi in Wort:

Echo "Torwart";
Anzeigen where username = user und position = tor
Echo "Abwehr";
ANzeigen where username = user and position = abwehr

...


Als zweites würde mich interessieren ob man mehrere Checkboxen auch in einem Auswahlfenster zusammenfassen kann? Ich habe jetzt eine sehr lange Liste die Spieler anzeigt. Vor jedem ist eine Checkbox zum auswählen. Ich hätte gern am Ende 4 Kästen wo zu jeder Position die Spieler mit Checkbox Marker drin sind, um es übersichtlicher zu haben. Geht das?

Danke
 
Zuletzt bearbeitet:
Zur zweiten Frage: Du kannst zum Beispiel so was machen:

PHP:
<?php

$players = array();

for ($i = 0; $i < 200; $i++) {
    $players[] = 'Player ' . $i;
}

?><!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="UTF-8" />
        <title>title</title>
        <style>
/*<![CDATA[*/
/**
 * For modern browsers
 * 1. The space content is one way to avoid an Opera bug when the
 *    contenteditable attribute is included anywhere else in the document.
 *    Otherwise it causes space to appear at the top and bottom of elements
 *    that are clearfixed.
 * 2. The use of `table` rather than `block` is only necessary if using
 *    `:before` to contain the top-margins of child elements.
 */
.cf:before,
.cf:after {
    content: " "; /* 1 */
    display: table; /* 2 */
}

.cf:after {
    clear: both;
}

/**
 * For IE 6/7 only
 * Include this rule to trigger hasLayout and contain floats.
 */
.cf {
    *zoom: 1;
}

.box {
    border: 5px solid #eee;
    background: #d4e9f9;
    padding: 10px;
}

.box .entry {
    float: left;
    width: 150px;
    overflow: hidden;
    white-space: nowrap;
}
/*]]>*/
        </style>
    </head>

    <body>
        <div class="box cf">
            <?php foreach ($players as $player) : ?>
            <div class="entry">
                <input type="checkbox" name="players[]" value="<?=$player?>">
                <?=$player?>
            </div>
            <?php endforeach; ?>
        </div>
    </body>

</html>

(Zu dem .cf siehe: http://nicolasgallagher.com/micro-clearfix-hack/)



Zur ersten Frage: Also, es wäre generell nicht schlecht, wenn du dir etwas mehr Wissen über relationale Datenbanken aneignen würdest, insbesondere über Normalisierung und Joins.

- https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
- http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/

Dein Schema sollte/könnte beispielsweise so aussehen:

Code:
Tabelle: position
-----------------
 id  name
-----------------
  1  Torwart
  2  Verteidiger
  3  Mittelfeld
  4  Stürmer
  
  
Tabelle: player
-------------------------------
 id  name          position_id
-------------------------------
  1  Manuel Neuer            1
  2  Mats Hummels            2
  3  David Alaba             2
  4  Arjen Robben            3
  5  Dante                   2
  6  Marco Reus              3
  7  Adam Szalai             4
 ...
 
 
Tabelle: user
---------------
 id  name
---------------
  1  MisterMi
  2  mermshaus
  
  
Tabelle: user_has_player
------------------------
 user_id  player_id
------------------------
       1          4
       2          2
       2          6
       1          5
       1          1
       1          7

Darauf kannst du dann Queries abfeuern wie:

Code:
SELECT
        pl.id AS player_id,
        pl.name AS player_name,
        po.name AS position_name
FROM
        user_has_player AS uhp
INNER JOIN
        player AS pl
    ON
        uhp.player_id = pl.id
INNER JOIN
        position AS po
    ON
        pl.position_id = po.id
WHERE
        uhp.user_id = 1
    AND
        po.id = 1

Die würde dir alle Torhüter (position.id = 1) deines (user.id = 1) Teams liefern. (Ist aber ungetestet.)
 
Zuletzt bearbeitet:
Ich habe schon einmal versucht meine Tabellen so anzupassen.

Einzige Änderung war im Wesentlichen die Tatsache, dass ich bisher den Namen des Spielers mit dem Usernamen gespeichert habe und nun speicher ich die ID, die eindeutiger ist.

Bisher habe ich es dann so ausgegeben:

PHP:
   mysql_select_db('mirkolinho_de', $db)
            OR die ('Keine Verbindung möglich: ' . mysql_error());

    $sqle="SELECT spielerid FROM kader WHERE username = '" .mysql_real_escape_string($_SESSION["user"]) ."'";
    $sqlp="SELECT spielerid FROM kader2 WHERE username = '" .mysql_real_escape_string($_SESSION["user"]) ."'";

    // Anzeige Effektivität

    $db_erg = mysql_query($sqle);

if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}
echo'<table>';
echo"<tr>";
echo '<td align="left" valign="top" width="300" height="500"><h5>';
echo '<h2>Ihr Effektivitätsteam:</h2>';
echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";

  echo "<td>". $zeile['spielerid'] . "</td>";
  echo "</tr>";
}
echo "</table>";
echo "</h5></td>";
echo '<td align="left" valign="top" width="300" height="500"><h5>';

mysql_free_result( $db_erg );

Nun stellt sich mir die Frage, wie ich die Ausgabe nun anpasse, da nun 2 Tabellen beteitigt sind.

Tabelle: kader
------------------------
username spielerid
------------------------
Mirko 1
Mirko 2
Mirko 3
Test 4
Test 5
Test 6
und zu anderen

Tabelle: Marktspieler
-------------------------------
id spieler position Wert
-------------------------------
1 Manuel Neuer 1 20000
2 Mats Hummels 2 50000
3 David Alaba 2 40000
4 Arjen Robben 3 50000
5 Dante 2 20000
6 Marco Reus 3 25000
7 Adam Szalai 4 60000

Nun muss ja geschaut werden, welche IDs der User "Mirko" zum Beispiel hat und diese dann in Klarschrift aus Marktspieler.spieler rausholen anhand des vergleichens kader.spielerid = Marktspieler.id (Am besten wäre noch wenn die Ausgabe den Namen und den Wert beinhalten würde anstatt nur wie bisher den Namen.)

Vielen Dank
 
Zurück