Zur Navigation

Formularfeld Eingabe überprüfen [2]

11 tobi

ja, überhaupt nicht mehr. hatte es wohl zu weit unten im code gesetzt. habs jetzt weiter nach oben, gehe aber nicht davon aus, dass es korrekt ist.

            <!-- Anfang Linker Inhalt -->
            <div id="linkerinhalt">
    <title>Anmeldung</title>

<?php

include_once('zugang_ppc.php.inc');

//$max_aklasse=64;
//$max_bklasse=64;
//$max_cklasse=64;
$max_aklasse=64;
$max_bklasse=64;
$max_cklasse=64;

// sql-Abfrage 1 - Ermitteln Anzahl A-Klasse + Teilweise Damen A (Turnierklasse = 3)
$query = mysqli_query($mysqli, 'SELECT Count(*) FROM anmeldungen_2016_sonntag WHERE gemeldeteKlasse = \'3\'');
list($num_aklasse) = mysqli_fetch_row($query);
// sql-Abfrage 2 - Ermitteln Anzahl B-Klasse + Teilweise Damen A (Turnierklasse = 2)
$query = mysqli_query($mysqli, 'SELECT Count(*) FROM anmeldungen_2016_sonntag WHERE gemeldeteKlasse = \'2\'');
list($num_bklasse) = mysqli_fetch_row($query);
// sql-Abfrage 3 - Ermitteln Anzahl C-Klasse + Teilweise Damen A (Turnierklasse = 1)
$query = mysqli_query($mysqli, 'SELECT Count(*) FROM anmeldungen_2016_sonntag WHERE gemeldeteKlasse = \'1\'');
list($num_cklasse) = mysqli_fetch_row($query);
unset($query);
?>
<?php
//begin POST form check
$show_form = false;
//entweder einfacher Check (nur namen angeben), oder erweiterter via Regularexpression ([name,regex,errormsg])
$frm_field = array(
    array(
        'email',
        '/^[\w\-\.\+]+@([\w\-]+\.?)+$/',
        'Bitte gültige E-Mail eintragen!'
    ),
    'vorname',
    'nachname',
    array(
        'geschlecht',
        '/^(M|W)$/',
        'Bitte Geschlecht auswählen!'
    ),
    array(
        'geburtsjahr',
        '/^(19|20)\d\d$/',
        'Bitte gültiges Geburtsjahr eintragen (z.B. 1967)!'
    ),
    array(
		 'ttr',
		 '/^[1-9][0-9]{3}$/',
		 'Bitte nur 4 Zahlen eintragen (z.B. 1234)!'
	),
    'verein',
    array(
        'turnierklasse',
        '/^[1-5]$/',
//		'/^[1-9][0-9]{3}$/',
        'Bitte gültige Turnierklasse auswählen!'
    ),
    array(
        'email_alt',
        '/(^[\w\-\.\+]+@([\w\-]+\.?)+$|^$)/',
        'Optionales Feld, darf leer gelassen werden oder weitere gültige E-Mail eintragen!'
    )
);
$frm_error = array();
if (isset($_POST['email'])) {
    foreach ($frm_field as $val) {
        if (!is_array($val)) {
            if (empty($_POST[$val])) {
                $_POST[$val]     = '';
                $frm_error[$val] = ' <span class="rot">Bitte ausfüllen!</span>';
                $show_form       = true;
            } else
                $frm_error[$val] = '';
        } else {
            if (!isset($_POST[$val[0]])) {
                $_POST[$val[0]]     = '';
                $frm_error[$val[0]] = ' <span class="rot">Bitte ausfüllen!</span>';
                $show_form          = true;
            } elseif (!preg_match($val[1], $_POST[$val[0]])) {
                $frm_error[$val[0]] = ' <span class="rot">' . $val[2] . '</span>';
                $show_form          = true;
            } else
                $frm_error[$val[0]] = '';
        }
    }
} else {
    foreach ($frm_field as $val) {
        if (is_array($val)) {
            if (!isset($_POST[$val[0]]))
                $_POST[$val[0]] = '';
            $frm_error[$val[0]] = '';
        } elseif (!isset($_POST[$val])) {
            $_POST[$val]     = '';
            $frm_error[$val] = '';
        }
    }
    $show_form = true;
}
unset($frm_field);
//vom check oben nicht betroffen (da optional)
if (!isset($_POST['eintrag']))
    $_POST['eintrag'] = '';
if (!isset($_POST['turnierklasse_ex']))
    $_POST['turnierklasse_ex'] = '';
//end POST form check

