【问题标题】:PHP emailing only populated valuesPHP 仅通过电子邮件发送填充的值
【发布时间】:2013-07-29 08:19:27
【问题描述】:

我有一个在线表格,其中列出了我孩子棒球联赛的投手信息。该表格允许输入多个投手(数量未知)。我在循环浏览结果以将它们通过电子邮件发送给我时遇到问题。

这是表格中的代码(这是针对投手 1 - 每个表格最多 10 个投手):

<tr bgcolor=#cfcfcf>
<td align=center><b>Team</td><td align=center><b>Pitcher Name</td>
<td align=center><b>Age</td><td align=center><b>Pitches</td></tr>
<tr>
<td><select name="pitcherteam1" size="1">
<option>PLEASE SELECT TEAM
<option>Team 1</option>
<option>Team 2</option>
<option>Team 3</option>
</select></td><td>
<input type=text size=50 name="pitcher1"></td>
<td><select name="pitcherage1" size="1">
<option>AGE
<option>8
<option>9
</select></td>
<td><input type="text" size=3 name="pitcherpitches1"></td></tr>

这是我的 php 电子邮件功能中的内容:

$size_array = count($_POST['pitcher[]']);
for ($i=0; $i<$size_array; $i++){ 
$message .= <<<MESSAGE

<tr><td>$_POST['pitcherteam'][$i]</td>
<td><b>$_POST['pitcher'][$i]</td>
<td><b>$_POST['pitcherage'][$i]</b></td>
<td><b>$_POST['pitcherteam'][$i]</b></td></tr> 
MESSAGE;
} 

我希望循环遍历表单并仅定位具有投手输入的行(而不是每次回显所有 10 行并且在未填写的字段中有空白/错误数据)。

【问题讨论】:

  • 这里真的没有 MySQL 吗?
  • 您可以检查以确保它们是 isset 或检查以确保输入了某些内容 if($_POST['pitcherage'][$i] !== ""){ }

标签: php email for-loop


【解决方案1】:

这是我根据您嵌入的代码编写的快速脚本。大约一个小时前,我看了你的问题,当时反应有限,从那以后你的问题似乎已经解决了。与其折腾这段代码,我想我会提供它以防它对你或其他人有帮助。

test.php::

print "<html><head><title>title</title></head><body>";
$size_array = count($_POST['pitcher']); // <-- notice there's no []
for ($i=0; $i<$size_array; $i++){ 
    if($_POST['pitcher'][$i] != ''){
      $team = $_POST['pitcherteam'][$i];
      $pitchername = $_POST['pitchername'][$i];
      $age = $_POST['pitcherage'][$i];
      $pitcherpitches = $_POST['pitcherpitches'][$i];
      if ($pitchername) {
        print "$team, $pitchername, $age, $pitcherpitches<br>";
      }
    }
}

$form_input_row = '<table><tr bgcolor=#cfcfcf><td align=center><b>Team</td><td align=center><b>Pitcher Name</td><td align=center><b>Age</td><td align=center><b>Pitches</td></tr><tr><td><select name="pitcherteam[]" size="1"><option>PLEASE SELECT TEAM<option>Team 1</option><option>Team 2</option><option>Team 3</option></select></td><td><input type=hidden size=50 name="pitcher[]" value="somedata"><input type=text size=50 name="pitchername[]"></td><td><select name="pitcherage[]" size="1"><option>AGE<option>8<option>9</select></td><td><input type="text" size=3 name="pitcherpitches[]"></td></tr></table>';

print "<form method=\"POST\">";
for ($j = 0; $j<6; $j++) {
  print $form_input_row;
}
print "<input type=\"submit\" value=\"submit\">";
print "</form></body></html>";

【讨论】:

    【解决方案2】:

    更改您的输入以使用[] 语法而不是设置数字:

    <tr bgcolor=#cfcfcf>
    <td align=center><b>Team</td><td align=center><b>Pitcher Name</td>
    <td align=center><b>Age</td><td align=center><b>Pitches</td></tr>
    <tr>
    <td><select name="pitcherteam[]" size="1">
    <option>PLEASE SELECT TEAM
    <option>Team 1</option>
    <option>Team 2</option>
    <option>Team 3</option>
    </select></td><td>
    <input type=text size=50 name="pitcher[]"></td>
    <td><select name="pitcherage[]" size="1">
    <option>AGE
    <option>8
    <option>9
    </select></td>
    <td><input type="text" size=3 name="pitcherpitches[]"></td></tr>
    

    然后从 PHP 中删除 [],因为 PHP 会自动将它们解析为原生数组。如果投手是空白的,还要进行检查,以便您忽略该行。

    $size_array = count($_POST['pitcher']); // <-- notice there's no []
    for ($i=0; $i<$size_array; $i++){ 
        if($_POST['pitcher'][$i] != ''){
           $message .= <<<MESSAGE
            <tr><td>{$_POST['pitcherteam'][$i]}</td>
            <td><b>{$_POST['pitcher'][$i]}</td>
            <td><b>{$_POST['pitcherage'][$i]}</b></td>
            <td><b>{$_POST['pitcherteam'][$i]}</b></td></tr>
    MESSAGE;
        }
    }
    

    【讨论】:

    • 我喜欢这个概念!所以 - 我可以为所有 10 个条目重复该表单代码,php 将能够区分吗?此外 - 出于某种原因 - 当我将 php 代码块添加到我的电子邮件表单时 - 它会引发 500 内部服务器错误。里面有什么需要提前申报的吗?注释掉此部分后效果很好。
    • 我已经解决了这个问题,请参阅我的编辑。在heredoc 中,变量需要{} 围绕它们。此外,关闭heredoc 的MESSAGE; 在同一行之前不得有任何空格。是的,你可以重复 HTML 和 PHP 会区分(这是有效的,因为它们以正确的顺序一个接一个地出现)。
    【解决方案3】:

    检查 $_POST['pitcher'][$i] 的值是否已设置,如果未设置则跳过该消息:

    if( !isset($_POST['pitcher'][$i]} ) continue;
    

    或者,对于您的代码:

    $size_array = count($_POST['pitcher[]']);
    for ($i=0; $i<$size_array; $i++){
      if( !isset($_POST['pitcher'][$i]} ) continue;
      $message .= <<<MESSAGE
         <tr><td>$_POST['pitcherteam'][$i]</td><td><b>$_POST['pitcher'][$i]</td><td><b>$_POST['pitcherage'][$i]</b></td><td><b>$_POST['pitcherteam'][$i]</b></td></tr> 
    MESSAGE;
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      相关资源
      最近更新 更多