2017-05-22 20 views
0

私は数日間これに固執しています。あなたのうちの誰かが私を助けてくれると願っています。動的に追加された行をデータベースに格納する方法mysql php

通常、HTMLフォームからユーザー入力を求めるときは、$ _POST関数を呼び出してデータにアクセスできます。

このアプローチの問題は、静的な入力フィールドのセットがないことです。ユーザーが追加ボタンをクリックすると、別の入力フィールドが表示され、必要な数の入力フィールドを作成できます。

私はそれをループする必要があることを知っていますが、これを行うには経験があまりありません。

<script type="text/javascript"> 
$(document).ready(function(){ 

var counter = 2; 

$("#addButton").click(function() { 

if(counter>10){ 
     alert("Only 10 textboxes allow"); 
     return false; 
} 

var newTextBoxDiv = $(document.createElement('div')) 
    .attr("id", 'TextBoxDiv' + counter); 

newTextBoxDiv.after().html('<label>Source Name #'+ counter + ' : </label>' + 
     '<input type="text" placeholder ="Source Name" name="source_name' +   
counter + 
     '" id="textbox' + counter + '" value="" > <label>IP address from #'+ 
counter + ' : </label>' + 
     '<input type="text" placeholder="IP Address From" 
name="source_ip_from' + counter + 
     '" id="textbox' + counter + '" value="" > <label>IP address till #'+ 
counter + ' : </label>' + 
     '<input type="text" placeholder="IP Address Till" 
name="source_ip_till' + counter + 
     '" id="textbox' + counter + '" value="" >' 
    ); 


newTextBoxDiv.appendTo("#TextBoxesGroup"); 


counter++; 
}); 

$("#removeButton").click(function() { 
if(counter==2){ 
     alert("No more textbox to remove"); 
     return false; 
    } 

counter--; 

    $("#TextBoxDiv" + counter).remove(); 

}); 

$("#getButtonValue").click(function() { 

var msg = ''; 
for(i=1; i<counter; i++){ 
    msg += "\n Textbox #" + i + " : " + $('#textbox' + i).val(); 
} 
     alert(msg); 
}); 
}); 
</script> 

次のコードフォームはHTML/PHPで作成され、掲載されているところである

<form method="post" class="form-inline" action="addverkeersstroom.php"> 
<div id='TextBoxesGroup'> 
<div id="TextBoxDiv1"> 
    <label>Source Data : </label> 
    <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0"  
placeholder="Source" name="source_name"> 
    <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0"  
placeholder="APP Nummer" name="source_app"> 
    <?php 
    mysql_connect('localhost', '', ''); 
    mysql_select_db(''); 

    $sql = "SELECT * FROM zone"; 
    $result = mysql_query($sql); 

    echo "<select name='zone_1' id='zone_1' class='form-control 
ip_or_zone'>"; 
echo "<option value=''></option>"; 
while ($row = mysql_fetch_array($result)) { 

echo "<option value='". $row['idzone'] . "'>" . $row['zone_naam'] . " 
</option>"; 
    } 
echo "</select>"; 

    ?> 
    OR <input type="text" class="form-control ip_or_zone" placeholder="IP 
Address from" name="source_ip_from"> 
    <input type="text" class="form-control ip_or_zone" placeholder="IP 
Address till" name="source_ip_till"> 
    <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" 
placeholder="NAT IP" name="source_nat"> 
    <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" 
placeholder="Netmask" name="source_netmask"> 
</div> 
</div> 
<input type='button' value='+' id='addButton'> 
<input type='button' value='-' id='removeButton'> 

そして最後にではなく、少なくとも以下のコード:jQueryの/ JavaScriptで動的に行を追加し、それ以下のコードを参照してください。それをデータベースに挿入する必要があります。動的な値を送信した後

<?php 
session_start(); 

