Insert mehrere Zeilen mit einer Dynamic Tabelle

CreativPur

Erfahrenes Mitglied
Hi,
ich habe eine Dynamic Tabelle, wo ich beliebig viele Eintragungen durchführen kann.
Leider scheint aber ein Konflikt mit dem Script zu geben.
Es werden zumindest keine Daten auf die Datenbank gespeichert.

Quelltext der Dynamischen Tabelle..
HTML:
<form action="?lebenslauf_werdegang" method="post">
<input type="hidden" name='userid' class="form-control" value="<?php echo $userid ?>"/>
    <div class="container">
        <div class="row clearfix">
            <div class="col-md-12 table-responsive">
                    <table class="table table-bordered table-hover table-sortable" id="tab_logic">
                        <thead>
                            <tr >
                                <th class="text-center">
                                    von
                                </th>
                                <th class="text-center">
                                    bis
                                </th>
                                <th class="text-center">
                                    Beschäftigt als..
                                </th>
                                <th class="text-center">
                                    Bei der Firma/Einrichtung
                                </th>
                                <th class="text-center">
                                    Ort
                                </th>
                                <th colspan="2" class="text-center">
                                    Bemerkung
                                </th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr id='addr0' data-id="0" class="hidden">
                                <td data-name="werdegang_von">
                                    <input type="text" name="werdegang_von" id="werdegang_von" class="form-control"/>
                                </td>
                                <td data-name="werdegang_bis">
                                    <input type="text" name="werdegang_bis" id="werdegang_bis" class="form-control"/>
                                </td>
                                <td data-name="werdegang_beschaeftigt_als">
                                    <input type="text" name="werdegang_beschaeftigt_als" id="werdegang_beschaeftigt_als" class="form-control"/>
                                </td>
                                <td data-name="werdegang_firma">
                                    <input type="text" name="werdegang_firma" id="werdegang_firma" class="form-control"/>
                                </td>
                                <td data-name="werdegang_ort">
                                    <input type="text" name="werdegang_ort" id="werdegang_ort" class="form-control"/>
                                </td>
                                <td data-name="werdegang_bemerkung">
                                    <textarea name="werdegang_bemerkung" id="werdegang_bemerkung" class="form-control"></textarea>
                                </td>
                              
                                <td data-name="del">
                                    <button nam"del0" class="btn btn-danger btn-xs glyphicon glyphicon-remove row-remove"></button>
                                </td>
                            </tr>
                        </tbody>
                    </table>
            </div>
        </div>
        <a id="add_row" class="btn btn-default pull-right btn-xs">Add Row</a>
        <button type"submit" class="btn btn-info pull-left btn-xs">speichern</button>
    </div>
</form>

Script....
Code:
<script>
$(document).ready(function() {
    $("#add_row").on("click", function() {
        // Dynamic Rows Code
        // Get max row id and set new id
        var newid = 0;
        $.each($("#tab_logic tr"), function() {
            if (parseInt($(this).data("id")) > newid) {
                newid = parseInt($(this).data("id"));
            }
        });
        newid++;
        var tr = $("<tr></tr>", {
            id: "addr"+newid,
            "data-id": newid
        });
        // loop through each td and create new elements with name of newid
        $.each($("#tab_logic tbody tr:nth(0) td"), function() {
            var cur_td = $(this);
            var children = cur_td.children();
            // add new td and element if it has a nane
            if ($(this).data("name") != undefined) {
                var td = $("<td></td>", {
                    "data-name": $(cur_td).data("name")
                });
                var c = $(cur_td).find($(children[0]).prop('tagName')).clone().val("");
                c.attr("name", $(cur_td).data("name") + newid);
                c.appendTo($(td));
                td.appendTo($(tr));
            } else {
                var td = $("<td></td>", {
                    'text': $('#tab_logic tr').length
                }).appendTo($(tr));
            }
        });
        // add the new row
        $(tr).appendTo($('#tab_logic'));
        $(tr).find("td button.row-remove").on("click", function() {
             $(this).closest("tr").remove();
        });
});
   // Sortable Code
    var fixHelperModified = function(e, tr) {
        var $originals = tr.children();
        var $helper = tr.clone();
        $helper.children().each(function(index) {
            $(this).width($originals.eq(index).width())
        });
        return $helper;
    };
    $(".table-sortable tbody").sortable({
        helper: fixHelperModified    
    }).disableSelection();
   $(".table-sortable thead").disableSelection();
   $("#add_row").trigger("click");
});
</script>

