【问题标题】:How to process data in a form using php without submitting it如何使用php处理表单中的数据而不提交
【发布时间】:2015-05-01 10:35:58
【问题描述】:

当我输入视频 ID 和贷款期限,然后点击 FindDetails 按钮时,我的表单将显示视频名称、租用价格和租用总成本。

这会导致两个问题:

  1. 提交表单会擦除视频 ID 和贷款期限。老鼠!
  2. 无法调整要借视频看多少天 贷款成本会自动调整。

NB 我包含所有 php 脚本,因为我实际上需要提交表格以在 csv 文件中写入预订的详细信息。我不确定这是否会停止解决方案。

PHP

<?php
if (isset($_POST['FindDetails'])) {
    $ID = $_POST['videoID'];
    $Days = $_POST['days'];

//Open the CSV file 
    $file_handle = fopen("video.csv", "r");
//loop until hit the last line feof)
    while (!feof($file_handle)) 
        {
//put data in each line [0],[1] etc into a variable.
        $info = fgetcsv($file_handle);
// Check its the one we want.
        if($info[0]==$_POST["videoID"])
                {
            $videoName = "$info[2]";
            $videoCost ="$info[4]";
            $costOfHire= $videoCost*$Days;
                }
            }
            fclose($file_handle);
}

if (isset($_POST['submit'])) {
$ID = $_POST['videoID'];
$VideoName = $_POST['videoName'];
$VideoCost = $_POST['videoCost'];
$Days = $_POST['days'];
$Total = $_POST['total'];
$DateFrom = $_POST['date_from'];
$DateTo = $_POST['date_to'];
$StudentName = $_POST['studentName'];

   //Saving loan details
   $csv_file = 'loans.csv';
    if (is_writable($csv_file)) {
        if (!$csv_handle = fopen($csv_file,'a')) {
        // this line is for troubleshooting
        echo "<p>Cannot open file $csv_file</p>";
        exit;
        }

   $csv_item = "\"$ID\",\"$VideoName\",\"$VideoCost\",\"$Days\",\"$Total\",\"$DateFrom\",\"$DateTo\",\"$StudentName\"\n";
    if (is_writable($csv_file)) {
        if (fwrite($csv_handle, $csv_item) === FALSE) {
        //for testing
        //echo "Cannot write to file";
        exit; } 
    }
   fclose($csv_handle);
   }
}

if (isset($_POST['submit'])) {
echo "<p style='padding: .5em; border: 2px solid red;'>Thanks for booking the Video.  Please collect from E24 on the date ordered.</p>";
}
?>

HTML:

贷款

    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Enter the Video ID below
<table id="tables" class="form" style="width:100%;">
    <tr>
        <td>Video ID</td>
        <td><input type="text" value="" name="videoID" id="videoID" placeholder= "Enter A Number between 1 and 8"/></td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" name="FindDetails" id="FindDetails" value="Search Video" /></td>
    </tr>
    <tr>
        <td>Video Name</td>
        <td><input type="text" value="<?php echo (isset($videoName))?$videoName:'';?>"  name="videoName" id="videoName"/></td>
    </tr>
    <tr>
        <td>Video Rental Cost (per day)</td>
        <td><input type="text" value="<?php echo (isset($videoCost))?$videoCost:'';?>" name="videoCost" id="videoCost"/></td>
    </tr>
    <tr><td></td><td></td></tr>
    <tr>
        <td>Number of days</td>
        <td><input type="text" value="" name="days" id="days" placeholder= "Enter the number of days you wish to borrow the video for" /></td>
    </tr>
    <tr>
        <td>Total cost</td>
        <td><input type="text" value="<?php echo (isset($costOfHire))?$costOfHire:'';?>" name="total" id="total"/></td>
    </tr>

【问题讨论】:

  • 查看隐藏的表单字段

标签: php forms process


【解决方案1】:

第 1 部分

我假设呈现的 HTML 和 PHP 部分在同一个文件中。

例如,您使用&lt;?php echo (isset($costOfHire))?$costOfHire:'';?&gt; 来访问PHP 代码中设置的变量。

为什么不使用&lt;?php echo (isset($ID))?$ID:'';?&gt; 简单地回收提交的视频ID?然后对贷款变量的长度执行相同的操作。

第 2 部分

这是实时贷款成本计算的一种方法。 javascript 将在文档的&lt;head&gt; 中的&lt;script&gt;&lt;/script&gt; 标记之间移动。

function updateLoanCost(loanPeriod) {
    var costDisplayEl = document.getElementById("loanCostDisplay");
    
    var dollarsPerDay = 3;
    costDisplayEl.innerText = "$" + loanPeriod * dollarsPerDay;
}
Enter a number of days <br />
<input type = "number" id = "test" onchange = "updateLoanCost(this.value);"/>
<div id = "loanCostDisplay"></div>

【讨论】:

  • 我还应该补充一点:使用cookies 可能是一个不那么老套的解决方案。以防以后您希望信息在多个页面中保持不变。
  • 当然!!是的 适用于 VideoID 和贷款变量的长度。谢谢!只是想弄清楚你关于java脚本的第二个建议。我想要尽可能少的代码,因为我还需要检查视频是否也被学生预订了!
  • 查看我对第 2 部分的编辑。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-11-23
  • 2013-04-22
  • 2011-01-27
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
相关资源
最近更新 更多