【问题标题】:PHP form not postingPHP表单未发布
【发布时间】:2015-07-21 14:11:23
【问题描述】:

此表单根本没有发布值,我无法弄清楚。我尝试使用 PHP_SELF 和单独的页面操作,但没有任何效果。所有其他形式的工作 - 所以它不是服务器问题。我究竟做错了什么?谢谢。

 <form name=\"projects\" action=\"upload.php\" method=\"POST\">

    <?php 
        echo "<tr>
            <td valign = \"top\" bgcolor=\"$row_color\"> $title </td> 
            <td valign = \"top\" bgcolor=\"$row_color\"> $description </td> 
            <td valign = \"top\" bgcolor=\"$row_color\"> $academicdiscipline </td>
            <td valign = \"top\" bgcolor=\"$row_color\"> "; 

                $allowed = $academicdiscipline; 
                switch ($allowed) {
                case "Civil and Environmental": 
                  echo "<select name=\"priority\" class=\"priority\">
                          <option>  </option>
                          <option value=\"1\"> 1 </option>
                          <option value=\"2\"> 2 </option>
                          <option value=\"3\"> 3 </option> 
                          <option value=\"4\"> 4 </option>
                          <option value=\"5\"> 5 </option>
                          <option value=\"6\"> 6 </option>
                          <option value=\"7\"> 7 </option>
                          <option value=\"8\"> 8 </option>
                          <option value=\"9\"> 9 </option>
                          <option value=\"10\"> 10 </option>
                        </select> ";
                  break;
                case "Electronics": 
                  echo "<select name=\"priority\" class=\"priority\">
                          <option>  </option>
                          <option value=\"1\"> 1 </option>
                          <option value=\"2\"> 2 </option>
                          <option value=\"3\"> 3 </option> 
                          <option value=\"4\"> 4 </option>
                          <option value=\"5\"> 5 </option>
                        </select>";
                  break;
                case "Environment and Management": 
                  echo "<select name=\"priority\" class=\"priority\">
                          <option>  </option>
                          <option value=\"1\"> 1 </option>
                          <option value=\"2\"> 2 </option>
                          <option value=\"3\"> 3 </option> 
                          <option value=\"4\"> 4 </option>
                          <option value=\"5\"> 5 </option>
                        </select>";
                  break;
                case "Mechanical and Materials": 
                  echo "<select name=\"priority\" class=\"priority\">
                          <option>  </option>
                          <option value=\"1\"> 1 </option>
                          <option value=\"2\"> 2 </option>
                          <option value=\"3\"> 3 </option> 
                          <option value=\"4\"> 4 </option>
                          <option value=\"5\"> 5 </option>
                          <option value=\"6\"> 6 </option>
                          <option value=\"7\"> 7 </option>
                          <option value=\"8\"> 8 </option>
                          <option value=\"9\"> 9 </option>
                          <option value=\"10\"> 10 </option>
                          <option value=\"11\"> 11 </option>
                          <option value=\"12\"> 12 </option>
                          <option value=\"13\"> 13 </option> 
                          <option value=\"14\"> 14 </option>
                          <option value=\"15\"> 15 </option>
                        </select> ";
                  break;
                default: 
                    echo "<select name=\"priority\" class=\"priority\">
                          <option>  </option>
                          <option value=\"1\"> 1 </option>
                          <option value=\"2\"> 2 </option>
                          <option value=\"3\"> 3 </option> 
                          <option value=\"4\"> 4 </option>
                          <option value=\"5\"> 5 </option>
                        </select> ";
                  break;
                default: 
                    echo "<select name=\"priority\" class=\"priority\">
                              <option>  </option>
                              <option> 1 </option>
                              <option> 2 </option>
                              <option> 3 </option> 
                              <option> 4 </option>
                              <option> 5 </option>
                            </select>"; } 


            echo "</td></tr>
         <tr bgcolor=\"#ffffff\"> </tr>
         <tr bgcolor=\"#902C2E\"> </tr>"; 

      $row_count++; }  

 echo"<tr>
  <td>&nbsp;</td>
  <td>&nbsp;</td>
</tr>
<tr>
  <td>&nbsp;</td>
  <td ><input name=\"reset\" type=\"reset\" value=\"Reset\"/> 
       <input name=\"submit\" type=\"submit\" value=\"Select\"/> 
</tr></table>" ;  ?>
</form> 

upload.php 页面可以上传除优先级之外的所有其他条目,我无法从上面的代码中获取 POST。这是upload.php文件:

if(isset($_POST[submit]) && !empty($_POST[submit])) { 

$fullname = ''.$data[0]["sn"][0].', '.$data[0]["givenname"][0].'';  
$givenname = ''.$data[0]["givenname"][0].''; 
$priority = '$_POST[priority]'; 

$sql = "SELECT * FROM flux_student_records WHERE studentname = '$fullname' ";
$retval = mysql_query($sql) or die(mysql_error());  

 if (!$retval) { 
        die('Could not retrieve data: There are no project proposals yet. <br /><br /> ' . mysql_error());   }

    while ($row = mysql_fetch_array($retval)) { 
        extract($row);  }

    $sql = "INSERT INTO flux_project_selection( id, studentname, title, academicdiscipline, priority)
            SELECT flux_student_records.id, flux_student_records.studentname, project_proposals.title, project_proposals.academicdiscipline, '$priority'
            FROM project_proposals
            JOIN flux_student_records ON project_proposals.academicdiscipline = flux_student_records.academicdiscipline
            WHERE flux_student_records.studentname = '$studentname'
            AND 'priority' IS NOT NULL
            LIMIT 5"; 

    $retval = mysql_query($sql) or die('Error: MySQL query failed. Project has not been added to the database. '); 

echo "<p> Your project selection have been added to the system. <br> You'll be redirected to list of projects in the system. </p><br />";   
//echo "<meta http-equiv=Refresh content=2;url=index.php>";


} 

【问题讨论】:

  • 您需要将数组键括在引号中,例如$_POST['submit']
  • $priority = '$_POST[priority]'; 将确切的字符串 '$_POST[priority]' 分配给该变量。
  • 谢谢杰西卡。试过 $priority = $_POST['priority'];也一样,这也不起作用。
  • 为什么有开关盒?你的代码有太多问题

标签: php mysql http-post


【解决方案1】:

据我从您在问题中发布的代码可以看出,您不在 PHP 中

<form name=\"projects\" action=\"upload.php\" method=\"POST\">

所以从所有这些中删除斜线\

然后是这些:

if(isset($_POST[submit]) && !empty($_POST[submit])) { 

$priority = '$_POST[priority]'; 

您需要添加和删除引号:

if(isset($_POST['submit']) && !empty($_POST['submit'])) { 

$priority = $_POST['priority']; 

此外,您所有的 &lt;option&gt; 都没有为它们设置值,因此您可能需要对此做点什么。

即:&lt;option value=\"1\"&gt; 1 &lt;/option&gt;

等等

另外,放弃使用mysql_ 函数。它们已被弃用,将从未来的 PHP 版本中删除。

使用mysqli with prepared statementsPDO with prepared statements它们更安全。


我尝试过同时使用 PHP_SELF...

如果不在 PHP 中,你可以使用action="",它的作用与 self 相同。或者,action=\"\" 如果在 PHP 中,或者action='',取决于你如何回显它。

error reporting 添加到文件顶部,这将有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。


编辑:

我在您的查询中注意到的另一件事:

$sql = "INSERT INTO flux_project_selection( id, studentname, title, academicdiscipline, priority)
        SELECT flux_student_records.id, flux_student_records.studentname, project_proposals.title, project_proposals.academicdiscipline, '$priority'
        FROM project_proposals
        JOIN flux_student_records ON project_proposals.academicdiscipline = flux_student_records.academicdiscipline
        WHERE flux_student_records.studentname = '$studentname'
        AND 'priority' IS NOT NULL
        LIMIT 5"; 

尝试从'$priority'AND 'priority' 中删除引号,因为这看起来是一列。

如果 $priority 包含 MySQL 可能抱怨的任何字符,则将其包含在刻度中而不是引号中,并使用 mysql_real_escape_string() 转义变量。

即:

project_proposals.academicdiscipline, `$priority`
            FROM project_proposals

...

AND `priority` IS NOT NULL

这对你也没有帮助

$retval = mysql_query($sql) or die('Error: MySQL query failed. Project has not been added to the database. '); 

使用or die(mysql_error()); 代替or die('Error: MySQL query failed. Project has not been added to the database. ');

【讨论】:

  • 旁注:我的回答不是基于发布的 cmets。我正忙着把所有这些都写下来。这需要一些时间;-)
  • @NoooSmyth 不客气,但您需要告诉我为什么它不起作用以及是否遇到错误。将错误报告添加到您的打开 PHP 标记(例如 &lt;?php error_reporting(E_ALL); ini_set('display_errors', 1);)之后的文件顶部,然后是其余代码,以查看它是否产生任何结果。
  • @NoooSmyth 还有,这条线对你没有帮助 $retval = mysql_query($sql) or die('Error: MySQL query failed. Project has not been added to the database. ');or die(mysql_error());
  • @NoooSmyth 您似乎也缺少一些代码。 $fullname 似乎未定义,并且在您的代码/问题中的其他任何地方都没有提及。
  • 现在我收到错误:注意:未定义变量:/tron/top2/eng-project/student/uploadprojectselection.php 第 147 行中的错误
【解决方案2】:

编辑

&lt;form name=\"projects\" action=\"upload.php\" method=\"POST\"&gt;

&lt;form name="projects" action="upload.php" method="POST"&gt;

或者把它放在echo里面

还有

$priority = '$_POST[priority]';

这会将$_POST[priority] 作为字符串放入变量$priority

改成这样:

$priority = $_POST['priority'];

【讨论】:

  • 感谢 Ehad Eldeeb。我一直在尝试同样的事情一段时间。没用。
猜你喜欢
  • 2014-09-15
  • 1970-01-01
  • 2016-03-23
  • 2012-06-28
  • 1970-01-01
  • 2016-11-02
  • 2012-05-17
  • 2013-10-21
  • 1970-01-01
相关资源
最近更新 更多