【问题标题】:No value for checkbox in array数组中的复选框没有值
【发布时间】:2013-01-25 02:18:52
【问题描述】:

数组中的复选框有问题。我正在编写一个在足球比赛(室内)上运行的脚本,以跟踪进球者和其他信息,如卡片(绿色或红色)。

这是客队表的代码。问题出在复选框上。未选中时,它们不会发送任何值。我需要他们在未选中时发送“0”作为值,在选中时发送“30”。

   $sql1="SELECT dbo_doelpunten.TeamRelatieNummer, dbo_doelpunten.aantaldoelpunten, dbo_doelpunten.Deelnemer, dbo_doelpunten.aantalstrafminuten, dbo_Deelnemers.Deelnemer, dbo_Deelnemers.MinutenStrafVerwerkt, dbo_Deelnemers.Doelpunten, dbo_Deelnemers.NaamCombi
    FROM dbo_doelpunten
    LEFT JOIN dbo_Deelnemers
    ON dbo_doelpunten.Deelnemer=dbo_Deelnemers.Deelnemer
    WHERE dbo_doelpunten.TeamRelatieNummer='436'
    ORDER BY dbo_doelpunten.Deelnemer
    ";
    // $sql1="SELECT * FROM dbo_doelpunten WHERE TeamRelatienummer='436'";
    $result1=mysql_query($sql1);

    // Count table rows 
    $count=mysql_num_rows($result1);
    $Deelnemer = array();
    ?>
    <td>
    <table id="table" class="table"  width="400"> 
    <thead> 
    <tr> 
        <th data-sort="int">Nr</th>
        <th data-sort="string">Naam</th>      
        <th data-sort="int">Doelpunten</th> 
        <th data-sort="int">Tijdstraf</th> 
        <th data-sort="int">Rood?</th>
    </tr> 
    </thead>
    <tbody>
    <?php
    while($rowuit=mysql_fetch_array($result1)){
    $e=$rowuit['MinutenStrafVerwerkt'];
    if ($e>='10')
      {
      echo "<tr bgcolor='red'>";
      }
    else
      {
      echo "<tr>";
      }
      ?>
    <td width="50" class="tdata"><input name="Deelnemeruit[]" type="hidden" id="Deelnemeruit" size="10" value="<? echo $rowuit['Deelnemer']; ?>" readonly><? echo $rowuit['Deelnemer']; ?></td>
    <td width="250" class="tdata"><input name="NaamCombiuit[]" type="hidden" id="NaamCombiuit" size="20" value="<? echo $rowuit['NaamCombi']; ?>" readonly><? echo $rowuit['NaamCombi']; ?></td>
    <td width="50" class="tdata"><input name="doelpuntuit[]" type="number" min="0" max="100" size="3" id="doelpuntuit" value="<? echo $rowuit['aantaldoelpunten'] ?>"></td>
    <td width="50" class="tdata"><input name="strafuit[]" type="number" min="0" max="100" size="3" id="strafuit" value="<? echo $rowuit['aantalstrafminuten'] ?>"></td>
    <td width="50" class="tdata"><input name="rooduit[]" type="checkbox" value="30" id="rooduit"></td>
    </tr>
    <?php
    }
    ?>

创建数组效果很好,并且表格创建得很好。更新比分、射手和罚时(绿卡)效果很好,除了红卡是一个复选框。下面是更新数据库的代码

$Deelnemerthuis = $_POST['Deelnemerthuis']; 
$NaamCombithuis = $_POST['NaamCombithuis'];
$doelpuntthuis = $_POST['doelpuntthuis']; 
$strafthuis = $_POST['strafthuis']; 
$vlaggerthuis = $_POST['vlaggerthuis']; 
$teamthuis = $_POST['teamthuis']; 
$roodthuis = $_POST['roodthuis'];

$Deelnemeruit = $_POST['Deelnemeruit']; 
$NaamCombiuit = $_POST['NaamCombiuit'];
$doelpuntuit = $_POST['doelpuntuit']; 
$strafuit = $_POST['strafuit']; 
$vlaggeruit = $_POST['vlaggeruit']; 
$teamuit = $_POST['teamuit']; 
$rooduit = $_POST['roodtuit'];