if (!$show_form) { //sende anfrage / eintragen
    $_POST['turnierklasse'] = intval($_POST['turnierklasse']);
    $turnierklassestr       = '';
//    $altSignUp              = ($num_sonntag >= $max_sonntag); //case 1&2 change it again
$altSignUp              = ($num_cklasse >= $max_cklasse || $num_bklasse >= $max_bklasse || $num_aklasse >= $max_aklasse);	

    switch ($_POST['turnierklasse']) {
        case 1:
            $turnierklasse    = 'Aktive C';
			$min_ttr          = 1100;
			$max_ttr          = 1450;
			$turnierklassestr = $turnierklasse . ' mit QTTR von ' . $min_ttr . ' bis ' . $max_ttr . ' - Turniertag 2 - Sonntag 11. September 2016';
 //           $turnierklassestr = 'Aktive C mit QTTR von 1100 bis 1450 - Turniertag 2 - Sonntag 11. September 2016';
            $startgeld        = '10€';
            $vorkasse         = '9€';
			$altSignUp 		  = ($num_cklasse >= $max_cklasse); 
            break;
        case 2:
            $turnierklasse    = 'Aktive B';
			$min_ttr          = 1400;
			$max_ttr          = 1600;			
            $turnierklassestr = $turnierklasse . ' mit QTTR von ' . $min_ttr . ' bis ' . $max_ttr . ' - Turniertag 2 - Sonntag 11. September 2016';
            $startgeld        = '10€';
            $vorkasse         = '9€';
			$altSignUp 		  = ($num_bklasse >= $max_bklasse); 
            break;
        case 3:
            $turnierklasse    = 'Aktive A';
			$min_ttr          = 1550;
			$max_ttr          = 3000;	
            $turnierklassestr = $turnierklasse . ' mit QTTR von ' . $min_ttr . ' bis ' . $max_ttr . ' - Turniertag 2 - Sonntag 11. September 2016';
            $startgeld        = '10€';
            $vorkasse         = '9€';
			$altSignUp 		  = ($num_aklasse >= $max_aklasse); 
            break;
    }
	if ($_POST['ttr'] >= $min_ttr && $_POST['ttr'] <= $max_ttr) {

    // OK
		} else {
    // Fehlermeldung
	echo 'Deine TTR Punkte sind außerhalb des ausgewählten Wettbewerbes';
	}

    if (mysqli_fetch_object(mysqli_query($mysqli, 'SELECT * FROM `anmeldungen_2016_sonntag` WHERE `vorname` = \'' . mysqli_real_escape_string($mysqli, $_POST['vorname']) . '\' AND `nachname` = \'' . mysqli_real_escape_string($mysqli, $_POST['nachname']) . '\' LIMIT 1'))) {
?><p><span class="rot"><b>Die Anmeldung ist Fehlgeschlagen!<br/>Die von dir angegebene Person <?php
        echo $_POST['vorname'] . ' ' . $_POST['nachname'];
?> ist bereits angemeldet.</b></span></p>
                <p>Falls dem nicht so seien sollte, kontaktiere uns bitte via E-Mail unter dieser Mailadresse: <a class="mailto" href="mailto:&#112;&#112;&#99;2016&#64;&#116;&#116;&#99;&#45;&#108;&#97;&#110;&#103;&#101;&#110;&#115;&#116;&#101;&#105;&#110;&#98;&#97;&#99;&#104;&#46;&#100;&#101;ppc2016&nbsp;[at]&nbsp;ttc-langensteinbach&nbsp;[Punkt]&nbsp;de</a></p>
                </p><?php
        $show_form = false;
    } else { //eintragen
        $mysqli_query = ' 
INSERT INTO `anmeldungen_2016_sonntag`
(`vorname`, `nachname`, `geschlecht`, `geburtsjahr`, `ttr`, `email`, `verein`, `gemeldeteKlasse`, `anmerkung`, `timestamp`)
VALUES
(\'' . mysqli_real_escape_string($mysqli, $_POST['vorname']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['nachname']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['geschlecht']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['geburtsjahr']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['ttr']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['email']) . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['verein']) . '\', \'' . $_POST['turnierklasse'] . '\', \'' . mysqli_real_escape_string($mysqli, $_POST['eintrag']) . '\', NOW())';
        if (mysqli_query($mysqli, $mysqli_query)) { //Bestätigungsemail an den Anmeldenden
            
            $mail = new PHPMailer;
                     
            //Text der EMail setzen
            $mail->Body = $text;
            
            //EMail senden und überprüfen ob sie versandt wurde
            if (!$mail->Send()) {
                //$mail->Send() liefert FALSE zurück: Es ist ein Fehler aufgetreten
                echo "Es gab bei der übermittelung der Daten ein kleines Problem. Bitte wiederhole den Vorgang oder kontaktiere uns bitte via E-Mail";
                echo "Fehler: " . $mail->ErrorInfo;
            } else {
                //$mail->Send() liefert TRUE zurück: Die Email ist unterwegs
                echo "<br />Eine Bestätigung deiner Anmeldung/Anfrage ist soeben an dich gesendet worden.";
            }
            { //Mail an die Turnierleitung
                
                $mail = new PHPMailer;
                               
                //Text der EMail setzen
                $mail->Body = $text;
                
                //EMail senden und überprüfen ob sie versandt wurde
                if (!$mail->Send()) {
                    //$mail->Send() liefert FALSE zurück: Es ist ein Fehler aufgetreten
                    echo "Es gab bei der übermittelung der Daten ein kleines Problem. Bitte wiederhole den Vorgang oder kontaktiere uns bitte via E-Mail";
                    echo "Fehler: " . $mail->ErrorInfo;
                } else {
                    //$mail->Send() liefert TRUE zurück: Die Email ist unterwegs
                    echo "<br />Die Anmeldung/Anfrage ist an die Turnierleitung übermittelt worden.";
                }

               
                //    $show_form=true;
            }
        } else {
            die ('<b>MySQL Error:</b><div class="rot">' . mysqli_error($mysqli) . '</div><br/>');
            $show_form = true;
        }
    }
}