if(isset($_POST['submit'])) { 

echo $source_name = $_POST['source_name']; 
echo $source_app = $_POST['source_app']; 
echo $source_zone = $_POST['zone_1']; 
echo $source_ip_from = $_POST['source_ip_from']; 
echo $source_ip_till = $_POST['source_ip_till']; 
echo $source_nat = $_POST['source_nat']; 
echo $source_netmask = $_POST['source_netmask']; 

echo $destination = $_POST['destination']; 
echo $dest_app = $_POST['destination_app']; 
echo $dest_zone = $_POST['zone_2']; 
echo $dest_ip_from = $_POST['dest_ip_from']; 
echo $dest_ip_till = $_POST['dest_ip_till']; 
echo $dest_nat = $_POST['destination_nat']; 
echo $dest_netmask = $_POST['destination_netmask']; 

    mysql_connect('localhost', '', ''); 
    mysql_select_db(''); 

//Maak een nieuwe verkeersstroom aan in de database 
mysql_query("INSERT INTO verkeersstroom(changes_idchange, protocol, tcpudp, 
port_nr) 
VALUES('".$changeid."', '".$protocol."', '".$tcpudp."', '".$portnr."')"); 
$verkeerstroomid = mysql_insert_id(); 

//Maakt de eigenschappen van de verkeersstroom aan 
mysql_query("INSERT INTO verkeersstroom_eigenschappen(changes_idchange, 
verkeersstroom_idverkeersstroom, source_name, source_app, source_zone, 
source_ip_from, source_ip_till, source_nat, source_netmask, destination, 
destination_app, destination_zone, destination_ip_from, destination_ip_till, 
destination_nat, destination_netmask) 
VALUES('".$changeid."', '".$verkeerstroomid."', '".$source_name."', 
'".$source_app."', '".$source_zone."', '".$source_ip_from."', 
'".$source_ip_till."', '".$source_nat."', '".$source_netmask."', 
'".$destination."', '".$dest_app."', '".$dest_zone."', '".$dest_ip_from."', 
'".$dest_ip_till."', '".$dest_nat."', '".$dest_netmask."')"); 

header("Location:".""); 
} 

は次のようである:source_name2、source_ip_from2、source_ip_till2、destination2、dest_ip_from2、dest_ip_till2 加算(+)ボタンを押すことによって生成された行の量をカウントアップ。

私が前に言ったように、私は何とかこのようにクエリをループする必要があります。 dest_ip_till

のforeach SOURCE_NAME(又はsource_name2又は3,4-など)、source_ip_from、source_ip_till、宛先、dest_ip_from、

は、同じ行の3と同じ行2及びすべてと、すべてのようなテーブルに別々に挿入しますそのようにカウントアップします。

私は

答えて

0

HTMLフォームを使用して、入力を与えることを可能;-pそれは私に頭痛を与えている誰も私を助けることができると思いますが名前をフィールド:あなたは複数の入力を取得しますが、あなたが行う場合に <input type='text' name='name' value='22'>

どのくらい知りません。

また
<?php 
$count = count($_POST['name']); 
$name = $_POST['name']; 
for($i = 0; $i < $count; $i++){ 
    // do your sql stuff with: 
    $name[$i]; // this is the value of the inputfield number $i. 
} 
?> 

私はに見てアドバイスをしたい:あなたは、PHPのループは、配列を介して動作するためにあなたがシンプルに書くことができます<input name='name'>その後

<input name='name[]'>に変更することで、入力フィールドの配列を作ることができます準備されたステートメントを使用する。あなたの現在のPHPコードでは、SQLインジェクションに脆弱です。

<?php 
$sql = "INSERT INTO verkeersstroom(`changes_idchange`, `protocol`, `tcpudp`, `port_nr`) 
VALUES(?, ?, ?, ?);"; 
$stmt = mysql_connect('localhost', '', '')->prepare($sql); 
$stmt->bind_param("ssss", $changeid, $protocol, $tcpudp, $portnr); 
$stmt->execute; 
?> 

これは、より多くの一見のため、一例です:http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

+1

ありがとうございます!これは私をはっきりと助けた – Rudibwoy