Zu guter Letzt mein Insert...
PHP:
<?php
include("../system/inc/intern.inc.php");
include("../system/inc/config.inc.php");
include("../system/head.php");
session_start();
$showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll
$userid = 115;
function konv_date1($werdegang_von)
{
    $jahr = substr($werdegang_von,6,4);
    $mon  = substr($werdegang_von,3,2);
    $tag  = substr($werdegang_von,0,2);
    $datneu = $jahr.'-'.$mon.'-'.$tag;
return $datneu;
}
function konv_date2($werdegang_bis)
{
    $jahr = substr($werdegang_bis,6,4);
    $mon  = substr($werdegang_bis,3,2);
    $tag  = substr($werdegang_bis,0,2);
    $datneu = $jahr.'-'.$mon.'-'.$tag;
return $datneu;
}
    if(isset($_GET['lebenslauf_werdegang'])) {
     $error = false;
     $userid = $_POST['userid'];
     $werdegang_von = mysql_escape_string(konv_date1($_POST['werdegang_von']));
     $werdegang_bis = mysql_escape_string(konv_date2($_POST['werdegang_bis']));
     $werdegang_beschaeftigt_als = $_POST['werdegang_beschaeftigt_als'];
     $werdegang_firma = $_POST['werdegang_firma'];
     $werdegang_ort = $_POST['werdegang_ort'];
     $werdegang_bemerkung = $_POST['werdegang_bemerkung'];
$statement = $pdo->prepare("INSERT INTO users_lebenslauf_werdegang (userid,werdegang_von,werdegang_bis,werdegang_beschaeftigt_als,werdegang_firma,werdegang_ort,werdegang_bemerkung) VALUES (:userid,:werdegang_von,:werdegang_bis,:werdegang_beschaeftigt_als,:werdegang_firma,:werdegang_ort,:werdegang_bemerkung)");
$statement->execute(array('userid' => $userid, 'werdegang_von' => $werdegang_von, 'werdegang_bis' => $werdegang_bis, 'werdegang_beschaeftigt_als' => $werdegang_beschaeftigt_als, 'werdegang_firma' => $werdegang_firma, 'werdegang_ort' => $werdegang_ort, 'werdegang_bemerkung' => $werdegang_bemerkung));
    }
?>
Ich sitze schon seit Tagen an diesem Problem und hoffe, hier einen gnädigen Engel zu finden, der mir helfen kann..
 
Ich bin jetzt nicht so tief eingestiegen in diesen umfangreichen Code, aber die Information, dass Du Formularelemente als Array übertragen kannst, indem Du an den Namen ein Klammernpaar anhängst, sollte dir weiter helfen, z. B.:
Code:
<input type="text" name="werdegang_ort[]" id="werdegang_ort" class="form-control"/>
BTW: Wenn Du dynamisch mehrere Zeilen anlegst, gibt es Probleme mit der ID, denn die muss dokumentweit eindeutig sein.
 
Ok..

Ich habe die ID´s entfernt, da ich diese nur aus Verzweiflung hinzu getan habe.
Ich habe die doppelten Klammern gesetzt, aber jetzt werden immer noch nur eine Zeile abgespeichert und diese findet in den Feldern nur den Eintrag "Array"..
Muss ich Insert-Script nicht auch eine Änderung vornehmen ?
 
