# Checkboxlisten gruppieren oder zusammenfassen um übersicht reinzubekommen



## MisterMi (28. August 2013)

```
<?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);
?>
```

Ich versuche Spieler auswählen zu lassen und das ergebnis dann zu speichern und per mail zu senden.


mich würde 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?
Bzw. wenigstens die listen nebeneinander und nicht mehr untereinander.

Danke

unter http://www.mirkolinho.de/Easy.html sieht man so eine liste


----------



## ByeBye 270552 (30. August 2013)

Sry aber ich verstehe es noch nicht ganz, wie du das mit den Auswahlboxen meinst.
Deine Seite sieht jetzt so aus wie diese Beispielseite, die du verlinkt hast? Und du möchtest stattdessen aber das wie aussehen haben? Vllt kannst ne kleine Skizze mit Paint oder so machen


----------



## MisterMi (31. August 2013)

Am liebsten wären mir eben 4 Boxen die man erst aufklappen kann oder so wenn man sie braucht oder die nur 20 anzeigen und den Rest muss man scrollen. Eine Sortiermöglichkeit nach gewissen Kriterien wäre auch nicht schlecht. Geht das nur mit Javascript oder sowas?


----------



## ByeBye 270552 (31. August 2013)

Ja so was wirst du nur mit JavaScript schaffen. Was für deine Anfrage mit dem aufklappen vllt das ist was du suchst ist http://jqueryui.com/accordion/


----------



## tombe (31. August 2013)

Also wenn ich es richtig verstehe, willst du das nicht alle Spieler untereinander stehen und die Seite deshalb so lang wird. Es soll nur eine scrollbare Liste zu sehen sein wo man die Spieler auswählen kann!?
Das könnest du mit einem einfachen DIV-Container lösen:


```
function liste(id){
	if (document.getElementById(id).style.display == "block"){
		document.getElementById(id).style.display = "none";
	} else {
		document.getElementById(id).style.display = "block";
	}
}
```


```
<label for="liste1" onclick="liste('liste1')">Liste 1:</label>
<div id="liste1" style="width: 250px; height: 100px; overflow-y: scroll; display: block;">
<input type="checkbox" name="check1" value="Peter" /> Peter<br />
<input type="checkbox" name="check2" value="Frank" /> Frank<br />
<input type="checkbox" name="check3" value="Martin" /> Martin<br />
<input type="checkbox" name="check4" value="Stefan" /> Stefan<br />
<input type="checkbox" name="check5" value="Hans" /> Hans<br />
<input type="checkbox" name="check6" value="Claudia" /> Claudia<br />
<input type="checkbox" name="check7" value="Petra" /> Petra<br />
<input type="checkbox" name="check8" value="Susanne" /> Susanne<br />
<input type="checkbox" name="check9" value="Barbara" /> Barbara<br />
<input type="checkbox" name="check10" value="Martina" /> Martina<br />
</div>
```


----------



## MisterMi (3. September 2013)

Ich habe das mal Testweise so eingefügt bekomme allerdings folgende Fehlermeldung : Parse error: syntax error, unexpected ')', expecting '&' or T_VARIABLE in /customers/b/3/5/mirkolinho.de/httpd.www/Check_EF.php on line 12 -> Line 12 ist die "function liste(id){" ...

Desweiteren habe ich gleich eine Anschlussfrage:

Ich habe derzeit eine Tabelle mit den Spielern mit folgenden Aufbau:
id 	spieler 	position 	verein 	marktwert 	punkte 	lastp 

Nun baue ich die Checkboxen im folgenden Style ja noch manuell auf:
<input type="checkbox" name="spieler[]" value="Fuhry" />Fuhry - 100.000 € - Hannover - 0 Punkte<br />
<input type="checkbox" name="spieler[]" value="Uphoff" />Uphoff - 100.000 € - Nürnberg - 0 Punkte<br />

...

Kann man die Zeilen irgendwie anhand der Tabelle aufbauen lassen, so dass wenn ich die Daten in der Datenbank ändere, die Checkboxen sich gleich mit aktualisieren was die Werte angeht?

Vielen Dank


----------



## tombe (3. September 2013)

Zum ersten Fehler kann ich nichts sagen, weil ich den Code nicht kenne. Sieht aber so aus als ob du dich einfach verschrieben hättest!

Wenn du die Daten zu den Spielern in der Datenbank gespeichert hast, dann kannst du doch in einer Schleife die Angaben durchlaufen und dabei die Checkboxen erstellen.


```
echo '<input type="checkbox" name="spieler[]" value="' .$spieler .'" />' .$spieler .' - ' .$wert .' € - ' .$verein .' - ' .$punkte .' Punkte<br/>';
```

Die Werte für die hier verwendeten Variablen $spieler, $wert, ... holst du dir aus der Datenbank.


----------



## MisterMi (3. September 2013)

