【问题标题】:Can't update php database with a flash application无法使用 Flash 应用程序更新 php 数据库
【发布时间】:2011-04-12 14:12:57
【问题描述】:

我在这里遇到了一些问题。我正在尝试为我的公司开发一个闪存数据库管理器,并且我已经让插入和“搜索”功能正常工作。尝试使 UPDATE 工作时出现问题。我将在此处发布两个代码:

PHP(更新)

<?php
//connect to the local MySQL
$connect=mysql_connect("localhost", "****", "****");

//select your database
mysql_select_db("****");

//Variables
$ID=$_POST[IDPost];

$Nome=$_POST[Nome];
$Tipo=$_POST[Tipo];
$Empresa=$_POST[Empresa];
$Morada=$_POST[Morada];
$CodPostal=$_POST[CodPostal];
$Email=$_POST[Email];
$Contacto1=$_POST[Contacto1];
$Contacto2=$_POST[Contacto2];
$DataNascimento=$_POST[DataNascimento];
$Profissao=$_POST[Profissao];
$Notas1=$_POST[Notas1];
$Notas2=$_POST[Notas2];

//query the database
$query="

UPDATE 
    GestaoClientes 
SET 
    Nome = '$Nome',
    Tipo = '$Tipo',
    Empresa = '$Empresa',
    Morada = '$Morada',
    CodPostal = '$CodPostal',
    Email = '$Email',
    Contacto1 = '$Contacto1',
    Contacto2 = '$Contacto2',
    DataNascimento = '$DataNascimento',
    Profissao = '$Profissao',
    Notas1 = '$Notas1',
    Notas2 = '$Notas2'
WHERE 
    ID = '$ID'";

$result=mysql_query($query);

if (!mysql_query($query,$connect))
{
    die('Error: ' . mysql_error());
    echo "Result=NotOk";
}else{
    echo "Result=Ok";
}

mysql_close($connect);
?>

闪现

public function editInfo(MouseEvent):void
        {
            var request:URLRequest = new URLRequest ("link.php");
                request.method = URLRequestMethod.POST; 
                trace("called");

                var variables:URLVariables = new URLVariables(); 

                variables.IDPost = NField.text;

                variables.Nome = NomeField.text;
                variables.Email = NomeField.text;
                variables.Morada = MoradaField.text;
                variables.CodPostal = CodPostalField.text;
                variables.Tipo = TipoField.text;
                variables.Empresa = EmpresaField.text;
                variables.Profissao = ProfissaoField.text
                variables.DataNascimento = DataNascimentoField.text;
                variables.Notas1 = Notas1Field.text;
                variables.Notas2 = Notas2Field.text;

                request.data = variables; 

                var loader:URLLoader = new URLLoader (request); 
                loader.addEventListener(Event.COMPLETE, onComplete); 
                loader.dataFormat = URLLoaderDataFormat.VARIABLES; 
                loader.load(request); 

            function onComplete(e:Event):void 
            {
                trace("ok");
            }

}

当我尝试在浏览器中访问 php 时,如果只是给了我错误:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Nome' = '', 'Tipo' = '', 'Empresa' = '', 'Morada' = '', 'CodPostal' = '', 'Emai' at line 4

这可能是正常的,因为我没有通过浏览器传递任何“POST”变量。

尝试此代码时,闪存不会返回任何错误,因此我认为连接本身是好的,但它也不会进行更新。这段代码有问题吗?谢谢。

更新:我现在更改了我的代码,它没有显示语法错误,但仍然没有在闪存中更新。任何想法为什么? :/ 谢谢

【问题讨论】:

  • 您应该先转义所有 $_POST 变量,然后再尝试对它们进行 SQL 查询。
  • 什么是“PHP 数据库”?您的 SQL 注入预防措施在哪里?
  • @Marco,你的 PHP 太可怕了。您对无数攻击持开放态度,并且可能一些粗略的数据正在破坏您的查询。您应该为您的数据库工作实施 PDO。见phpro.org/tutorials/Introduction-to-PHP-PDO.html
  • @Brad 他正在做的事情可以使用mysql_* 系列函数完美且安全地完成。无需为小型 Flash 辅助工具切换 PDO
  • 我对此很陌生,我只是想让它尽可能轻松地工作,所以我不知道你对 sql 注入预防的意思。 o_o 另一方面,我隐藏了数据库名称并通过了,但我相信它的工作原理,正如我所说,flash 在调用它时不会返回任何错误,而且我已经在 INSERT 和普通 SELECT 中完成了这些操作。对不起,我刚刚开始,只是从网上抓了一些教程,然后从那里开始。

标签: php mysql flash actionscript-3


【解决方案1】:

您需要对列名使用反引号而不是单引号:

`Nome`

这是语法错误的原因。也可以不使用引号。

此外,您的代码容易受到SQL injection 的攻击。阅读该问题,这对安全至关重要。

要修复手头的漏洞,请对每个变量执行以下操作:

$Nome = mysql_real_escape_string($_POST["Nome"]);

然后插入转义变量:

SET `Nome` = '$Nome',

【讨论】:

  • 我现在已经更改了代码并更新了问题。你能看看它并试着看看它是怎么回事吗?查询似乎已修复,但 flash 仍然没有更新..
【解决方案2】:

我建议你仔细看看escaping your external input!将变量直接插入到查询中会使您面临注入,这是一个巨大的安全问题。 (read this)。

您遇到的问题是您在字段名称周围使用单引号,这是不正确的。

MySQL 使用反引号 ( ` ),但我不建议使用它们,因为它们限制了对其他 sql 应用程序的可移植性。

【讨论】:

    【解决方案3】:

    删除列名周围的单引号。允许使用反引号 (`),不允许使用单引号 (')。

    我希望您意识到,如果您的代码真的像上面那样,那么您的应用程序中就有一个巨大的安全漏洞,因为任何人都可以执行任意 sql 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多