begrenzte Anzahl für Formular senden

piano

Mitglied
Hallo,

ich versuche gerade ein Script für ein Formular zu schreiben, welches nur 5xabgeschickt werden kann. Danach tragen sich die eingegeben Feldinhalte in eine Datenbanktabelle ein.
Meine Lösung wäre,
vllt könnte man auch das eine Feld fünfmal ins Formular schreiben, so dass der Besucher die Möglichkeit hat, alles auf einmal abzuschicken.
Jedoch könnte der Besucher das Formular ja trotzdem nochmal abschicken. (Was evtl über ein Cookie zu lösen wäre, jedoch: gibt es auch eine Möglichkeit, zu überprüfen, ob die id oder eMail... schon in der Tabelle steht?)
könnte jmd. mir evtl sagen, ob es eine Funktion wie z.B. exist oder so gibt? (habe bis jetzt ab und zu mal if TABLE EXIST o.s.ä. gesehen...

Formular:
Name...
eMail...
Teilnahme mit...
Teilnahme mit...
...

--edit--
Mein Code wäre-
Codeabschnitt:
Code:
        $sql1="INSERT INTO springen(id, name, email, teilnahme) VALUES ('', '$_POST[Name]', '$_POST[eMail]', '$_POST[Teilnahme1]')";
        $sql2="INSERT INTO springen(id, name, email, teilnahme) VALUES ('', '$_POST[Name]', '$_POST[eMail]', '$_POST[Teilnahme2]')";
        $sql3="INSERT INTO springen(id, name, email, teilnahme) VALUES ('', '$_POST[Name]', '$_POST[eMail]', '$_POST[Teilnahme3]')";
        $sql4="INSERT INTO springen(id, name, email, teilnahme) VALUES ('', '$_POST[Name]', '$_POST[eMail]', '$_POST[Teilnahme4]')";
        $sql5="INSERT INTO springen(id, name, email, teilnahme) VALUES ('', '$_POST[Name]', '$_POST[eMail]', '$_POST[Teilnahme5]')";
$sql = $sql1 + $sql2 + $sql3 + $sql4 + $sql5;
        if (mysql_query($sql1) && mysql_query($sql2) && mysql_query($sql3) && mysql_query($sql4) && mysql_query($sql5))
--edit2--
mmmhhh....soweit so gut. Aber wie mache ich es, wenn jmd nur 4x "Teilnahme mit..." eingibt?
Außerdem sollten sich nur 50 Anmelden können, wie schaffe ich es, dass, wenn zB bis jetzt 48 Anmelden sind, es nur 2 neue eingetragen werden?

VlG, piano
 
Zuletzt bearbeitet:
Naja habe das ganze jetzt nicht unbedingt verstanden was du willst und versucht hast aber egal ...

Soweit ich verstanden habe, möchtest du, dass dein Formular 5 mal abgeschickt werden kann. Du könntest deinen "submit Button" immer vom namen her ändern lassen --> mit einer if-Funktion" und dann eben nach dem Fünften absenden das ganze in deine DB schreiben lassen.
PHP:
<?php
if(isset($_POST['abschicken5'])){
// hier in die DB schreiben
     echo "DB Eintrag";
}
else
{
echo "<form action='index.php' method='POST'>";
     if(isset($_POST['abschicken4'])){
     echo "form5";
     echo "<input type='submit' name='abschicken5'>";
}elseif(isset($_POST['abschicken3'])){
     echo "form4";
     echo "<input type='submit' name='abschicken4'>";
}elseif(isset($_POST['abschicken2'])){
     echo "form3";
     echo "<input type='submit' name='abschicken3'>";
}elseif(isset($_POST['abschicken1'])){
     echo "form2";
     echo "<input type='submit' name='abschicken2'>";
}else{
     echo "form1";
     echo "<input type='submit' name='abschicken1'>";
}
}
?>
 
Du könntest einen Unique Index über die Spalten "name" oder "email" packen:
SQL:
ALTER TABLE `tabelle` ADD UNIQUE KEY `email` (`email`);
(Glaube mal wieder, dass mein Syntax falsch ist :-( )

Anschließend kannst du über Insert, on duplicate Key Update einen vorhandenen Datensatz updaten. So brauchst du keine Fehlermeldung abfangen, wenn sich jemand schon eingetragen hat (Fehlermeldung und kein Insert setzt voraus, dass da ein Unique Key drüberliegt ;) ), und man hat dennoch die Möglichkeit, seine Daten zu aktualisieren.

Ich versteh jetzt nicht genau den Sinn des Formulars, aber wenn jemand maximal fünf Eingaben machen kann, und das auch noch 49 weitere so tun können - Unabhängig davon, ob sie nur 2 oder 1 oder 5 oder was auch immer Sachen eingeben, wäre eine Datenbankstrukturierung
Code:
     ID     |     Name     |     Email     |     Teilnahme  #1     |      Teilnahme #2     |     ...

sinnvoller. Leere Teilnahmen können mit NULL gefüllt werden.

Wenn jedoch insgesamt 50 Teilnahmen möglich sind auf < 50 Namen, dann könntest du vor deinem jetzigen Insert einfach schauen (Achtung, keine Unique Index Methode!):
SQL:
SELECT COUNT(`id`)
FROM `tabelle`
WHERE `name` = '$name' OR `email` = '$email';
PHP:
<?php
$result = mysql_query($querystring);
list($count) = mysql_fetch_row($result);
if ($count < 5) {
    mysql_query("INSERT INTO ...");
}

Und um die maximal 50 Datensätze zu realisieren, reicht ein einfaches
PHP:
<?php
$result = mysql_query("SELECT COUNT(`id`) FROM `table`;");
list($total) = mysql_fetch_row($result);
if ($total < 50) {
    // INSERT
} else {
   echo "Maximum erreicht";
}
 
erstmal danke.
jedoch
@-GS-Master: ich müsste den submit Button doch dann insg. 50x umbenennen, bzw. würde es nicht ein Problem geben, wenn sich gleichzeitig anmelden?

@maeTimmae:
beim 1.Code versteht ich leider nicht so ganz, was der machen soll.
2.Code: jede Teilnahme soll ja eine eigene ID bekommen, und wenn jemand alle sich z.B. 5x anmelden, können sich nur 10 insgesamt anmelden, wenn sich alle z.B. nur 1x anmelden, können sich 50 anmelden.
Das Letzte, habe ich bereits so gelöst:
Code:
  $teiln = mysql_num_rows($result);
      if ($teiln > 50) {
        echo "zu voll";}
else {die Formulardaten eintragen}
 
Okay, so verstehe ich dein Problem schon wesentlich besser...

Der Hinweis für dich: mysql_num_rows ist relativ overheadlastig. Da du die Ergebnisse später nicht mehr verwertest, total unnötig (Sinnvoller ist daher ein einmaliges Abrufen über COUNT(). MySQL an sich ist sehr, sehr schnell... Also lass auch besser so viel wie möglich über SQL laufen.

PHP:
<?php
// ... Verbindung aufsetzen, etc ...

switch (true) {
    // Prüfen, ob benötigte Angaben gesetzt sind
    default:
    case (empty($_POST['name']) OR empty($_POST['email'])):
        break;

    case (true):
        // bereits eingetragene Teilnehmerzahl ermitteln
        $result = mysql_query("SELECT COUNT(`id`) FROM `springen`;");
        list($total) = mysql_fetch_row($result);

        // Wenn Anzahl größer gleich 50, dann brich ab
        if ($total >= 50) {
            echo "Die maximale Anzahl an Teilnehmern ist erreicht!\n";
            break;
        }

        $name  = mysql_real_escape_string($_POST['name']);
        $email = mysql_real_escape_string($_POST['email']);

        // Ermittle Anzahl Einträge, die zu Name oder Email passen
        $result = mysql_query("SELECT COUNT(`id`)
                               FROM `springen`
                               WHERE `name` = '{$name}' OR `email` = {$email};");
        list($userentries) = mysql_fetch_row($result);

        // Maximal 5 Einträge pro Name / Email erreicht --> Bei Überschreitung, Abbruch
        if ($userentries >= 5) {
            echo "Maximale Anzahl an Einträgen erreicht\n";
            break;
        }

        if (mysql_query("INSERT INTO `springen` (`name`, `email`) VALUES ('{$name}', '{$email}');")) {
            echo "Eintrag erfolgreich!";
        } else {
            echo "Beim Eintragen trat ein Fehler auf!";
        }

        break;
}

// ...

Sollte deinen Ansprüchen genügen. Aus Gründen der Einfachheit, habe ich eine switch (true) verwendet, statt geschachtelter oder inkrementieller if-Anweisungen.
Zuerst wird geschaut, ob die maximale Anzahl erreicht ist, anschließend wird geschaut, ob der Nutzer sich schon 5 oder mehrmals angemeldet hat, und zum Schluss wird er eingetragen. Hoffe, das ist verständlich genug ;)
 
Zuletzt bearbeitet:
Zurück