```
<?php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
session_start();

//Verbindung herstellen
xxx

// Schutz vor XSS
$e = function ($s) {
return htmlspecialchars($s, ENT_QUOTES, 'ISO-8859-1');
};

// Variablen für Ausgabe-Template
$tpl = array(
    'sent'    => false,
    'players' => array(),
    'user'    => ''
);

echo '<h2 align="center">"Diese Testfunktion schreibt die Auswahl bereits in die Datenbank und schickt sie zeitgleich per Mail"</h2>';
echo '<h1 align="center">Willkommen ' .$_SESSION['user'].' - wähle bitte 15 Spieler!</h1>';
echo '<h3 align="center">Die Punkte der Spieler basieren auf dem Stand vom 3. Spieltag (29.08.2013)</h3>';

// echo '<h2>Willkommen '.$_SESSION['user'].'</h2>';

  $sql_Tor="SELECT spieler, position, marktwert, verein, punkte, lastp FROM MarktSpieler WHERE position ='Tor'";
  $db_Tor = mysql_query($sql_Tor);

  $sql_Abwehr="SELECT spieler, position, marktwert, verein, punkte, lastp FROM MarktSpieler WHERE position ='Abwehr'";
  $db_Abwehr = mysql_query($sql_Abwehr);

  $sql_Mittelfeld="SELECT spieler, position, marktwert, verein, punkte, lastp FROM MarktSpieler WHERE position ='Mittelfeld'";
  $db_Mittelfeld = mysql_query($sql_Mittelfeld);

  $sql_Sturm="SELECT spieler, position, marktwert, verein, punkte, lastp FROM MarktSpieler WHERE position ='Sturm'";
  $db_Sturm = mysql_query($sql_Sturm);

echo '<p align="center">&nbsp;</p>';
echo '<table border="1">';
echo '<tr>';
echo '<td  align="left" valign="top" width="350" height="1000"><h5>';
echo '<p><b><font size="+3">Torwart:</font></b><br />';

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

while ($zeile = mysql_fetch_array( $db_Tor, MYSQL_ASSOC))
{
  echo '<input type="checkbox" name="spieler[]" value="'. $zeile['spieler'] . '" />' . $zeile['spieler'] . ' - ' . $zeile['marktwert'] . ' € - ' . $zeile['verein'] . ' - ' . $zeile['punkte'] . ' Punkte<br/>';
}
mysql_free_result( $db_Tor );

echo '</h5></td>';
echo '<td align="left" valign="top" width="350" height="1000"><h5>';

echo '<p><b><font size="+3">Abwehr:</font></b><br />';

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

while ($zeile = mysql_fetch_array( $db_Abwehr, MYSQL_ASSOC))
{
  echo '<input type="checkbox" name="spieler[]" value="'. $zeile['spieler'] . '" />' . $zeile['spieler'] . ' - ' . $zeile['marktwert'] . ' € - ' . $zeile['verein'] . ' - ' . $zeile['punkte'] . ' Punkte<br/>';
}
mysql_free_result( $db_Abwehr );

echo '</h5></td>';
echo '<td align="left" valign="top" width="350" height="1000"><h5>';

echo '<p><b><font size="+3">Mittelfeld:</font></b><br />';

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

while ($zeile = mysql_fetch_array( $db_Mittelfeld, MYSQL_ASSOC))
{
  echo '<input type="checkbox" name="spieler[]" value="'. $zeile['spieler'] . '" />' . $zeile['spieler'] . ' - ' . $zeile['marktwert'] . ' € - ' . $zeile['verein'] . ' - ' . $zeile['punkte'] . ' Punkte<br/>';
}
mysql_free_result( $db_Mittelfeld );

echo '</h5></td>';
echo '<td align="left" valign="top" width="350" height="1000"><h5>';

echo '<p><b><font size="+3">Sturm:</font></b><br />';

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

while ($zeile = mysql_fetch_array( $db_Sturm, MYSQL_ASSOC))
{
  echo '<input type="checkbox" name="spieler[]" value="'. $zeile['spieler'] . '" />' . $zeile['spieler'] . ' - ' . $zeile['marktwert'] . ' € - ' . $zeile['verein'] . ' - ' . $zeile['punkte'] . ' Punkte<br/>';
}
mysql_free_result( $db_Sturm );

echo '</h5></td>';
echo '</tr>';
echo '</table>';


if (isset($_GET['sent']) && $_GET['sent'] === 'yes') {


    $val = array();

    foreach ($_GET['spieler'] as $spieler) {
        $val[] = "('" . mysql_real_escape_string($_SESSION['user']) . "', "
               . "'" .mysql_real_escape_string($spieler) . "')";
    }

    $values = implode(', ', $val);

    $sql1 = "INSERT INTO kader (username, spielerid) VALUES " . $values;
    $sql_delete = "DELETE FROM kader WHERE username = '" .mysql_real_escape_string($_SESSION["user"]) ."'";

    mysql_query($sql_delete);
    mysql_query($sql1);


    //Verbindung beenden
    mysql_close($db);

    $tpl['sent']    = true;
    $tpl['players'] = $_GET['spieler'];
    $tpl['user']    = $_SESSION['user'];

  // Wenn die Nachricht länger als 70 Zeichen ist braucht man ein wordwrap()
 // Wenn die Nachricht länger als 70 Zeichen ist braucht man ein wordwrap()
    $message = wordwrap($sql1, 70, "\r\n");
    $to      = 'aufstellungen@mirkolinho.de';
    $subject = 'Aufstellung';
    $headers = 'From: aufstellungen@mirkolinho.de' . "\r\n"
             . 'Reply-To: aufstellungen@mirkolinho.de' . "\r\n"
             . 'X-Mailer: PHP/' . phpversion();


    mail($to, $subject, $message, $headers);
}

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
    <title>Checkboxen mit PHP auswerten</title>
</head>

<body bgcolor="#008000">


    <?php if ($tpl['sent']) : ?>

        <h1>Ihre Mannschaft &quot;<?=$e($tpl['user'])?>&quot;:</h1>
        <p>
            Spieler:<br><br>
            <?=$e(implode(', ', $tpl['players']))?>
        </p>

    <?php endif; ?>
    <form action="Check_EF.php">
        <input type="hidden" name="sent" value="yes">
         <p align="center">&nbsp;</p>

 </br>

  <div style="text-align: center;">
        <input type="submit" value="Aufstellung senden" style="width: 150px; height: 50px">
</div>
    </form>
</body>

</html>
```

