Generierte Code speichern

CreativPur

Erfahrenes Mitglied
Hi,
ich habe immer noch ein Problem mit dem Speichern von (Massen)-Codes.

Ich generiere zuerst eine Anzahl von Code..

PHP:
function generateCode($laenge=10) {
$zeichen = "0123456789";
$text="MC";
mt_srand ((double) microtime()*100000000000);
for ($i=0; $i<$laenge; $i++) {
$text .= $zeichen{mt_rand(0,strlen($zeichen))};
$gutschein_code2 = $text;
}
return $text;
}

Der Teil des Formulars...

HTML:
<form action="" method="POST">
  <div class="col-lg-6">
    <div class="row">
      <div class="col-lg-3">
        <label>Anzahl</label>
          <input type="text" class="form-control"        name="gutschein_code2">
       </div>  
       <div class="col-lg-3" style="margin-top:30px;">  
         <button type='submit' class='btn btn-success'>Code generieren</button>
       </div>
     </div>
   </div> 
</form>

Das funktioniert auch soweit. Bis auf das, dass einige nicht 10-stellig sind, sondern nur 8-9

Nun möchte ich die Ausgabe ind meine MySql Datenbank speichern..

Dazu das Formular..

PHP:
<div class="col-lg-6">
  <form action="?massen_code_speichern" method="post">
    <label>Für welche Einrichtung</label>
    <br />
    <input type="text" class="form-control" name="gutschein_code_einrichtung[]">
    <hr />
    <?php  
      $gutschein_code2 = $_POST['gutschein_code2'];                  
      for( $i = 1; $i <= $gutschein_code2; $i++ ) {
      printf( "<input type='text' class='form-control' name='gutschein_code2[%s]' value='%s'><br />",
      $i, generateCode( ) );
      }
    ?>  
    <button type="submit" class="btn btn-info">Speichern</button>
  </form>
</div>

Das Insert..

PHP:
if(isset($_GET['massen_code_speichern'])) {
     $error = false;
     for ($i = 0; $i < count($_POST['gutschein_code2']); $i++) {
          $gutschein_code2 = $_POST['gutschein_code2'][$i];
          $gutschein_code_einrichtung = $_POST['gutschein_code_einrichtung'][$i];
          $statement = $pdo->prepare("INSERT INTO bewerbungsgutscheincode (gutschein_code2, gutschein_code_einrichtung) VALUES (:gutschein_code2, :gutschein_code_einrichtung)");
          $statement->execute(array('gutschein_code2' => $gutschein_code2, 'gutschein_code_einrichtung' => $gutschein_code_einrichtung));
      }
    }

Mein Problem..
Es wird immer ein Code weniger als Eingegeben abgespeichert, und auf der Seite werden nach dem Klick auf Submit plötzlich unzählige Code ausgegeben..

Worin liegt das Problem ?
 
Ich habe es jetzt vereinfacht umgesetzt. Ohne Schnick Schnack ...

PHP:
if(isset($_GET['massen_code_speichern'])) {
     $error = false;
     for ($i = 0; $i < count($_POST['code']); $i++) {
          $code = $_POST['code'][$i];
          $statement = $pdo->prepare("INSERT INTO bewerbungsgutscheincode (code) VALUES (:code)");
          $statement->execute(array('code' => $code));
      }
    }



function generateCode($laenge=10) {
$zeichen = "0123456789";
$text="MC";
mt_srand ((double) microtime()*100000000000);
for ($i=0; $i<$laenge; $i++) {
$text .= $zeichen{mt_rand(0,strlen($zeichen))};
$anzahl_codes = $text;
}
return $text;
}

HTML:
<form action="" method="POST">
        <div class="col-lg-6">
            <div class="row">
                <div class="col-lg-3">
                    <label>Anzahl</label>
                    <input type="text" class="form-control" name="anzahl_codes">
                </div>   
                <div class="col-lg-3" style="margin-top:30px;">   
                    <button type='submit' class='btn btn-success'>Code generieren</button>
                </div>
            </div>   
            </form>
            <hr />
            <div class="col-lg-6">
                <form action="?massen_code_speichern" method="post">
                    <?php
                    $anzahl_codes = $_POST['anzahl_codes'];                   
                    for( $i = 1; $i <= $anzahl_codes; $i++ ) { 
                    printf( "<input type='text' class='form-control' name='code%s' value='%s'><br />",
                    $i, generateCode( ) );
                    }
                    ?>
            </div>
        </div>
        <div class="col-lg-6">
                    <button type="submit" class="btn btn-info">Speichern</button> &nbsp;&nbsp;<a href="BW-Code-Erstellen.php"><button type="button" class="btn btn-danger">Löschen</button></a>
              </form>
</div>

Diese Ausführung Gibt die ausgewählten Code aus, allerdings auch wieder anstatt 10-stellig nur 7-9 stellig. Damit kann ich auch leben, aber..
Ich bekomme es nicht gebacken, die Codes zu speichern.

Tabellenname: bewerbungsgutscheincode
Spalte: code
 
