无法在textarea框中显示php脚本计算的结果

时间:2015-06-15 02:17:00

标签: javascript php html

我认为我的问题可能在于我尝试初始化脚本的方式。我正在使用的提交按钮似乎只是清除表单,而不显示任何结果。我也认为两行可能存在问题“$ message = $ _POST ['textarea'];”和“echo $ result + $ message;”我不确定这是否是在文本区域框中生成结果的正确方法,以及在单独的文本框中显示里程驱动和总成本。我想要这个按钮来完成所有三个任务。有没有办法用PHP有效地做到这一点?

编辑:已修正的代码版本。谢谢@Fred-ii - !

<?php
    if(isset($_POST['submit'])) {
    $x = $_POST['beginningOdometerReading'];
    $y = $_POST['endingOdometerReading'];
    $z = $_POST['daysRentedCar'];
    $miles = $y - $x; 
    $result = (15 * $z) + ($miles * 0.12);
    $message = $_POST['textarea'];
  echo $result + $message; } 
?>
<html>
<head>
</script>
</head>
<body>
<div align="center">
<hr><br>
<form action="index4.php" method="post" name id="Main">
<input type="text" id="name" name="customerName" placeholder="Enter your name here" size="30px">   
<br><br>
<input type="text" id="address" name="customerAddress" placeholder="Enter your street address here" size="50px">   
<br><br>
<input type="text" id="city" name="customerCity" placeholder="What city do you live in?" size="30px">   
<br><br>
<input type="number" id="zip" name="customerZip" placeholder="Enter your zip code" size="30px">   
<br><br>
<input type="number" id="bOdometer" name="beginningOdometerReading" placeholder="Start odometer reading" size="80px">   
<br><br>
<input type="number" id="eOdometer" name="endingOdometerReading" placeholder="End odometer reading" width="80px"> 
<br><br>
<input type="number" id="daysRented" name="daysRentedCar" placeholder="Days rented" size="50px">  
<br><br>

<input type="submit" id="submit" value="Submit"/>
<br><br>
Miles Driven: <input type="number" id='miles' min="1" max"10000" readonly="" />
Total Cost: <input type="number" id='result' min="1" max"10000" readonly="" />
<br><br>
Summary: <textarea cols="30" rows="2" name="thetextarea" id="textarea">     </textarea>
<br><br>
<input type="reset" value="Reset">
</form>       
<hr>
</div>
</body>

2 个答案:

答案 0 :(得分:3)

这里有一些问题。

条件陈述存在的一个问题是:

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

它正在寻找一个名为“submit”的命名元素,你的提交按钮没有命名。

<input type="submit" id="submit" value="Submit"/>

将其命名为:

<input type="submit" name="submit" id="submit" value="Submit"/>

你可能一直依赖于“id”。在这种情况下,你不能。

这就是你回到空白页面的原因。

使用else{ echo "Error"; }会回显“错误”。

例如:

<?php
    if(isset($_POST['submit'])) {
    $x = $_POST['beginningOdometerReading'];
    $y = $_POST['endingOdometerReading'];
    $z = $_POST['daysRentedCar'];
    $miles = $y - $x; 
    $result = (15 * $z) + ($miles * 0.12);
    $message = $_POST['textarea'];
  echo $result + $message; } 

  else { echo "Error"; }
?>

然后你有

$message = $_POST['textarea'];

但您的textarea名为name="thetextarea"

  • 这两个都需要匹配名称。

您还使用了错误的连接运算符+

echo $result + $message;

需要是一个点。 +符号是串联的JS / C ++方法,如果其中一个变量包含字符串。

echo $result . $message;

echo $result . " ". $message;

如果它是两个变量的数学方程式,那么是;这本来是一个有效的运算符,只是不是在这种情况下,因为你试图从$message变量回应,该变量是“textarea”,是“text”而不是整数。

旁注:为了确保您确实将整数传递给POST数组,请向其添加(int)。示例:$x = (int)$_POST['beginningOdometerReading'];

编辑:我在表单中发现了一些错误。

您有2个max"10000"个实例,它缺少等号max="10000"

并且您可能缺少这两个的名称属性(我已经概述了=的{​​{1}}符号。

max"10000"
  • 如果您将此标记为依赖JS,请编辑您的问题并添加该代码。但是,PHP中没有代码支持此功能。

  • Miles Driven: <input type="number" id='miles' min="1" max"10000" readonly="" /> Total Cost: <input type="number" id='result' min="1" max"10000" readonly="" /> <form>

  • 中存在语法错误
  • 您需要相应地调整实际代码。

重写:

name id="Main"

错误报告会发出两个未定义的索引通知。

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

<?php
    if(isset($_POST['submit'])) {
    $x = $_POST['beginningOdometerReading'];
    $y = $_POST['endingOdometerReading'];
    $z = $_POST['daysRentedCar'];
    $miles = $y - $x; 
    $result = (15 * $z) + ($miles * 0.12);
    $message = $_POST['thetextarea'];
  echo $result . " " . $message; } 

  else { echo "Error"; }
?>

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 1 :(得分:0)

Try to give name for input type `submit` button like

<input type="submit" name="submit" id="submit" value="Submit"/>

并尝试从 action='' 中删除,因为当您直接提交时需要index4.php

  表单声明中的

错误,您也没有提供name,请将其留空name id="Main"

<form action="index4.php" method="post" name="Main" id="Main">
  

并使用像

这样的echo语句
echo $result,$message; }