Habe das jetzt mal so angepasst. Er zeigt auch die Spieler richtig aus der DB an. Danke dafür.

Leider kennt er nun die Werte nicht mehr nach dem senden. Ist da ein Denkfehler drin?
Vorher hatte ich ja die Checkboxen im HTML Teil und von da wurden sie bearbeitet. Nun sind sie aber im PHP Teil weil es ja nicht anders geht.


----------



## tombe (3. September 2013)

Dann platziere es einfach wieder im HTML-Teil und zwar innerhalb der form-Tags, dann sind die Werte auch wieder vorhanden!


----------



## MisterMi (3. September 2013)

Richtig mit PHP Rand drumrum  Hätte ich auch drauf kommen können.

Geht auch! Ich habe in der Datenbank bei Wert derzeit die Zahl iM Format 1.000.000 € stehen. Um es sortieren zu können würde ich es aber gern als 1000000 abspeichern und dann als 1.000.000 € ausgeben. Das € ist ja schnell dahintergesetzt als String aber gibt es eine Möglichkeit das in das Format bei der Ausgabe zu konvertieren?


----------



## ByeBye 270552 (3. September 2013)

Das €-Zeichen setzt du am besten als String dahinter, aber die Zahl selber formatieren kannst du mit number_format() (http://php.net/manual/en/function.number-format.php) 

```
number_format($zeile['marktwert'],  0, ',', '.');
```


----------



## tombe (3. September 2013)

Bedeutet das du hast den Wert nicht als Zahl sondern als String zusammen mit dem Euro-Zeichen gespeichert?

Dann stell zuerst in der Datenbank auf das entsprechende Format um, die Formatierung kannst du dann schon bei der Ausgabe/Abfrage vornehmen (falls erforderlich).


----------



## MisterMi (3. September 2013)

Ja als String mit Euro derzeit gespeichert. Also das Format in der Spalte der Datenbank umstellen auf ? Decimal?


----------



## tombe (3. September 2013)

Im Prinzip schon auf Decimal, außer es ist 100% sicher das es immer nur ganzzahlige Werte gibt. Dann kannst du natürlich auch Integer nehmen.


----------



## MisterMi (3. September 2013)

Ich habe jetzt das Format auf Interger gestellt weil es nur ganze Zahlen sind. Nun sortiert er aber immer irgendwie nach der ganzen Ziffer, so dass eine 90000 nach 1000000 kommt. Order by... hab ich genommen. Warum tut er das ?


----------



## tombe (3. September 2013)

Also wenn du den Datentyp der entsprechenden Spalte auf Integer gesetzt hast und ihn auch so abfragst, kann das eigentlich nicht sein.


----------



## MisterMi (3. September 2013)

Stimmt, er hatte das Format Int nicht übernommen in der DB warum auch immer...

Danke

Kennt jemand einen WYSIWYG Javascript Editor für Anfänger?


----------



## ComFreek (3. September 2013)

CKEditor


Übrigens solltest du nicht mehr die alte MySQL-Erweiterung nutzen in deinem Code!!


----------



## MisterMi (3. September 2013)

Was ist denn der Unterschied?


----------



## ComFreek (3. September 2013)

Die alte Erweiterung ist

a) schlichtweg veraltet
b) unterstützt keine Prepared Statements (sehr wichtig!)
c) unterstützt keine Transaktionen
d) unterstützt andere neue Funktionen von MySQL nicht

und

e) wird bald aus PHP GANZ entfernt!

Es gibt _absolut_ keinen Grund die alte Erweiterung noch zu nutzen. Die, die es nutzen, sollten wirklich schleunigst umsteigen. Entweder auf MySQLi oder PDO.


----------