Durch die Änderung
PHP:
printf( '<input type="text" class="form-control" name="code[%s]" value="%s"><br />',
habe ich es zumindest hinbekommen, dass die Code gespeichert werden.

Jetzt habe ich noch zwei weitere Inputfelder hinzugefügt und schon wird wieder nichts gespeichert..
PHP:
<Form action="?massen_code_speichern" method="POST">
                    <?php
                        $anzahl_codes = $_POST["anzahl_codes"];                   
                        for( $i = 1; $i <= $anzahl_codes; $i++ ) { 
                        printf( '<input type="text" class="form-control" name="code[%s]" value="%s"><br />',
                        $i, generateCode( ));
                          }
                    ?>
                   
                    <label>Für welche Einrichtung ?</label>    
                    <input type="text" class="form-control" name="gutschein_code_einrichtung[]">
                    <br />
                    <label>Ort ?</label>
                    <input type="text" class="form-control" name="gutschein_code_ort[]">
                       <button type="submit" class="btn btn-info">Speichern</button>
                </form>
und das Insert..
PHP:
if(isset($_GET['massen_code_speichern'])) {
$error = false;
for ($i = 0; $i < count($_POST['code']); $i++) {
$code = $_POST['code'][$i];
$gutschein_code_einrichtung = $_POST['gutschein_code_einrichtung'][$i];
$gutschein_code_ort = $_POST['gutschein_code_ort'][$i];
$statement = $pdo->prepare("INSERT INTO bewerbungsgutscheincode (code, gutschein_code_einrichtung, gutschein_code_ort) VALUES (:code, :gutschein_code_einrichtung, :gutschein_code_ort)");
$statement->execute(array('code' => $code, 'gutschein_code_einrichtung' => $gutschein_code_einrichtung, 'gutschein_code_ort' => $gutschein_code_ort));
    }
}

WO liegt der FEHLER ?
 
Ich bin nicht so der PHP-Experte, aber weil dir sonst niemand antwortet, versuche ich es mal:
Der HTML-Inspektor und vernünftiges Einrücken bringen es an den Tag: Offenbar waren die Divs falsch geschachtelt, so das der HTML-Inspektor (Opera) die beiden Formulare verschachtelt und nicht hinter einander anzeigte. Außerdem waren bei mir alle Zufallswerte gleich; dies konnte ich beheben, indem ich die Initialisierung für die Zufallszahlen nur einmal außerhalb der Schleife gemacht habe. Dies ist mein Ergebnis. Speichern habe ich mangels Datenbank nicht getestet.
Code:
    <form action="" method="POST">
        <div class="col-lg-6">
            <div class="row">
                <div class="col-lg-3">
                    <label>Anzahl</label>
                    <input type="text" class="form-control" name="anzahl_codes">
                </div>
                <div class="col-lg-3" style="margin-top:30px;">
                    <button type='submit' class='btn btn-success'>Code generieren</button>
                </div>
            </div>
        </div>
    </form>
    <hr />
    <div class="col-lg-6">
        <form action="?massen_code_speichern" method="post">
<?php
function generateCode($laenge = 10)
{
    $zeichen = "0123456789";
    $text = "MC";
    for ($i = 0; $i < $laenge; $i++) {
        $text .= $zeichen{mt_rand(0, strlen($zeichen) - 1)};
        $anzahl_codes = $text;
    }
    return $text;
}
$anzahl_codes = $_POST['anzahl_codes'];
mt_srand((integer) microtime() * 100000000000);
for ($i = 1; $i <= $anzahl_codes; $i++) {
    printf("<input type='text' class='form-control' name='code%s' value='%s'><br />",
        $i, generateCode());
}
?>
            <button type="submit" class="btn btn-info">Speichern</button> &nbsp;&nbsp;<a href="BW-Code-Erstellen.php"><button type="button" class="btn btn-danger">Löschen</button></a>
        </form>
    </div>
 
PS: Beim Generieren der Codes erzeugst Du Namen mit 1 ... $anzahl, beim Speichern wertest Du jedoch 0 ... ($anzahl - 1) aus. Eigentlich würde ich erwarten, dass dies zu einer Fehleranzeige führt.
 
Guten Morgen Sempervivum,
vielen Dank für Deine aufopfernde Hilfestellung.
Leider funktioniert es immer noch nicht.
Ich habe jetzt alles nur in einen DIV-Container gepackt.
PHP:
<div class="container" style="margin-bottom:100px;">
<h1>Bewerbungs-Code erstellen</h1>
<hr />
<form action="" method="POST">
<label>Anzahl</label>
<input type="text" class="form-control" name="anzahl_codes">
<button type='submit' class='btn btn-success'>Code generieren</button>
</form>
<form action="?massen_code_speichern" method="post">
<input type="text" class="form-control" name="gutschein_code_einrichtung[]">
<hr />
<?php
function generateCode($laenge = 10)
{
$zeichen = "0123456789";
$text = "";
for ($i = 1; $i < $laenge; $i++) {
$text .= $zeichen{mt_rand(0, strlen($zeichen))};
$anzahl_codes = $text;
}
return $text;
}
$anzahl_codes = $_POST['anzahl_codes'];
mt_srand((integer) microtime() * 100000000000);
for ($i = 1; $i <= $anzahl_codes; $i++) {
printf("<input type='text' class='form-control' name='code[%s]' value='%s'><br />",
$i, generateCode());
}
?>
<button type="submit" class="btn btn-info">Speichern</button>
<a href="BW-Code-Erstellen.php"><button type="button" class="btn btn-danger">Löschen</button></a>
</form>
</div>

Das Insert
PHP:
if(isset($_GET['massen_code_speichern'])) {
$error = false;
for ($i = 1; $i < count($_POST['code']); $i++) {
$gutschein_code_einrichtung = $_POST['gutschein_code_einrichtung'][$i];
$code = $_POST['code'][$i];
$statement = $pdo->prepare("INSERT INTO bewerbungsgutscheincode (code, gutschein_code_einrichtung) VALUES (:code, :gutschein_code_einrichtung)");
$statement->execute(array('code' => $code, 'gutschein_code_einrichtung' => $gutschein_code_einrichtung));
    }
}

Normalerweise ist es so richtig. Denke ich mal..
Die Code werden auch richtig ausgegeben. Gebe ich 3 Code ein, werden auch 3 Code ausgegeben.. Soweit so gut..
Lasse ich das zusätzliche Inputfeld
HTML:
<input type="text" class="form-control" name="gutschein_code_einrichtung[]">
insgesamt raus, auch logischerweise im Insert
PHP:
if(isset($_GET['massen_code_speichern'])) {
$error = false;
for ($i = 1; $i < count($_POST['code']); $i++) {
$code = $_POST['code'][$i];
$statement = $pdo->prepare("INSERT INTO bewerbungsgutscheincode (code) VALUES (:code)");
$statement->execute(array('code' => $code));
    }
}
werden mir nur 2 Code von 3 Code gespeichert.

Ich muss aber ein weiteres Inputfeld mit speichern !

Lasse ich beim
HTML:
<input type="text" class="form-control" name="gutschein_code_einrichtung[]">
die [] weg, was meiner Meinung nicht sein darf, werden auch nur 2 Code abgespeichert, und das Feld "gutschein_code_einrichtung" bekommt nur jeweils einen Buchstabe..

Ich beschäftige mich jetzt schon 4 Tage mit dem Problem. Ich bekomme es einfach nicht hin..

 
Code:
for ($i = 1; $i < count($_POST['code']); $i++)
werden mir nur 2 Code von 3 Code gespeichert.
Das liegt ganz einfach daran, dass Du nur den Startwert angepasst hast, aber nicht das Endekriterium. So sollte es funktionieren:
Code:
for ($i = 1; $i <= count($_POST['code']); $i++) {
 
OK..
Das mit dem Speichern der tatsächlich eingegebenen Anzahl von Code funktioniert schon mal.. Vielen Dank..
Leider darf ich kein weiteres Inputfeld hinzufügen. <input type="text" class="form-control" name="gutschein_code_einrichtung[]"> Dann streikt das System wieder.

Und das ist mir wirklich jetzt ein Rätsel ..
 
Ich habe es jetzt teilweise gelöst...
PHP:
<div class="container" style="margin-bottom:100px;">
<h1>Bewerbungs-Code erstellen</h1>
<hr />
<form action="" method="POST">
<label>Name der Einrichtung/Schule</label>
<br />
<input type="text" class="form-control" name="gutschein_code_einrichtung">
<br />
<label>Ort der Einrichtung/Schule</label>
<br />
<input type="text" class="form-control" name="gutschein_code_ort">
<br />
<label>Anzahl der Code</label>
<br />
<input type="text" class="form-control" name="anzahl_codes">
<hr />
<button type='submit' class='btn btn-success'>Code generieren</button>
</form>
<form action="?massen_code_speichern" method="post">
<hr />
<?php
function generateCode($laenge = 14)
{
$zeichen = "0123456789";
$text = "MC";
for ($i = 1; $i < $laenge; $i++) {
$text .= $zeichen{mt_rand(0, strlen($zeichen))};
$anzahl_codes = $text;
}
return $text;
}
$gutschein_code_einrichtung = $_POST['gutschein_code_einrichtung'];
$gutschein_code_ort = $_POST['gutschein_code_ort'];
$anzahl_codes = $_POST['anzahl_codes'];
mt_srand((integer) microtime() * 100000000000);
for ($i = 1; $i <= $anzahl_codes; $i++) {
printf("<input type='text' class='form-control' name='code[%s]' value='%s'><input type='text' class='form-control' name='gutschein_code_einrichtung[]' value='$gutschein_code_einrichtung'><input type='text' class='form-control' name='gutschein_code_ort[]' value='$gutschein_code_ort'><br />",
$i, generateCode());

}
?>
<button type="submit" class="btn btn-info">Speichern</button>
<a href="BW-Code-Erstellen.php"><button type="button" class="btn btn-danger">Löschen</button></a>
</form>
</div>

Insert
PHP:
if(isset($_GET['massen_code_speichern'])) {
$error = false;
for ($i = 1; $i <= count($_POST['code']); $i++) {
$code = $_POST['code'][$i];
$gutschein_code_einrichtung = $_POST['gutschein_code_einrichtung'][$i];
$gutschein_code_ort = $_POST['gutschein_code_ort'][$i];
$statement = $pdo->prepare("INSERT INTO bewerbungsgutscheincode (code, gutschein_code_einrichtung, gutschein_code_ort) VALUES (:code, :gutschein_code_einrichtung, :gutschein_code_ort)");
$statement->execute(array('code' => $code, 'gutschein_code_einrichtung' => $gutschein_code_einrichtung, 'gutschein_code_ort' => $gutschein_code_ort));

Jetzt wird alles gespeichert, allerdings immer einen Code weniger als eingegeben..
Ich kann damit zwar leben, aber warum das jetzt so ist, würde mich schon interessieren..
 
Wenn ich das richtig sehe, musst Du an dieser Stelle die Schleife mit 0 beginnen:
Code:
function generateCode($laenge = 14)
{
    $zeichen = "0123456789";
    $text = "MC";
    for ($i = 0; $i < $laenge; $i++) {
        $text .= $zeichen{mt_rand(0, strlen($zeichen))};
        $anzahl_codes = $text;
    }
    return $text;
}
 
Zurück