【发布时间】: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 -->
原问题: 我有一些有效且无效的代码。它在从外部页面执行时有效,但在从同一页面执行时不起作用。
<input type='hidden' name='name' value='value' />
上面的输入将一个值传递给从 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 安全不是这些数据的问题,但感谢您的提示。任何想法为什么从同一页面提交表单时页面不会显示?