if ($show_form) //zeige Formular
    { //führt das aus, wenn die mail adresse noch ned angegeben wurde oder sonst wie das Formular nicht stimmt.
    //ausgabe bzw. setzen von "turnierklasse" vereinfachen
    //Formular für Zusatzangaben wie E-Mail-Adresse, Mitteilung, etc.
?>
<h1>Anmeldung</h1>    
<p>für den Turniertag 2, Sonntag den 11.09.2016</p>
<p>Bitte jetzt folgende Felder ausfüllen. Die Teilnahme in einer höheren Turnierklasse ist möglich (bitte angeben), nicht aber ein Start in mehreren Wettbewerben.<br />
*Die Angabe der E-Mail-Adresse ist von Nöten, da wir an diese Adresse die Bestätigungsemail verschicken. </p>
<form name="blub" method="post" action="anmeldung-sonntag-test.php">
<table><tr>
    <td><label for="vorname">Vorname:</label></td>
    <td><input name="vorname" type="text" id="vorname" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['vorname'] . '"/>' . $frm_error['vorname']);
?></td>
</tr>
<tr>
    <td><label for="nachname">Nachname:</label></td>
    <td><input name="nachname" type="text" id="nachanme" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['nachname'] . '"/>' . $frm_error['nachname']);
?></td>
</tr>
<tr>
    <td>Geschlecht:</td>
    <td><select name="geschlecht"><option value="1">Bitte auswählen</option><option value="M"<?php
    echo (($_POST['geschlecht'] == 'M' ? ' selected="selected"' : ''));
?>>männlich</option><option value="W"<?php
    echo (($_POST['geschlecht'] == 'W' ? ' selected="selected"' : ''));
?>>weiblich</option></select><?php
    echo $frm_error['geschlecht'];
?></td>
</tr>
<tr>
    <td><label for="ttr">(Q-)TTR (11.08.2016):</label></td>
    <td><input name="ttr" type="text" id="ttr" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['ttr'] . '"/>' . $frm_error['ttr']);
?></td>
</tr>
<tr>
    <td>Turnierklasse:</td>
    <td><select name="turnierklasse">
    <option>Bitte auswählen</option>
    <?php
    /*Samstag*/
	$sunfull_cklasse = ($num_cklasse >= $max_cklasse ? 'full' : 'gruen');
	$sunfull_bklasse = ($num_bklasse >= $max_bklasse ? 'full' : 'gruen');
	$sunfull_aklasse = ($num_aklasse >= $max_aklasse ? 'full' : 'gruen');
?>
   <option value="1" class="<?php echo $sunfull_cklasse; ?>"
   <?php echo ($_POST['turnierklasse'] == 1 ? ' selected="selected"' : ''); ?>
   >Aktive C mit QTTR von 1100 bis 1450 - Turniertag 2 - Sonntag 11. September 2016</option>
   <option value="2" class="<?php echo $sunfull_bklasse; ?>"
   <?php echo ($_POST['turnierklasse'] == 2 ? ' selected="selected"' : ''); ?>
   >Aktive B mit QTTR von 1400 bis 1600 - Turniertag 2 - Sonntag 11. September 2016</option>
   <option value="3" class="<?php echo $sunfull_aklasse; ?>"
   <?php echo ($_POST['turnierklasse'] == 3 ? ' selected="selected"' : ''); ?>
   >Aktive A mit QTTR von 1550 bis 3000 - Turniertag 2 - Sonntag 11. September 2016</option>
   </select><?php
    echo $frm_error['turnierklasse'];
