【问题标题】:Second Select Won't POST第二个选择不会发布
【发布时间】:2013-10-10 18:03:45
【问题描述】:

我有一个包含两个<select> 标签的表单:

<li>
    <label for="uname">Select User : </label>
    <select id="uname" name="uname">
        <option value="3">Kaine McAuley</option>
    </select>
</li>
<li>
    <label for="uweek">Week Number : </label>
    <select id="uweek" name="uweek">
        <option value="1">Week 1</option>
        <option value="2">Week 2</option>
        <option value="3">Week 3</option>
        <option value="4">Week 4</option>
        <option value="5">Week 5</option>
        <option value="6">Week 6</option>
        <option value="7">Week 7</option>
        <option value="8">Week 8</option>
        <option value="9">Week 9</option>
        <option value="10">Week 10</option>
        <option value="11">Week 11</option>
        <option value="12">Week 12</option>
    </select>
</li>

这就是它在浏览器中的显示方式。我有echo'd $_POSTuweek 的内容在那里不存在。但是,uname 可以!

我创建表单的实际 PHP 代码如下:

echo '<h2>Update Users</h2><form action="" method="post">
    <ul style="list-style: none;">
            <li>
            <label for="uname">Select User : </label>
            <select id="uname" name="uname">';
while($r = mysqli_fetch_assoc($sql))
{
    switch($r['Username'])
    {
        case 'Mike':
        case '3rungohan':
        case 'Test':
        case 'Jestress':break;
        default: echo '<option value="' . $r['UserID'] . '">' . $r['RealName'] . '</option>';
    }
}

echo '</select></li>
<li>
    <label for="uweek">Week Number : </label>
    <select id="uweek" name="uweek">';
    for($i=1;$i<13;$i++)
    {
        $week = "Week " . $i;
        echo '<option value="' . $i . '">' . $week . '</option>';
    }
    echo '</select>
</li>
<li>
    <label for="uaims">Week Aims : </label><br />
    <textarea id="uaims" name="uaims" rows="4" cols="40" required="required"></textarea>
</li>
<li>
    <label for="upros">Week Progress : </label><br />
    <textarea id="upros" name="upros" rows="4" cols="40" required="required"></textarea>
</li>
<li>
    <label for="unote">Week Notes : </label><br />
    <textarea id="unote" name="unote" rows="4" cols="40" required="required" placeholder="If no notes, just enter: No notes"></textarea>
</li>
<li>
    <input type="submit" value="Submit" />
</li>
</ul>
</form>';

print_r($_POST);的结果

Array ( [uname] => 3 [uaims] => Aims [upros] => Nope [unote] => No )

var_dump($_REQUEST); 的类似结果

array(4) { ["uname"]=> string(1) "3" ["uaims"]=> string(4) "Aims" ["upros"]=> string(4) "Nope" ["unote"]=> string(2) "No" }

一旦$_POST 执行并通过,我的代码(在 php 文档的顶部): 抱歉,我需要来自不同表格的几轮信息。

if(!empty($_POST['uname']))
{
    foreach($_POST as $k => $v) {$up[$k] = $v;}
    $sql2 = mysqli_query($link, "SELECT * FROM jestresstracker WHERE UserID='" . mysqli_real_escape_string($link, $up['uname']) ."' ORDER BY WeekNum DESC LIMIT 1");
    $temp = mysqli_fetch_assoc($sql2);
    $sql3 = mysqli_query($link, "SELECT * FROM jestress_users WHERE UserID='" . mysqli_real_escape_string($link, $up['uname']) ."' LIMIT 1");
    $r = mysqli_fetch_assoc($sql3);
    foreach($r as $k => $v) {$User[$k] = $v;}
    if(!empty($temp['WeekNum']))
    {
        if($up['uweek']<=$temp['WeekNum']) {$result = "Error. Update already set for this week. Week Num: " . $temp['WeekNum'];}
    }
    else {
        $ins = mysqli_query($link, "INSERT INTO jestresstracker (UserID, WeekNum, WeekAims, WeekPro, Updated, UpdatedBy, Notes) VALUES('" . mysqli_real_escape_string($link, $up['uname']) . "', '" . mysqli_real_escape_string($link, $up['uweek']) . "', '" . mysqli_real_escape_string($link, nl2br($up['uaims'])) . "', '" . mysqli_real_escape_string($link, nl2br($up['upros'])) . "', NOW(), '" . mysqli_real_escape_string($link, $res['UserID']) . "', '" . mysqli_real_escape_string($link, nl2br($up['unote'])) . "')");
        if($ins) {$result = "Successfully updated " . $User['RealName'] . "'s Week " . $up['uweek'] . " post.";var_dump($_REQUEST);}
        else {$result = "Error: " . mysqli_error($link);}
    }
}

编辑:更改 id/name 不会返回不同的结果。

【问题讨论】:

  • 你是怎么检查的?向我们展示print_r($_POST);的结果
  • 鉴于显示的内容,它应该可以工作。也许试试var_dump($_REQUEST);
  • 请听从@jason 的建议。使用 print_r($POST); 的结果编辑您的帖子;如果还是看不到uweek,请把你的处理逻辑的php包含进去。
  • 您确定选择在表单标签内吗?
  • @Daniel 是的,选择在表单内,它是第二个元素,它下面的其他元素传递给$_POST

标签: php mysql forms post


【解决方案1】:

在这种情况下最好的朋友是萤火虫或任何网络分析工具..

检查标题并确保相关字段确实通过..

我认为这可能会有很大帮助..

【讨论】:

    【解决方案2】:

    您的 php 或网络服务器似乎有问题。尝试使用此函数自己创建$_POST 数组:

    function decodePost(){
        $var = file_get_contents('php://input');
        $postContent = explode('&',$var);
        for($i = 0; $i < count($postContent); $i++){
            $postContent[$i] = urldecode($postContent[$i]);
            $map = explode('=', $postContent[$i]);
            $post[$map[0]] = $map[1];
        }
        return $post;   
    }
    

    看看有没有什么变化。

    【讨论】:

    • 我得到完全相同的结果,但数组中仍然没有 uweek
    • @MikeShaw 您的浏览器可能有问题?尝试在该选择中再添加一个选项:&lt;option value='100' selected&gt;Test
    【解决方案3】:

    您没有提供包含表单和所有字段的所有 HTML 代码。

    你有很多吗?它们大/长吗?

    您的php.ini 配置有限制吗?检查post_max_size 值。

    你的服务器上安装了 suhosin 模块吗? (检查phpinfo() 以确保)。 Suhosin 有时可能很棘手,它会登录系统日志(例如/var/log/syslog)而不是登录网络服务器日志(例如 Apache 日志)。

    尝试在suhosin.ini 中检查这些默认值:

    suhosin.post.max_array_depth = 100
    suhosin.post.max_array_index_length = 64
    suhosin.post.max_name_length = 64
    suhosin.post.max_totalname_length = 256
    suhosin.post.max_value_length = 1000000
    suhosin.post.max_vars = 1000
    

    同时使用W3 validator 检查您的 HTML 代码,以确保所有内容的格式正确。也许您的浏览器会因此而出现奇怪的行为。

    你有 jQuery onSubmit 函数或在 Javascript 代码中捕获提交的东西吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多