2011-04-12 53 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代碼。