相关疑难解决方法(0)

在HTML表单上传中过滤扩展名

我有一个简单的HTML上传表单,我想指定一个默认扩展名(例如"*.drp").我已经读过这样做的方法是通过输入标签的ACCEPT属性,但我不知道具体如何.

<form enctype="multipart/form-data" action="uploader.php" method="POST">
Upload DRP File:
<input name="Upload Saved Replay" type="file" accept="*.drp"/><br />
<input type="submit" value="Upload File" />
</form>
Run Code Online (Sandbox Code Playgroud)

编辑 我知道使用javascript可以验证,但我希望用户只在他的弹出对话框中看到".drp"文件.此外,我不太关心此应用程序中的服务器端验证.

html webforms file-upload

41
推荐指数
3
解决办法
11万
查看次数

在Controller中进行事务管理是不是很糟糕?

我正在使用Yii框架开发PHP/MySQL应用程序.

我遇到过以下情况:

在我VideoController,我有一个actionCreate创建一个新的视频,actionPrivacy 并设置视频的隐私.问题是在调用模型actionCreatesetPrivacy方法期间Video,当前有一个事务.我希望视频的创建也在事务中,这会导致错误,因为事务已经处于活动状态.

在对这个答案的评论中,比尔卡文写道

因此,不需要使Domain Model类或DAO类管理事务 - 只需在Controller级别执行即可

这个答案中:

由于您使用的是PHP,因此您的交易范围最多只是一个请求.所以你应该只使用容器管理的事务,而不是服务层transa.也就是说,在处理请求开始时启动事务,并在完成处理请求时提交(或回滚).

如果我管理控制器中的事务,我会有一堆看起来像这样的代码:

public function actionCreate() {
  $trans = Yii::app()->getDb()->beginTransaction();
  ...action code...
  $trans->commit();
}
Run Code Online (Sandbox Code Playgroud)

这导致我需要事务处理的许多地方重复代码.

或者我可以将它重构为父类的beforeAction()afterAction()方法,Controller然后父类会自动为正在执行的每个操作创建事务.

这种方法会有问题吗?PHP应用程序的事务管理有什么好的做法?

php mysql design-patterns transactions

21
推荐指数
2
解决办法
2637
查看次数

PHP PDO对象如何确定它是否已经存在于MySQL事务中?

我有两个复杂的PHP对象,每个对象都有几个MySQL表中的数据.

有时,我只需要从数据库中删除一个对象A,这需要3个SQL语句.

有时,我需要从数据库中删除一个对象B,这需要4个SQL语句,并且需要查找和删除对象B拥有的所有对象A.

所以在函数delete_A()中,我在一个事务中执行那些语句.在delete_B()函数内部,我想运行一个覆盖delete_A()内部活动的大型事务.如果删除B的整个原子都失败了,我需要在回滚中恢复它的所有A.

如果尚未运行更大的事务,如何更新delete_A()的定义以仅打开新事务.

我希望能够做这样的事情,但该autocommit属性似乎没有被改变beginTransaction()

function delete_A($a){
  global $pdo;
  $already_in_transaction = !$pdo->getAttribute(PDO::ATTR_AUTOCOMMIT);
  if(!$already_in_transaction){
    $pdo->beginTransaction();
  }

  //Delete the A

  if(!$already_in_transaction){
    $pdo->commit();
  }
}
function delete_B($b){
  global $pdo;
  $pdo->beginTransaction();
  foreach($list_of_As as $a){
    delete_A($a);
  }
  $pdo->commit();
}
Run Code Online (Sandbox Code Playgroud)

php mysql pdo

6
推荐指数
2
解决办法
2144
查看次数

Zend框架抱怨"已经有一个活跃的交易"

我们正在使用zend_db_table,因为Zend Framework抱怨两个事务处于活动状态,所以我们遇到了一些问题:

[message:protected] => There is already an active transaction
[string:Exception:private] => 
[code:protected] => 0
[file:protected] => /var/www/vhosts/test.local/private/library/Zend/Db/Adapter/Pdo/Abstract.php
[line:protected] => 305
[trace:Exception:private] => Array
Run Code Online (Sandbox Code Playgroud)

这是Controller中的代码:

     public function convertAction()
{
    $this->setNoRender();

    // If the quote is a copy of a previous one, fetch all the datas
    $quoteId = Zend_Filter::filterStatic($this->getRequest()->getParam('qte_id'), 'int');
    $quoteTable = new Model_QuotesTable();
    $quoteRow = $quoteTable->findById($quoteId);
    if (count($quoteRow)) {
        $clonedId = $quoteRow->convertToJob();
        $this->flashMessageRedirect('Quotation successfully converted', '/jobs/edit/job_id/' . $clonedId);
    } else {
        $this->flashMessageRedirect('Unable to find the quote to be converted', '/quotes'); …
Run Code Online (Sandbox Code Playgroud)

mysql zend-framework transactions zend-db

2
推荐指数
1
解决办法
5662
查看次数