【问题标题】:PHP While Loop - Variable will passed on the last entry onlyPHP While 循环 - 变量将仅在最后一个条目上传递
【发布时间】:2015-07-11 14:51:25
【问题描述】:

当我按下提交按钮时,变量“评级”只会从最后一行传递。其他的都是空的。

<form method="POST" action="<?php echo $_SERVER["PHP_SELF"]; ?>" enctype="multipart/form-data">
<table width="800" border="0" align="center" class="zui-table">
<thead>
  <tr>
    <td colspan="4">      
    </td>
  </tr>
  <tr>
    <th width="96">Kategorie</th>
    <th width="177">Unterkategorie</th>
    <th width="299">Beitrag</th>
    <th width="210"><? if ($rolle == '1') { echo 'Bewertung'; } elseif ($rolle== '9') { echo 'Freischalten';} else { echo 'Status';} ?></th>
    <? while ($show = mysql_fetch_array($abfrage)) { ?>
  </tr>
  </thead>
  <tbody>
  <tr>
    <td><? echo $show['category']; ?></td>
    <td><? echo $show['subcategory']; ?></td>
    <td><a href="<? echo $show[url] ?>" data-lightbox="<? echo $show['file_name'] ?>" data-title="<? echo $show['file_name'] ?>"><img src="timthumb.php?src=<?php echo $show['url'] ?>&w=300&h=150" alt="resized image" BORDER="2"/></a> </td>
    <td><? if ($rolle == '1') { ?>
	<select name="rating" class="style28" style="width: 120px" id="rating">
        <option value="0">0</option>
        <option value="5">5</option>
        <option value="15">15</option>
        <option value="20">20</option>
        <option value="25">25</option>
        <option value="30">30</option>
        <option value="35">35</option>
        <option value="40">40</option>
        <option value="45">45</option>
        <option value="50">50</option>
        <option value="55">55</option>
        <option value="60">60</option>
        <option value="65">65</option>
        <option value="70">70</option>
        <option value="75">75</option>
        <option value="80">80</option>
        <option value="85">85</option>
        <option value="90">90</option>
        <option value="95">95</option>
        <option value="100">100</option>
        </select> <? echo '<button type="submit" value="' . $show['id']. '" name="submit">Bewerten?</button>'; }
		
		elseif ($rolle == 9) {
			
			echo '<button type="freigeben" value="' . $show['id']. '" name="freigeben">Freigeben?</button>';
			
		}?></td>
  </tr>
   </tbody>
  <? } 
  
  }?>
</table>

只有最后一行的“评分”会被传递给

if (isset($_POST['submit'])) { 


	echo $_POST['rating'];
	echo $_POST['submit'];

	//mysql_query("SET CHARACTER SET 'utf8'");
	
	$db = mysql_connect("localhost", "xx", "xx");
	mysql_select_db("cx",$db);
	
	//Rating eingeben
	$sql = "UPDATE wp_awa_upload SET count = count + '$_POST[rating]' WHERE id = '$_POST[submit]'";
	$result = mysql_query($sql,$db);
	
	//Session eintragen
	
	$sql_insert = "INSERT into wp_awa_session (upload_id, user_id) VALUES('$_POST[submit]', '$_SESSION[id]')";
	$result = mysql_query($sql_insert,$db);
	
	echo $sql_insert;
	echo $sql;

}

将显示所有行,但是当我按下提交按钮时,只有在按下最后一行的按钮时,才会传递评分下拉列表中的变量。

感谢您的帮助!

亲切的问候,

斯蒂芬

【问题讨论】:

  • 将错误报告添加到文件顶部,紧跟在打开 PHP 标记之后,例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);,然后是其余代码,以查看它是否产生任何结果。还将or die(mysql_error()) 添加到mysql_query() 并确保您已经开始了会话。
  • 亲爱的 Fred,error_reporting 已开启且未显示任何内容。我假设错误出在按钮上 - 因为只有最后一个按钮获得正确的“评级”数字......

标签: php mysql while-loop


【解决方案1】:

如果我理解您尝试实现的目标,您希望rating 变量包含与按下的按钮相对应的评级。但是,如果您仔细考虑一下,浏览器将无法确定按钮对应于哪个下拉菜单。这对您来说很有意义(因为它们似乎彼此相邻),但是 HTML 没有“彼此相邻”的概念,从 HTML 的角度来看,您有多个下拉列表,出于某种原因,它们都具有相同的名称,和多个按钮。当您按下其中一个按钮时,它需要决定将哪个值作为rating 发送。它选择使用最后一个,因为它无法更好地猜测。

对您来说最简单的解决方案是让每个下拉菜单和一个按钮成为自己的表单。目前您有一个巨大的表单(请参阅脚本开头的&lt;form&gt; 标签)。相反,在while 循环体的开头打开表单并在结尾处关闭,沿着

<? while ($show = mysql_fetch_array($abfrage)) { ?>
</tr> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]; ?>" enctype="multipart/form-data">

...

这样浏览器就可以判断出哪个下拉菜单对应哪个按钮,因为每个按钮对应的表单中只有一个下拉菜单。

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 2014-01-17
    • 2017-05-02
    • 2017-02-12
    • 2011-10-12
    • 2012-09-14
    • 2021-06-08
    • 1970-01-01
    • 2019-08-13
    相关资源
    最近更新 更多