Muss ich Insert-Script nicht auch eine Änderung vornehmen ?
Selbstverständlich, die Klammern bewirken, dass die Parameter jeweils als Array übergeben werden. Du musst sie entspr. in einer Schleife auswerten, etwa so:
Code:
    if(isset($_GET['lebenslauf_werdegang'])) {
     $error = false;
     for ($i = 0; $i < count($_POST['userid']); $i++) {
          $userid = $_POST['userid'][$i];
          $werdegang_von = mysql_escape_string(konv_date1($_POST['werdegang_von'][$i]));
          $werdegang_bis = mysql_escape_string(konv_date2($_POST['werdegang_bis'][$i]));
          $werdegang_beschaeftigt_als = $_POST['werdegang_beschaeftigt_als'][$i];
          $werdegang_firma = $_POST['werdegang_firma'][$i];
          $werdegang_ort = $_POST['werdegang_ort'][$i];
          $werdegang_bemerkung = $_POST['werdegang_bemerkung'][$i];
          $statement = $pdo->prepare("INSERT INTO users_lebenslauf_werdegang (userid,werdegang_von,werdegang_bis,werdegang_beschaeftigt_als,werdegang_firma,werdegang_ort,werdegang_bemerkung) VALUES (:userid,:werdegang_von,:werdegang_bis,:werdegang_beschaeftigt_als,:werdegang_firma,:werdegang_ort,:werdegang_bemerkung)");
          $statement->execute(array('userid' => $userid, 'werdegang_von' => $werdegang_von, 'werdegang_bis' => $werdegang_bis, 'werdegang_beschaeftigt_als' => $werdegang_beschaeftigt_als, 'werdegang_firma' => $werdegang_firma, 'werdegang_ort' => $werdegang_ort, 'werdegang_bemerkung' => $werdegang_bemerkung));
      }
    }
 
Zuletzt bearbeitet:
Vielen Dank für die schnelle Antwort..
Leider wird nur der erste Datensatz gespeichert..
Kann der Fehler jetzt noch am Script von der Dynamic-Tabelle liegen ?
 
Leider hast Du deine Änderungen nicht gepostet, aber ich vermute mal, Du hast nur das HTML geändert und nicht das Javascript für das Anlegen von neuen Zeilen?
Ich hätte mir wohl doch deinen Code etwas genauer ansehen sollen, denn Du hattest schon die IDs und die Namen mit Indizes versehen.
Wenn ich das richtig sehe, kannst Du das Hinzufügen von Zeilen viel einfacher haben: Einfach die erste Zeile klonen und am Ende anfügen, denn wenn Du die Namen der Inputs als Array definierst, können sie in allen Zeilen gleich sein:
Code:
        $(document).ready(function () {
            $("#add_row").on("click", function () {
                // Dynamic Rows Code
                // Get last row id and set new id
                var lastid = $("#tab_logic").data("last-id");
                lastid++;
                $("#tab_logic").data("last-id", lastid);
                var newtr = $("#tab_logic tbody tr").eq(0).clone();
                newtr.attr("id", "addr" + lastid);
                // add the new row
                $("#tab_logic tbody").append(newtr);
                newtr.find("button.row-remove").on("click", function () {
                    $(this).closest("tr").remove();
                });
            });
            // Sortable Code
            // hier der Code fuer das Sortabele
            $("#add_row").trigger("click");
        });
HTML:
    <form action="?lebenslauf_werdegang" method="post">
        <input type="hidden" name='userid' class="form-control" value="<?php echo $userid ?>" />
        <div class="container">
            <div class="row clearfix">
                <div class="col-md-12 table-responsive">
                    <table class="table table-bordered table-hover table-sortable" id="tab_logic"
                           data-last-id="0">
                        <thead>
                            <tr>
                                <th class="text-center">
                                    von
                                </th>
                                <th class="text-center">
                                    bis
                                </th>
                                <th class="text-center">
                                    Beschäftigt als..
                                </th>
                                <th class="text-center">
                                    Bei der Firma/Einrichtung
                                </th>
                                <th class="text-center">
                                    Ort
                                </th>
                                <th colspan="2" class="text-center">
                                    Bemerkung
                                </th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr id='addr0' data-id="0" class="hidden">
                                <td data-name="werdegang_von">
                                    <input type="text" name="werdegang_von[]" class="form-control" />
                                </td>
                                <td data-name="werdegang_bis">
                                    <input type="text" name="werdegang_bis[]" id="werdegang_bis" class="form-control" />
                                </td>
                                <td data-name="werdegang_beschaeftigt_als[]">
                                    <input type="text" name="werdegang_beschaeftigt_als" class="form-control" />
                                </td>
                                <td data-name="werdegang_firma">
                                    <input type="text" name="werdegang_firma[]" class="form-control" />
                                </td>
                                <td data-name="werdegang_ort">
                                    <input type="text" name="werdegang_ort[]" class="form-control" />
                                </td>
                                <td data-name="werdegang_bemerkung">
                                    <textarea name="werdegang_bemerkung[]" class="form-control"></textarea>
                                </td>

                                <td data-name="del">
                                    <button nam"del0" class="btn btn-danger btn-xs glyphicon glyphicon-remove row-remove"></button>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
            <a id="add_row" class="btn btn-default pull-right btn-xs">Add Row</a>
            <button type"submit" class="btn btn-info pull-left btn-xs">speichern</button>
        </div>
    </form>
