簡體   English   中英

php Foreach 循環問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM