PHP表单更新最佳实践

时间:2012-03-16 16:31:31

标签: php sql

我确定我写得很糟糕。我有一个简单的表单,您输入位,将信息发送到进程页面并在数据库的表中插入一行。我的问题是插入部分工作正常。但是我显示了页面内的模板类或其他任何内容。只是一个空白页面。它让我疯狂。

功能

     Public function UpdateReason($reason, $bundlereference) {
      error_reporting(E_ALL ^ E_NOTICE);
      $db_selected = mysql_select_db(DB_DATABASE_NAME, $this->conn);

     if (!$db_selected) {
     die("Can't use db : " . mysql_error());
      }

     $_reason = mysql_real_escape_string($reason,$this->conn);
     $_bundlereference = mysql_real_escape_string($bundlereference,$this->conn);

     $sql = "UPDATE `ArchiveBundle`
        SET `Issue` = '" . $_reason . "'
        WHERE `BundleReference` = '" . $_bundlereference . "'";

    mysql_query($sql, $this->conn);

     die(mysql_error());
     exit;
  }

表格

         <table>
                    <form method='post' action='addissue.php'>
                    <p>Reason: <input type='text' name='reason' /></p><br/>
                    <p><input type='hidden' name='bundlereference' id='Username'  
          value='" . $x['Reference'] . "' /></p>
                    <input type='submit' name ='add'/>
                </form>
            </table>

流程页

    <?php

// First of all initialise the user and check for permissions
require_once "/var/www/users/user.php";
$user = new CHUser(2);


// Initialise the template
require_once "/var/www/template/template.php";
$template = new CHTemplate();

// And create a cid object
    require_once "/var/www/Testing/DisplayWIPOnLocation.php";
$BundleProgress= new CHWIPProgress();

    $reason = $_POST['reason'];
    $reference = $_POST['bundlereference'];



    $issue = $BundleProgress->UpdateReason($_POST['reason'],$_POST['bundlereference']);
    Print "Your information has been successfully added to the database."; 


  $template->SetTag("content", $content);
  echo $template->Display();


    ?>

我也想知道/了解php中表单的最佳实践

1 个答案:

答案 0 :(得分:6)

您未获得输出的原因如下两行。这会杀死你的脚本。只需删除这些。

 die(mysql_error());
 exit;

总的来说,这并不可怕。您正在使用对象,并且在插入数据库之前您正在清理用户输入。我有几点建议。

  • 请勿在生产脚本中使用die()。正确处理错误和异常。
  • 查看mysql的预准备语句(PDO)或存储过程。
  • 您可以在模板中创建字段并通过模板类传递该值,而不是print "Your information has been added..."行吗?
  • 您设置了$reason$reference,然后传递$_POST中的值,生成那些未使用的变量。也许这仅仅是因为测试代码?
  • 根据您的需要,您可能需要在运行更新查询之前考虑检查表单收到的数据是否有效。如果$ reason或$ bundlereference不是有效值怎么办?