So haben alle Inputs die gleichen Namen und ich erwarte, dass dann das PHP, das ich gepostet habe, funktionieren wird.
 
Ich habe es jetzt so übernommen..
HTML:
<form action="?lebenslauf_werdegang" method="post">
        <input type="hidden" name='userid' class="form-control" value="<?php echo $userid ?>" />
        <div class="container">
            <div class="row clearfix">
                <div class="col-md-12 table-responsive">
                    <table class="table table-bordered table-hover table-sortable" id="tab_logic"
                          data-last-id="0">
                        <thead>
                            <tr>
                                <th class="text-center">
                                    von
                                </th>
                                <th class="text-center">
                                    bis
                                </th>
                                <th class="text-center">
                                    Beschäftigt als..
                                </th>
                                <th class="text-center">
                                    Bei der Firma/Einrichtung
                                </th>
                                <th class="text-center">
                                    Ort
                                </th>
                                <th colspan="2" class="text-center">
                                    Bemerkung
                                </th>
                            </tr>
                        </thead>
                        <tbody>
                            <tr id='addr0' data-id="0" class="">
                                <td data-name="werdegang_von">
                                    <input type="text" name="werdegang_von[]" class="form-control" />
                                </td>
                                <td data-name="werdegang_bis">
                                    <input type="text" name="werdegang_bis[]" id="werdegang_bis" class="form-control" />
                                </td>
                                <td data-name="werdegang_beschaeftigt_als[]">
                                    <input type="text" name="werdegang_beschaeftigt_als" class="form-control" />
                                </td>
                                <td data-name="werdegang_firma">
                                    <input type="text" name="werdegang_firma[]" class="form-control" />
                                </td>
                                <td data-name="werdegang_ort">
                                    <input type="text" name="werdegang_ort[]" class="form-control" />
                                </td>
                                <td data-name="werdegang_bemerkung">
                                    <textarea name="werdegang_bemerkung[]" class="form-control"></textarea>
                                </td>
                                <td data-name="del">
                                    <button nam"del0" class="btn btn-danger btn-xs glyphicon glyphicon-remove row-remove"></button>
                                </td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
            <a id="add_row" class="btn btn-default pull-right btn-xs">Add Row</a>
            <button type"submit" class="btn btn-info pull-left btn-xs">speichern</button>
        </div>
    </form>

Code:
$(document).ready(function () {
     $("#add_row").on("click", function () {
     // Dynamic Rows Code
     // Get last row id and set new id
     var lastid = $("#tab_logic").data("last-id");
     lastid++;
     $("#tab_logic").data("last-id", lastid);
     var newtr = $("#tab_logic tbody tr").eq(0).clone();
     newtr.attr("id", "addr" + lastid);
     // add the new row
     $("#tab_logic tbody").append(newtr);
     newtr.find("button.row-remove").on("click", function () {
     $(this).closest("tr").remove();
     });
  });
   // Sortable Code
    var fixHelperModified = function(e, tr) {
        var $originals = tr.children();
        var $helper = tr.clone();
        $helper.children().each(function(index) {
            $(this).width($originals.eq(index).width())
        });
        return $helper;
    };
    $(".table-sortable tbody").sortable({
        helper: fixHelperModified  
    }).disableSelection();
   $(".table-sortable thead").disableSelection();
   $("#add_row").trigger("click");

});

Aber leider wird wieder nur die erste Zeile abgespeichert und merkwürdigerweise unter "werdegang_beschaeftigt_als" nur der erste Buchstabe gespeichert..

Zur Sicherheit nochmals das ISERT..
PHP:
$showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll

$userid = 115;

