【问题标题】:Why does this isset return false?为什么这个isset返回false?
【发布时间】:2013-01-25 01:59:39
【问题描述】:

所以我在表单中有一个选择...

<select id="aca" name="aca">
  <option value="2012">2012-2013</option>
  <option value="2011">2011-2012</option>
  <option value="2010">2010-2011</option>
  <option value="2009">2009-2010</option>
  <option value="2008">2008-2009</option>
  <option value="2007">2007-2008</option>
  <option value="2006">2006-2007</option>
  <option value="2005">2005-2006</option>
</select>

看起来不错,对吧?然后我想检查是否设置了整个表单:

if(isset($_FILES['fichier']) && isset($_POST['nom']) && isset($_POST['a']) && isset($_POST['c']) && isset($_POST['t']) && isset($_POST['auteur']) && isset($_POST['aca'])) echo 'tout';

这总是返回 FALSE,我知道这是由于 'aca'。当我尝试...

if(isset($_POST['aca'])) echo 'aca';

它返回 TRUE 如果我在列表中选择了一些东西,而另一个条件仍然没有回显“tout”,所以我只看到了“aca”。并且这条 js 行似乎不是问题,因为其他 select 的返回 TRUE。

$("select").prop('selectedIndex', -1);

我真的不明白...哈哈^^"

完整的 HTML:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Upload</title>
  <link rel="stylesheet" href="style/upload.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="js/upload.js"></script>
</head>
<body>

<form method="post" action="" enctype="multipart/form-data">

<fieldset>
<legend>Informations d'upload</legend>
<p>Fichier (tous formats | max. 1 Mo):</p>
<input type="file" name="fichier" size="60"/><br/>
<p>Nom du fichier. Caractères utilisables: alphanumériques °*@()-_()</p>
<input type="text" name="nom" size="40"/>
</fieldset>

<fieldset>
<legend>Classification</legend>
<p>Merci d'indiquer où ce fichier devra être classé.</p>
  <select id="a" name="a">
    <option value="0">BA1</option>
  </select>
  <select id="c" name="c" style="display:none"></select>
  <select id="t" name="t" style="display:none"></select>
</fieldset>

<fieldset>
<legend>Détails</legend>
<p>Auteur:</p>
<input type="text" name="auteur" size="40"/>
<p>Année académique:</p>
<select id="aca" name="aca">
  <option value="2012">2012-2013</option>
  <option value="2011">2011-2012</option>
  <option value="2010">2010-2011</option>
  <option value="2009">2009-2010</option>
  <option value="2008">2008-2009</option>
  <option value="2007">2007-2008</option>
  <option value="2006">2006-2007</option>
  <option value="2005">2005-2006</option>
</select>
</fieldset>

<br/>

<div style="width:500px;text-align:center">
<input type="submit" name="submit" value="Envoyer" />
</div>

</form>
</body>
</html>

完整的 PHP:

<?php
$formats = array('pdf');
echo strtolower(substr(strrchr($_FILES['fichier']['name'],'.'),1)).'<br/>';
if(isset($_POST['aca'])) echo 'aca';
if(isset($_FILES['fichier']) && isset($_POST['nom']) && isset($_POST['a']) && isset($_POST['c']) && isset($_POST['t']) && isset($_POST['auteur']) && isset($_POST['aca'])) echo 'tout';
if(preg_match("#^[a-zA-Z0-9éè°*@ ()_-]{10,50}$#",$_POST['nom']))
{
echo 'OK';
}
else echo 'Nope';
?>

【问题讨论】:

  • 我们需要更多信息才能继续。 HTML 和相关的 PHP 代码会很有帮助。
  • 呃……你怎么知道所有其他的东西都设置好了?显然aca 已设置,所以它必须是其他之一。全部打印出来看看哪个没有设置。
  • 当我从条件中删除 isset($_POST['aca']) 时,它按预期返回 TRUE。

标签: php forms select isset


【解决方案1】:

如果未选择任何内容,则该元素不会 POST 到服务器。您可以通过选择来解决此问题:

<select id="aca" name="aca">
  <option value="" selected="selected"> </option>
  <option value="2012">2012-2013</option>
  <option value="2011">2011-2012</option>
  <option value="2010">2010-2011</option>
  <option value="2009">2009-2010</option>
  <option value="2008">2008-2009</option>
  <option value="2007">2007-2008</option>
  <option value="2006">2006-2007</option>
  <option value="2005">2005-2006</option>
</select>

同样,如果您希望其他“选择”元素在不选择某些内容的情况下发布,则必须这样做。

【讨论】:

  • 其他选择元素在一段时间内返回 TRUE,即使没有选择任何内容。现在他们没有。发生了一些神秘的事情 U_ù 但你是对的。
【解决方案2】:

执行 print_r($_POST),您将能够准确看到设置的内容...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    • 2012-07-09
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多