【问题标题】:Form values not passing to self in php表单值未在php中传递给self
【发布时间】:2014-07-15 21:44:16
【问题描述】:

改写的问题:

我正在将一个网络应用程序从一个独立的 PHP 页面更新为由数据库驱动并具有管理控件的应用程序(旧页面:uoflclimbingclub.com/everestchallenge/elevationcounter/)。

我在两个不同的页面上使用表单:一个管理页面和一个显示页面。表单将隐藏输入的值发送到显示页面上的变量中,该变量在 sql 语句中定义字段名称。

返回的一行数据用在展示页面上,结合CSS和PHP来展示一个图表。显示页面也是要更新数据的地方。

代码从管理页面执行时执行并显示页面成功,但从同一页面执行时无法显示页面,即使数据库中的数据已成功更新。谁能告诉我我做错了什么?我已经搜索了我能想到的所有内容并阅读了 PHP 文档以找到解决方案,但到目前为止还没有运气,我仍在寻找解决方案,任何帮助将不胜感激。

我的代码

链接到显示页面的管理页面:http://shemsimmons.com/uoflclimbingclub/everestchallenge/admin

这里是显示页面的代码:setteam.php

    <?php 
    ob_start();

    include $_SERVER["DOCUMENT_ROOT"].'/uoflclimbingclub/everestchallenge/inc/conn/ulcc_user.php';

    $team = mysqli_real_escape_string($con, $_POST['teamname']);
    $increment = "/uoflclimbingclub/images/icons/favicon.png";
    $getElevation = "SELECT * FROM everest2014 WHERE team= '$team'";
    $result = mysqli_query($con, $getElevation);

    echo "The Team Name is:";
    echo $team;

    while($climbs = mysqli_fetch_assoc($result)){

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

            foreach ($_POST as $key => $value){
              $$key=$value;
            }
            $updateElevation = "UPDATE everest2014 
                                SET 
                                rope1=$rope1Climbs,
                                rope2=$rope2Climbs,
                                rope3=$rope3Climbs,
                                rope4=$rope4Climbs,
                                rope5=$rope5Climbs,
                                rope6=$rope6Climbs,
                                rope7=$rope7Climbs,
                                rope8=$rope8Climbs,
                                rope9=$rope9Climbs,
                                rope10=$rope10Climbs,
                                rope11=$rope11Climbs,
                                rope12=$rope12Climbs,
                                rope13=$rope13Climbs
                                WHERE team='$team'";

            $retval = mysqli_query($con, $updateElevation);

            if(! $retval ){
              die('Could not update data: ' . mysqli_error());
            }

            header('Location: '.$_SERVER['PHP_SELF']);
            mysqli_close($conn);

        } else {
?>
<!DOCTYPE html>
<html>
<head>
<title>TEAM <?php echo $team; ?> Counter</title>
<link rel="icon" type="image/png" href="/uoflclimbingclub/images/icons/favicon.png">
<link rel="stylesheet" type="text/css" href="/uoflclimbingclub/everestchallenge/css/elevationstyle.php" />
<script type="text/javascript" src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="/uoflclimbingclub/everestchallenge/js/adder.js"></script>
<script type="text/javascript" src="/uoflclimbingclub/everestchallenge/js/jscolor/jscolor.js"></script>
<style>
.point { 
  border-bottom: 25px solid <?php echo $climbs["colour"]; ?>;
}
.shaft, #teambg{
  background: <?php echo $climbs["colour"]; ?>;
}
</style>
</head>
<body>
<?php
        include $_SERVER["DOCUMENT_ROOT"].'/uoflclimbingclub/everestchallenge/inc/everestVar.php';
        include $_SERVER["DOCUMENT_ROOT"].'/uoflclimbingclub/everestchallenge/inc/set_elevation_inc.php';
?>
</body>
</html>
<?php 

        }
    }
    mysqli_free_result($result);
?>

everestVar.php 包含的只是一组简单的算术,使样式看起来很漂亮(div 高度、将绳索攀爬的数量转换为攀爬的总米数等...)

另外一个include是body html:

    <!-- Graphic of Everest -->
