2011-04-12 99 views
0

我在这里遇到一些问题。我正在为我的公司开发一个闪存数据库管理器,并且我已经拥有插入和“搜索”功能。尝试使UPDATE工作时出现问题。生病后两码的位置:无法使用Flash应用程序更新php数据库

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”变量。

闪存doesent在尝试这段代码时会返回任何错误,所以我假设连接本身没问题,但是它还没有进行更新。这段代码有什么问题吗?谢谢。

更新:我现在更改了我的代码,它不显示语法错误,但仍在闪存中进行更新。任何意识为什么? :/感谢

+1

在尝试对它们执行SQL quey之前,您应该转义所有$ _POST变量。 – Twelve47 2011-04-12 14:15:07

+0

什么是“PHP数据库”?您的SQL注入预防在哪里? – 2011-04-12 14:15:52

+0

@Marco,你的PHP很可怕。您可以随时随地进行大量攻击,并且可能有些粗略的数据正在破坏您的查询。您应该为您的数据库工作实施PDO。请参阅http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html – Brad 2011-04-12 14:17:30

回答

3

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

`Nome` 

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

此外,您的代码容易受到SQL injection的影响。仔细阅读这个问题,这对安全至关重要。

要修复漏洞在手,做每一个变量如下:

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

然后插入逃脱变量:

SET `Nome` = '$Nome', 
+0

我现在已经改变了代码并更新了问题。你可以看看它,并试图看看它是什么?该查询似乎已得到修复,但闪存仍然在更新中。 – FoxLift 2011-04-12 15:11:08

1

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

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

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

1

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

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