// Check if button name "Submit" is active, do this 
if(isset($_POST['Submit'])){

$i=0;
while($i<$count){
$sql3= "UPDATE dbo_doelpunten SET aantaldoelpunten = '" . $doelpuntthuis[$i] . "', aantalstrafminuten = '" . $strafthuis[$i] . "' WHERE wedstrijdid='300' AND  Deelnemer = '" . $Deelnemerthuis[$i] . "'"; 
$result3=mysql_query($sql3);


$sql7= "UPDATE dbo_Deelnemers SET MinutenStrafVerwerkt = MinutenStrafVerwerkt+'" . $roodthuis[$i] . "' WHERE Deelnemer = '" . $Deelnemerthuis[$i] . "'";
$result7=mysql_query($sql7);


$sql4= "UPDATE dbo_doelpunten SET aantaldoelpunten = '" . $doelpuntuit[$i] . "', aantalstrafminuten = '" . $strafuit[$i] . "' WHERE wedstrijdid = '300' AND Deelnemer = '" . $Deelnemeruit[$i] . "' "; 
$result4=mysql_query($sql4);

$sql8= "UPDATE dbo_Deelnemers SET MinutenStrafVerwerkt = MinutenStrafVerwerkt+'" . $rooduit[$i] . "' WHERE Deelnemer = '" . $Deelnemeruit[$i] . "'"; 
$result8=mysql_query($sql8);

$i++;
} 

如何让复选框在未选中时为 0,在选中时为 30?

我在这里发布了页面的完整代码: http://pastebin.com/u6xVMmrr

【问题讨论】:

  • 你是指黄牌吗?
  • 不,我真的很喜欢绿卡(这是 Futsall),绿卡意味着 2 分钟的罚时。红牌在剩下的比赛中被红牌罚下;-)
  • 酷,感谢您的解释!

标签: php mysql arrays checkbox


【解决方案1】:

复选框不会发送未经检查的数据,因此您有两种选择:

  1. 测试复选框字段是否存在。如果不存在,则假定值为 0。
  2. 有一个隐藏的表单变量,其变量名称和值为“0”,将在邮寄时发送。如果复选框(稍后出现在表单中)被选中,它将用 30 覆盖 0 值。

【讨论】:

  • thanx monkeymatrix。我尝试了选项 2,但不知何故,30 的值被发送给了下一个玩家。也许我做错了什么。将再次检查!
  • 确保隐藏变量的值为0。如果未选中该框,则不应发送任何数据! :)
  • 猴子矩阵。我现在有这个代码: 但是在提交表单时,30 将转到下一个玩家而不是那个选择
  • 你需要 - 对不起,我应该更清楚。您使用隐藏字段,而不是隐藏复选框!
  • 感谢更新,不幸的是它仍在将 30 添加到下一个播放器。查看实际页面:www.srza.org/test.php
【解决方案2】:

在得到 POST 的地方乘以 1

$checkbox=$_POST['checkbox']*1;

因此,如果未选中复选框,您将得到 0。

另一种解决方案是检查是否设置了 $_POST:

if(!isset($_POST['checkbox'])){
$checkbox=0;
}else{
$checkbox=$_POST['checkbox'];
}

【讨论】:

  • 选项 1 给我:致命错误:第 256 行 /home/srzaorg/public_html/test.php 中不支持的操作数类型
  • 选项 2 给了我: UPDATE dbo_Deelnemers SET MinutenStrafVerwerkt = MinutenStrafVerwerkt+'10' WHERE Deelnemer = '2202'UPDATE dbo_Deelnemers SET MinutenStrafVerwerkt = MinutenStrafVerwerkt+'' WHERE Deelnemer = '4434' so from the second one值(我选择了复选框九顺便说一句)
  • 选项 1:然后您将 error_reporting 设置为 E_ALL 和 E_STRICT 尝试以下操作(请将 'checkbox' 替换为表单中复选框的名称,并在 SQL 中使用 $checkbox_val 进行更新): $checkbox_val=0; if(isset($_POST['checkbox'])){ if($_POST['checkbox']!=''){ $checkbox_val=30; } }
  • UPDATE dbo_Deelnemers SET MinutenStrafVerwerkt = MinutenStrafVerwerkt+'' WHERE Deelnemer = '5023' 查询仍然为空,甚至没有插入 0
  • 抱歉,我没有看到,您将值发布为数组 roodthuis[] 所以这当然行不通。您将始终在此数组中选中复选框,而其他则没有。因此,当第二个复选框被选中时,roodthuis[0] 将保留该值,但是当第一个复选框被选中时,roodthuis[0] 将是第一个复选框的值,而 roodthuis[1] 将是下一个复选框的值。最好忘记字段 Deelnemerthuis[] 并使用字段名称,如 data[622][NaamCombithuis]、data[622][doelpuntthuis] 等等...
【解决方案3】:

我通过将复选框更改为下拉选择来修复它。不是最佳但可行。感谢各位大侠的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多