<img src="/uoflclimbingclub/everestchallenge/img/summit.png">
<div id="everestwrapper"><div id="everestwrap">
    <div id="everest"><img src="/uoflclimbingclub/everestchallenge/img/elevationmetre.png"><div id="metres" style="bottom:<?php echo $elevation; ?>%;"><span id="elevation"><?php echo $elevationClimbed; ?></span><img src="/uoflclimbingclub/everestchallenge/img/metres.png"></div></div>
    <div id="lightbg"></div>
    <div id="teambg" class="everestfill" style="height:<?php echo $elevation; ?>%;"></div>
</div></div>
<img src="/uoflclimbingclub/everestchallenge/img/eventname.png">
<!-- Growing Rope Arrows -->
<div id="ACC">
    <form id="climbsInput" action="/uoflclimbingclub/everestchallenge/setteam.php" method="post">

    <div id="medWall" class="medWall"> 

        <div id="rope1" style="height:<?php echo $rope1Up; ?>%;">
            <div class="point"><?php echo $rope1 ?>m</div>
            <div class="shaft">1</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope1Climbs" value="<?php echo $climbs["rope1"]; ?>" /></div></div>
        <div id="rope2" style="height:<?php echo $rope2Up; ?>%;">
            <div class="point"><?php echo $rope2 ?>m</div>
            <div class="shaft">2</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope2Climbs" value="<?php echo $climbs["rope2"]; ?>" /></div></div>
        <div id="rope3" style="height:<?php echo $rope3Up; ?>%;">
            <div class="point"><?php echo $rope3 ?>m</div>
            <div class="shaft">3</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope3Climbs" value="<?php echo $climbs["rope3"]; ?>" /></div></div>
        <div id="rope4" style="height:<?php echo $rope4Up; ?>%;">
            <div class="point"><?php echo $rope4 ?>m</div>
            <div class="shaft">4</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope4Climbs" value="<?php echo $climbs["rope4"]; ?>" /></div></div>
        <div id="rope5" style="height:<?php echo $rope5Up; ?>%;">
            <div class="point"><?php echo $rope5 ?>m</div>
            <div class="shaft">5</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope5Climbs" value="<?php echo $climbs["rope5"]; ?>" /></div></div>

    </div>
    <div id="longWall" class="tallWall">

        <div id="rope6" style="height:<?php echo $rope6Up; ?>%;">
            <div class="point"><?php echo $rope6 ?>m</div>
            <div class="shaft">6</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope6Climbs" value="<?php echo $climbs["rope6"]; ?>" /></div></div>
        <div id="rope7" style="height:<?php echo $rope7Up; ?>%;">
            <div class="point"><?php echo $rope7 ?>m</div>
            <div class="shaft">7</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope7Climbs" value="<?php echo $climbs["rope7"]; ?>" /></div></div>
        <div id="rope8" style="height:<?php echo $rope8Up; ?>%;">
            <div class="point"><?php echo $rope8 ?>m</div>
            <div class="shaft">8</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope8Climbs" value="<?php echo $climbs["rope8"]; ?>" /></div></div>

    </div>
    <div id="shortWall" class="shortWall">

        <div id="rope9" style="height:<?php echo $rope9Up; ?>%;">
            <div class="point"><?php echo $rope9 ?>m</div>
            <div class="shaft">9</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope9Climbs" value="<?php echo $climbs["rope9"]; ?>" /></div></div>
        <div id="rope10" style="height:<?php echo $rope10Up; ?>%;">
            <div class="point"><?php echo $rope10 ?>m</div>
            <div class="shaft">10</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope10Climbs" value="<?php echo $climbs["rope10"]; ?>" /></div></div>
        <div id="rope11" style="height:<?php echo $rope11Up; ?>%;">
            <div class="point"><?php echo $rope11 ?>m</div>
            <div class="shaft">11</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope11Climbs" value="<?php echo $climbs["rope11"]; ?>" /></div></div>
        <div id="rope12" style="height:<?php echo $rope12Up; ?>%;">
            <div class="point"><?php echo $rope12 ?>m</div>
            <div class="shaft">12</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope12Climbs" value="<?php echo $climbs["rope12"]; ?>" /></div></div>
        <div id="rope13" style="height:<?php echo $rope13Up; ?>%;">
            <div class="point"><?php echo $rope13 ?>m</div>
            <div class="shaft">13</div>
            <div class="climbCounter ropeInput"><img src="<?php echo $increment; ?>" class="addClimb" /><input type="text" class="climbs" name="rope13Climbs" value="<?php echo $climbs["rope13"]; ?>" /></div></div>

    </div>
    <?php echo "<input type='hidden' name='teamname' value='" . $climbs['team'] . "' />"; ?>
    <div style="clear:both;padding-top:80px;"><input name="update" type="submit" value="Update Elevation"/></div>
    </form>
