[英]php Foreach Loop issue
我有一個大表格。
此表單包含一些可由用戶復制的輸入。
因此,他們可以選擇例如有多少索賠人曾為一首歌曲工作,並為每個索賠人輸入一些字段,限制為 10 個索賠人。
表格將如下所示(我現在只顯示 3 個)
echo "<form action=\"\" id=\"submForm\" name=\"submForm\" method=\"get\">";
//1 CLAIMANT
echo "<p><span class=\"labelInput\">".(_t('_cR_name_mandatory'))." </span><input id=\"nameClaimant\" name=\"nameClaimant[]\" value=\"\" type=\"text\" class=\"required commonInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_DOB_mandatory'))." </span><input id=\"DOBClaimant\" name=\"DOBClaimant[]\" value=\"\" type=\"text\" class=\"required littleInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_company'))." </span><input id=\"companyClaimant\" name=\"companyClaimant[]\" value=\"\" type=\"text\" class=\"commonInput\"></p>";
//2 CLAIMANT
echo "<p><span class=\"labelInput\">".(_t('_cR_name_mandatory'))." </span><input id=\"nameClaimant\" name=\"nameClaimant[]\" value=\"\" type=\"text\" class=\"required commonInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_DOB_mandatory'))." </span><input id=\"DOBClaimant\" name=\"DOBClaimant[]\" value=\"\" type=\"text\" class=\"required littleInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_company'))." </span><input id=\"companyClaimant\" name=\"companyClaimant[]\" value=\"\" type=\"text\" class=\"commonInput\"></p>";
//3 CLAIMANT
echo "<p><span class=\"labelInput\">".(_t('_cR_name_mandatory'))." </span><input id=\"nameClaimant\" name=\"nameClaimant[]\" value=\"\" type=\"text\" class=\"required commonInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_DOB_mandatory'))." </span><input id=\"DOBClaimant\" name=\"DOBClaimant[]\" value=\"\" type=\"text\" class=\"required littleInput\"></p>";
echo "<p><span class=\"labelInput\">".(_t('_cR_company'))." </span><input id=\"companyClaimant\" name=\"companyClaimant[]\" value=\"\" type=\"text\" class=\"commonInput\"></p>";
echo "<input type=\"submit\" class=\"submBttnClass\" id=\"buttSubm\" name=\"buttSubm\" value=\"".(_t('_cR_submit_button'))."\">";
echo "</form>";
當用戶提交表單時,我使用 jQuery 序列化 function (我在 jQuery 1.3.2 上)
echo "<script type=\"text/javascript\">
$(document).ready(function() {
$('#submForm').validate({
submitHandler: function(form) {
var serialized = $('#submForm').serialize()
$.get('".$site['url']."modules/yobilab/copyright/classes/DO_submission.php', serialized);
//alert($('#submForm').serialize());
window.setTimeout('location.reload()', 8000);
return false;
form.submit();
}
})
問題是處理數據庫中插入的文件使用了一個 foreach(我將向您展示我的整個 foreach 以及通過序列化 function 傳遞的所有輸入:
if(!empty($_GET['nameClaimant'])){
$nameClaimant = $_GET['nameClaimant'];
$DOBClaimant = $_GET['DOBClaimant'];
$companyClaimant = mysql_real_escape_string($_GET['companyClaimant']);
$emailClaimant = $_GET['emailClaimant'];
$mainPhoneClaimant = $_GET['mainPhoneClaimant'];
$alternatePhoneClaimant = $_GET['alternatePhoneClaimant'];
$mobilePhoneClaimant = $_GET['mobilePhoneClaimant'];
$percentageClaimant = mysql_real_escape_string($_GET['percentageClaimant']);
$addressClaimant = mysql_real_escape_string($_GET['addressClaimant']);
$ZIPClaimant = $_GET['ZIPClaimant'];
$countryClaimant = $_GET['countryClaimant'];
foreach ($nameClaimant as $valueClaimant) {
$insClaim = "INSERT INTO cR_Claimants SET memberID ='".$memberID."', ParentSubmission='".$refNumb."', Name ='".mysql_real_escape_string($valueClaimant)."', DOB='".$DOBClaimant."', Company='".$companyClaimant."', Email='".$emailClaimant."', Address='".$addressClaimant."', ZIPcode ='".$ZIPClaimant."', Country='".$countryClaimant."', MainPhone='".$mainPhoneClaimant."', OtherPhone='".$alternatePhoneClaimant."', MobilePhone='".$mobilePhoneClaimant."', OwnershipPercentage='".$percentageClaimant."'";
$resultinsClaim=mysql_query($insClaim) or die("Error insert Claimants: ".mysql_error());
}
}
foreach 在數據庫中插入錯誤的東西。 它顯示Array
而不是正確的值。
我想用我的 foreach 將信息插入數據庫中。
所以對於 Claimant1 將插入其相關信息
對於 Claimant2 將插入其相關信息等。
它不工作。 我究竟做錯了什么?
我知道這有點無聊,但請幫助我。 讓我們一起玩吧。 你們都很棒 謝謝
我已經附上了數據庫中正在做的事情讓你看到
您將看到這也在數據庫中創建空字符串。
為什么這也是空值?
請幫我。
發生這種情況是因為您使用數組樣式name="key[]"
調用它的表單名稱
所以你不能放入 SQL $key
因為此時$key
是一個數組。
同樣正確的 INSERT 語法是INSERT INTO table (cols) VALUES (values)
我也認為你的表格很糟糕。 我建議你用這樣的東西 go :
CLAIMANT1
Email: <input name="claimant[0][email]" />
Name: <input name="claimant[0][name]" />
CLAIMANT2
Email: <input name="claimant[1][email]" />
Name: <input name="claimant[1][name]" />
這樣,您的所有代碼都簡化為:
foreach($_POST['caimant'] as $k=>$v) { //> PSEUDOCODE
INSERT INTO table VALUES ($v['email'],$v['name']);
}
我懷疑您的插入語句不應該使用
mysql_real_escape_string($valueClaimant)
但
mysql_real_escape_string($nameClaimant)
反而。
就像 yes123 說的,你有像 'DOBClaimant[]' 這樣指定的 'name' 字段。
這是處理此類表單的方法,其中您有多個具有相同名稱的條目。 這意味着它以數組的形式出現,這就是為什么您會得到“數組”......這就是當您嘗試打印數組而不是使用數組的值時會發生的情況。
在表單前嘗試print_r($_GET)
。 它將向您展示數組的結構,然后您可以學習如何使用它。
您需要以不同的方式執行循環,可能使用for
循環而不是 for each。
你可以做
$total = count($_GET['DOBClaimant']);
這告訴您填寫了多少 forms。 然后
for($i=0;$i<$total;$i++){
//do a for loop with $i, which we can use to refer to a place in each array
$nameClaimant = mysql_real_escape_string($_GET['nameClaimant'][$i]);
$DOBClaimant = mysql_real_escape_string($_GET['DOBClaimant'][$i]);
$companyClaimant = mysql_real_escape_string($_GET['companyClaimant'][$i]);
}
看看這是如何建立一個循環的,然后你用 [$i] 處理你在每個數組中的位置。
順便說一句,您只是 mysql_real_escape_string-ing 一個或兩個值 - 您需要對您放入 SQL 字符串的每個值執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.