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

MisterMi

Erfahrenes Mitglied
Hallo,

ich habe folgende Funktion, die eine Auswahl in die DB schreibt und mir per Mail sendet.
Nun wird ganz unten auch angezeigt, was ausgewählt und gesendet wurde.
Leider geht das aber unter, weil es eben ganz am Ende der Seite steht.

Kann man das irgendwie nach dem Senden oben anzeigen lassen, so dass man es gleich sieht und es auffällt? Die Variablen die ausgegeben werden sind ja leider erst am Ende des Codes gefüllt.

Danke

PHP:
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', TRUE);
session_start();
echo '<h2>Willkommen '.$_SESSION['user'].'</h2>';
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Checkboxen mit PHP auswerten</title>
</head>
<body bgcolor="#008000">

<form action="Check.php">
<input type="hidden" name="sent" value="yes">
<input type="text" name="user"><br>
<p align="center">&nbsp;</p>
<p><b><font size="+3">Torwart:</font></b><br />
<input type="checkbox" name="spieler[]" value="Manuel Neuer" />Manuel Neuer - Bayern - Torwart (TW) - 30.000.000 €<br />
<input type="checkbox" name="spieler[]" value="Marc-André ter Stegen" />Marc-André ter Stegen - Gladbach - Torwart (TW) - 11.000.000 €<br />
<input type="checkbox" name="spieler[]" value="René Adler" />René Adler - Hamburg - Torwart (TW) - 10.000.000 €<br />

<input type="submit">
</form>
<?php

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

//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());

    for ($a = 0; $a < count($_GET['spieler']); $a++) {
         $val[] = "('" .mysql_real_escape_string($_GET['user']) ."', '" .mysql_real_escape_string($_GET['spieler'][$a]) ."')";
    }
    $values = implode(', ', $val);

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

    //Verbindung beenden
mysql_close($db);

echo '<h1>Ihre Mannschaft &quot;'.$_GET["user"].'&quot;:</h1>';
echo '<p>Spieler:<br><br>' .implode(", ", $_GET["spieler"]) .'</p>';



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

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

}
?>
</body>
</html>
 
Mach es so in der Art und beginne erst mit den Ausgaben, wenn du weißt, was ausgegeben werden soll.

Stichwort: EVA-Prinzip.

- http://phpforum.de/forum/showthread.php?t=221678
- http://www.php.de/wiki-php/index.php/EVA-Prinzip_(Standardverfahren)

PHP:
<?php

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

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

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

if (isset($_GET['sent']) && $_GET['sent'] === 'yes') {
    //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());

    $val = array();

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

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

    $sql1 = "INSERT INTO kader (username, spielerid) VALUES " . $values;

    mysql_query($sql1);

    //Verbindung beenden
    mysql_close($db);

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

    // Wenn die Nachricht länger als 70 Zeichen ist braucht man ein wordwrap()
    $message = wordwrap($sql1, 70, "\r\n");
    $to      = 'aufstellungen@xxx.de';
    $subject = 'Aufstellung';
    $headers = 'From: aufstellungen@xxx.de' . "\r\n"
             . 'Reply-To: aufstellungen@xxx.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">
    <h2>Willkommen <?=$e($_SESSION['user'])?></h2>

    <?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.php">
        <input type="hidden" name="sent" value="yes">
        <input type="text" name="user"><br>
        <p align="center">&nbsp;</p>

        <p><b><font size="+3">Torwart:</font></b><br />
        <input type="checkbox" name="spieler[]" value="Manuel Neuer" />Manuel Neuer - Bayern - Torwart (TW) - 30.000.000 €<br />
        <input type="checkbox" name="spieler[]" value="Marc-André ter Stegen" />Marc-André ter Stegen - Gladbach - Torwart (TW) - 11.000.000 €<br />
        <input type="checkbox" name="spieler[]" value="René Adler" />René Adler - Hamburg - Torwart (TW) - 10.000.000 €<br />

        <input type="submit">
    </form>
</body>

</html>
 
Zuletzt bearbeitet:
Hab ich mal so probiert.

Trotz Auswahl werden keine Spieler ausgegeben und die Mail ist leer.

Notice: Undefined variable: message in /customers/b/3/5/mirkolinho.de/httpd.www/Check_VS.php on line 48

Willkommen Test


In die Datenbank wird die Auswahl aber richtig geschrieben. Anscheinend sind die Variablen dann aber für die Mail und die Ausgabe leer.
Ihre Mannschaft "Test":

Spieler:
 
Code ist wie oben vorgeschlagen :(

PHP:
<?php

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

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

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

if (isset($_GET['sent']) && $_GET['sent'] === 'yes') {
   //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('xxx_de', $db)
            OR die ('Keine Verbindung möglich: ' . mysql_error());

    $val = array();

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

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

    $sql1 = "INSERT INTO kader (username, spielerid) VALUES " . $values;

    mysql_query($sql1);

    //Verbindung beenden
    mysql_close($db);

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

  // Wenn die Nachricht länger als 70 Zeichen ist braucht man ein wordwrap()
$message = wordwrap($message, 70, "\r\n");
$to      = 'aufstellungen@xxx.de';
$subject = 'Aufstellung';
$headers = 'From: aufstellungen@xxx.de' . "\r\n" .
    'Reply-To: aufstellungen@xxx.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">
    <h2>Willkommen <?=$e($_SESSION['user'])?></h2>

    <?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_VS.php">
        <input type="hidden" name="sent" value="yes">
        <input type="text" name="user"><br>
        <p align="center">&nbsp;</p>

        <p><b><font size="+3">Torwart:</font></b><br />
        <input type="checkbox" name="spieler[]" value="Manuel Neuer" />Manuel Neuer - Bayern - Torwart (TW) - 30.000.000 €<br />
        <input type="checkbox" name="spieler[]" value="Marc-André ter Stegen" />Marc-André ter Stegen - Gladbach - Torwart (TW) - 11.000.000 €<br />
        <input type="checkbox" name="spieler[]" value="René Adler" />René Adler - Hamburg - Torwart (TW) - 10.000.000 €<br />

        <input type="submit">
    </form>
</body>

</html>
 
Ist er nicht.

PHP:
$message = wordwrap($message, 70, "\r\n");

Das zweite $message ist in meinem Beispiel $sql1.
 
Richtig das habe ich falsch ersetzt. Email wird nun richtig verschickt und in die Datenbank wird auch richtig geschrieben. Nur die Echo Ausgabe bleibt leer:

Willkommen Test
Ihre Mannschaft "Test":

Spieler:
 
Ach so. Du nutzt kein UTF-8.

Dann musst du die Definition von $e anpassen.

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

…oder wie auch immer.
 
So ein kleiner Fehler mit großer Wirkung ;)

Danke nun geht es. Noch eine Frage bei der ich noch keine Lösung habe.
Ich möchte, bevor die Auswahl in die DB geschrieben wird, die alten Einträge in der DB löschen die dem User zugeordnet sind.

Das wollte ich mit diesem Befehl machen der aber irgendein doofen Semikolon Fehler hat:

$sql_delete = "DELETE FROM kader WHERE user = '" .mysql_real_escape_string($_GET["user"] ."'";
 
Zurück