2013-08-30 39 views
0

我正在使用php從文本框中獲取所有值,在循環內獲取值。循環插入僅最後的值

循環內我也有插入語句和計數。

流程如下: 我將從下拉列表中選擇值,當我從下拉列表中選擇數字時,將創建相應數量的文本框。例如:

例如: - 我從下拉列表中選擇了數字3。 所以它會創建3個文本框。

現在我將數據輸入到這3個文本框中,然後單擊提交。 當我點擊提交只有最後一個文本框的值被插入到數據庫中。

即當我選擇3和輸入數據到3文本框是隻插入第3文本框的值的3倍,而不是插入第1,第2和第3個值..

我怎樣才能解決這個問題。 。?

這裏是代碼我用..

PHP:

<?php 
    mysql_connect("localhost", "tiger", "tiger") or die(mysql_error()); 
    mysql_select_db("theaterdb") or die(mysql_error()); 
    for ($i=0; $i < $_POST["range"] ; $i++) 
    { 
    $query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname]','$_POST[language]') ") or die(mysql_error()); 
    } 
?> 

範圍是我在下拉列表中選擇一個值。

javascript代碼:

for(i = 0; i < param; i += 1) { 
     target.innerHTML +='</br>'; 
     target.innerHTML +='New Movie '+i+' '; 
     target.innerHTML += '<input type="text" name="Fname">'; 
} 

這是生成文本動態

+1

如果您不聲明常量'Fname','$ _POST [Fname]'會拋出一個錯誤。使用引號以給定字符串作爲鍵訪問該值。 '$ _POST ['Fname']'或'$ _POST [「Fname」]' –

回答

1

問題是您正在創建與以前創建的名稱相同的新輸入,php的$ _POST []會在輸入名稱獲取以防萬一這一點,你將需要使用唯一的名稱創建輸入 像

for(i = 0; i < param; i += 1) { 

     target.innerHTML +='</br>'; 
     target.innerHTML +='New Movie '+i+' '; 
     target.innerHTML += '<input type="text" name="Fname_' + i + '">'; 
} 

<?php 
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error()); 
mysql_select_db("theaterdb") or die(mysql_error()); 
for ($i=0; $i < $_POST["range"] ; $i++) 
{ 
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('" . $_POST['Fname_' . $i] . "','" . $_POST['language'] . "') ") or die(mysql_error()); 
} 
?> 

然而,這將只叉一次增加投入,否則你會再次創建identicle名稱輸入,得到角落找尋這我會建議將總計數存儲在稱爲計數的隱藏輸入<input type="hidden" value="0" name="count" />基於該計數的名稱

var count = $('input[name=count]'); 

for(i = 0+count; i < param+count; i += 1) { 

     target.innerHTML +='</br>'; 
     target.innerHTML +='New Movie '+i+' '; 
     target.innerHTML += '<input type="text" name="Fname">'; 
} 

<?php 
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error()); 
mysql_select_db("theaterdb") or die(mysql_error()); 
for ($i=0; $i < $_POST["range"] ; $i++) 
{ 
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('" . $_POST['Fname_' . $i] . "','" . $_POST['language'] . "') ") or die(mysql_error()); 
} 
?> 

我havnt測試此代碼,所以你可能需要修補一點,使其工作,但這個概念是有

1

嘗試

<?php 
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error()); 
mysql_select_db("theaterdb") or die(mysql_error()); 
for ($i=0; $i <= count($_POST["Fname"]); $i++) 
{ 
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname][$i]','$_POST[language][$i]') ") or die(mysql_error()); 
} 
?> 
+0

缺少引號@'$ _POST [Fname]' –

+0

我不知道你可以做到這一點,礦 –

1

您正在使用$ _ POST [ 「FNAME」]用於插入。因此,您應該在for語句中使用count($ _ POST [「Fname」])

1

改變你的代碼:

for(i = 0; i < param; i += 1) { 
    target.innerHTML +='</br>'; 
    target.innerHTML +='New Movie '+i+' '; 
    target.innerHTML += '<input type="text" name="Fname[]">'; 
} 

PHP自動轉換FNAME []成數組(),這樣你就可以循環通過與您的電影名稱:

<?php 
    mysql_connect("localhost", "tiger", "tiger") or die(mysql_error()); 
    mysql_select_db("theaterdb") or die(mysql_error()); 
    for ($i=0; $i < $_POST["range"] ; $i++) { 
    $query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('{$_POST[Fname][i]}','{$_POST[language]}') ") or die(mysql_error()); 
    } 
?> 
1

當你提交表單到服務器,在形式上所有輸入與他們的名字ATTRIB發送到服務器UTE。 在你的情況下,你已經指定輸入名稱爲'Fname'。因此只有一個名字爲'Fname'的輸入被髮送到服務器。所以你只能得到一個post輸入,例如$ _SERVER [「Fname」]。

只要改變你的JavaScript代碼來

for(i = 0; i < param; i += 1) { 

     target.innerHTML +='</br>'; 
     target.innerHTML +='New Movie '+i+' '; 
     target.innerHTML += '<input type="text" name="Fname[]">'; 
} 

使用FNAME [],而不是FNAME。 現在您正在發佈Fname數組。所以你將獲得$ _SERVER [「Fname」]中的數組。在這裏,您將收到陣列中的所有Fname輸入字段。所以改變你的php代碼爲

<?php 
mysql_connect("localhost", "tiger", "tiger") or die(mysql_error()); 
mysql_select_db("theaterdb") or die(mysql_error()); 
for ($i=0; $i < $_POST["range"] ; $i++) 
{ 
$query = mysql_query("INSERT INTO movie (movie_name,language) VALUES('$_POST[Fname][$i]','$_POST[language]') ") or die(mysql_error()); 
} 
?> 

這將解決你的問題。