function konv_date1($werdegang_von)
{
    $jahr = substr($werdegang_von,6,4);
    $mon  = substr($werdegang_von,3,2);
    $tag  = substr($werdegang_von,0,2);
    $datneu = $jahr.'-'.$mon.'-'.$tag;
return $datneu;
}

function konv_date2($werdegang_bis)
{
    $jahr = substr($werdegang_bis,6,4);
    $mon  = substr($werdegang_bis,3,2);
    $tag  = substr($werdegang_bis,0,2);
    $datneu = $jahr.'-'.$mon.'-'.$tag;
return $datneu;
}
    
    if(isset($_GET['lebenslauf_werdegang'])) {
     $error = false;
     for ($i = 0; $i < count($_POST['userid']); $i++) {
     $werdegang_von = mysql_escape_string(konv_date1($_POST['werdegang_von'][$i]));
     $werdegang_bis = mysql_escape_string(konv_date2($_POST['werdegang_bis'][$i]));
     $werdegang_beschaeftigt_als = $_POST['werdegang_beschaeftigt_als'][$i];
     $werdegang_firma = $_POST['werdegang_firma'][$i];
     $werdegang_ort = $_POST['werdegang_ort'][$i];
     $werdegang_bemerkung = $_POST['werdegang_bemerkung'][$i];

$statement = $pdo->prepare("INSERT INTO users_lebenslauf_werdegang (userid,werdegang_von,werdegang_bis,werdegang_beschaeftigt_als,werdegang_firma,werdegang_ort,werdegang_bemerkung) VALUES (:userid,:werdegang_von,:werdegang_bis,:werdegang_beschaeftigt_als,:werdegang_firma,:werdegang_ort,:werdegang_bemerkung)");

$statement->execute(array('userid' => $userid, 'werdegang_von' => $werdegang_von, 'werdegang_bis' => $werdegang_bis, 'werdegang_beschaeftigt_als' => $werdegang_beschaeftigt_als, 'werdegang_firma' => $werdegang_firma, 'werdegang_ort' => $werdegang_ort, 'werdegang_bemerkung' => $werdegang_bemerkung));
    }
    }
 
Da ist mir schon Mal ein Fehler unterlaufen. Richtig ist:
HTML:
                                <td data-name="werdegang_beschaeftigt_als">
                                    <input type="text" name="werdegang_beschaeftigt_als[]" class="form-control" />
                                </td>
Die Klammern gehören an das name-Attribut des input.
 
Und noch ein Fehler: Used-ID ist kein Array sondern ein einfaches input. So sollte das PHP richtig sein:
PHP:
    if(isset($_GET['lebenslauf_werdegang'])) {
     $error = false;
     $userid = $_POST['userid'];
     for ($i = 0; $i < count($_POST['werdegang_von']); $i++) {
          $werdegang_von = mysql_escape_string(konv_date1($_POST['werdegang_von'][$i]));
          $werdegang_bis = mysql_escape_string(konv_date2($_POST['werdegang_bis'][$i]));
          $werdegang_beschaeftigt_als = $_POST['werdegang_beschaeftigt_als'][$i];
          $werdegang_firma = $_POST['werdegang_firma'][$i];
          $werdegang_ort = $_POST['werdegang_ort'][$i];
          $werdegang_bemerkung = $_POST['werdegang_bemerkung'][$i];
          $statement = $pdo->prepare("INSERT INTO users_lebenslauf_werdegang (userid,werdegang_von,werdegang_bis,werdegang_beschaeftigt_als,werdegang_firma,werdegang_ort,werdegang_bemerkung) VALUES (:userid,:werdegang_von,:werdegang_bis,:werdegang_beschaeftigt_als,:werdegang_firma,:werdegang_ort,:werdegang_bemerkung)");
          $statement->execute(array('userid' => $userid, 'werdegang_von' => $werdegang_von, 'werdegang_bis' => $werdegang_bis, 'werdegang_beschaeftigt_als' => $werdegang_beschaeftigt_als, 'werdegang_firma' => $werdegang_firma, 'werdegang_ort' => $werdegang_ort, 'werdegang_bemerkung' => $werdegang_bemerkung));
      }
    }
 

Neue Beiträge

Zurück