</div><!-- End ACC -->

原问题: 我有一些有效且无效的代码。它在从外部页面执行时有效,但在从同一页面执行时不起作用。

&lt;input type='hidden' name='name' value='value' /&gt;

上面的输入将一个值传递给从 SQL 数据库加载数据的 PHP 页面。该值存储在用于几个 SQL 语句的变量中。

$name = mysqli_real_escape_string($con, $_POST['name']);
$select = "SELECT * FROM table WHERE `name`= '$name'";
$update = "UPDATE table SET (multiple fields) WHERE `name`='$name'";

它在外部页面上运行完美,但是当我尝试从同一页面更新数据时,使用相同的输入字段会发生奇怪的事情。该值似乎没有被传递,但不知何故数据库正在成功更新。

当我说它似乎没有被传递时,我的意思是我已经在我的代码中放置了 echo 语句以查找它在哪里中断并且该变量在哪里没有值,页面加载为空白,就像变量一样没有值,页面没有显示(内容和样式取决于数据库),但由于某种原因,数据已成功发送。我可以点击浏览器上的后退按钮并刷新页面,然后数据会刷新以显示更新。

我无法理解为什么该变量适用于传出数据,但不适用于传入数据,并且没有显示任何值。有人对可能发生的事情有任何初步线索吗?

【问题讨论】:

  • 您是说页面没有显示吗?所以你得到一个空白页?您也可以发布表单的 html。
  • 表单中输入的名称是teamname
  • 是的,我让问题中的代码尽可能简单,以防万一我做错了明显的事情。我将重新表述我的问题并更具体。
  • 使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串插值来完成此操作,因为您将创建严重的SQL injection bugs
  • @tadman 安全不是这些数据的问题,但感谢您的提示。任何想法为什么从同一页面提交表单时页面不会显示?

标签: php sql forms post self


【解决方案1】:

如果在您点击返回按钮时页面刷新以显示更新,那么刷新页面将是解决方案。

要刷新页面,下面的 PHP 代码应该可以工作:

header('Location: currentURL');

【讨论】:

  • 只有在发送数据后刷新页面才有效,而且我已经在我的代码中使用了类似的东西: header('Location: '.$_SERVER['PHP_SELF']);跨度>
【解决方案2】:

检查表单元素中的action 属性。确保将其设置为您正在处理的文件的名称。

页面是空白的,因为您的 php 脚本存在内部错误。在您解决问题之前,不会显示任何内容。

试试这个..

if ($_POST['submit']){
      ... code to update database here...
 }

【讨论】:

  • 我正在这样做:if(isset($_POST['update'])){ $updateElevation = "UPDATE everest2014 SET rope1=$rope1Climbs, etc... WHERE team='$team'"; }
  • @ShemSeger 当您启动 foreach 时,您有一个额外的 $ .. foreach ($_POST as $key =&gt; $value){ $$key=$value; } 。另外,请使用mysqlimysql 已被弃用,它会给你带来很多麻烦。想想 SQL Inyection。
  • 我需要额外的$。该 foreach 循环正在获取我的表单中的所有输入名称,而额外的 $ 正在将它们转换为我在 SQL 语句中使用的变量。由于某种原因,使用 mysqli 会引发错误……但这不是问题,我不是在处理敏感数据,它只是计算团队在一年一次的活动中攀登攀岩墙上的每根绳索的次数.
  • 嘿只是想说声谢谢,当我使用 mysqli 时,我能够找出导致该错误的原因,并且能够修复我最终只是修补的早期问题。我现在正在使用 mysqli。我仍然得到相同的结果,但感谢您的提示!
  • @ShemSeger 很高兴我能以某种方式帮助你。
猜你喜欢
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 2017-10-22
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多