?>
</td></tr>
<?php		
	  if (in_array('full', array($sunfull_cklasse, $sunfull_bklasse, $sunfull_aklasse))) {
?><tr><td colspan="2" class="rot" style="text-align:center;font-size:80%;">Hinweis: eine oder mehrere Turnierklassen sind derzeit belegt, Anmeldung für die gewünschte Turnierklasse ist dennoch unter Vorbehalt möglich!</td></tr><?php
    }
?>
<tr><td colspan="2">&nbsp;&nbsp;&nbsp;&nbsp;<input name="turnierklasse_ex" type="checkbox" id="turnierklasse_ex" value="1"<?php
    echo (intval($_POST['turnierklasse_ex']) ? ' checked="checked"' : '');
?>/> <label for="turnierklasse_ex">Ich habe mich freiwillig eine Klasse höher gemeldet</label></td></tr>
<tr>
    <td><label for="email">E-Mail*:</label></td>
    <td><input name="email" type="text" id="email" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['email'] . '"/>' . $frm_error['email']);
?></td>
</tr>
<tr>
    <td><label for="email_alt">E-Mail 2 (optional):</label></td>
    <td><input name="email_alt" type="text" id="email_alt" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['email_alt'] . '"/>' . $frm_error['email_alt']);
?></td>
</tr>
<tr>
    <td><label for="geburtsjahr">Geburtsjahr:</label></td>
    <td><input name="geburtsjahr" type="text" id="geburtsjahr" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['geburtsjahr'] . '"/>' . $frm_error['geburtsjahr']);
?></td>
</tr>
<tr>
    <td><label for="verein">Verein:</label></td>
    <td><input name="verein" type="text" id="verein" size="70" maxlength="50" class="eingabe" value="<?php
    echo ($_POST['verein'] . '"/>' . $frm_error['verein']);
?></td>
</tr>
<tr>
    <td valign="top"><label for="email">Anmerkung:</label></td>
    <td><textarea name="eintrag" cols="65" rows="7" id="eintrag" class="eingabe"><?php
    echo ($_POST['eintrag']);
?></textarea></td>
</tr>
</table><p><input type="submit" value="Anmeldung abschließen"/></form></p><?php
}
?>
               
                
                <div class="clear"></div>
   
            </div>
            <!-- Ende Linker Inhalt -->

23.07.2016 17:12

12 Jörg Kruse

Siehst du nur noch ein weiße Seite ohne Quelltext? das könnte ein Fatal Error sein, der nicht mehr ausgegeben werden kann (ggf. aber im Errorlog des Webservers zu finden ist)

Ansonsten ändert das if Konstrukt nichts im eigenlichen Ablauf und auch nicht den Inhalt von $show_form was das Anzeigen des Formulars steuert.

So schaut die grobe Struktur ja momentan aus:

/* ... */

if (!$show_form) { //sende anfrage / eintragen
    /* ... */

    switch ($_POST['turnierklasse']) {
        /* ... */
    }
    if ($_POST['ttr'] >= $min_ttr && $_POST['ttr'] <= $max_ttr) {
        // OK
    } else {
        // Fehlermeldung
        echo 'Deine TTR Punkte sind außerhalb des ausgewählten Wettbewerbes';
    }

    if (mysqli_fetch_object(...)) {
        /* ... */
    } else { //eintragen
        /* ... */
    }
}

if ($show_form) { //zeige Formular
    /* ... */
}

So bewirkt das if Konstrukt, dass zwar die Fehlermeldung ausgegeben wird - die Anmeldung dann aber dennoch erfolgt!

Du musst wie gesagt den (markierten) Anmelde-Code dorthin verschieben wo jetzt das "// OK" steht:

/* ... */

if (!$show_form) { //sende anfrage / eintragen
    /* ... */

    switch ($_POST['turnierklasse']) {
        /* ... */
    }
    if ($_POST['ttr'] >= $min_ttr && $_POST['ttr'] <= $max_ttr) {
        // OK
        if (mysqli_fetch_object(...)) {
            /* ... */
        } else { //eintragen
            /* ... */
        }
    } else {
        // Fehlermeldung
        echo 'Deine TTR Punkte sind außerhalb des ausgewählten Wettbewerbes';
    }
}

if ($show_form) { //zeige Formular
    /* ... */
}

Dann erfolgt die Anmeldung nur dann, wenn der TTR im gültigen Bereich liegt

23.07.2016 17:54 | geändert: 23.07.2016 17:58

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]