2009-11-20 123 views
0

HI Guys,簡單的PHP問題?

我有以下問題。我試圖從我的Iphone應用程序連接到一個php站點,以訪問mySql數據庫,以獲得正確的信息。

這是我的代碼:

<?php 
    mysql_connect ("localhost", "user", "pass") or die (mysql_error()); 
    echo "Connected to MySql <br /><hr />"; 
    mysql_select_db ("database_com") or die (mysql_error()); 
    echo "Connectted to Database <br /><hr />"; 

    $country = $_POST['country'];// THIS IS THE VALUE I WANT TO LOAD INTO THE SELECT STATEMENT 
    echo "value <br /><hr />" . $country; 

    $query = "SELECT * FROM world WHERE land='$country'"; 
    $result = mysql_query($query) or die (mysql_error()); 
    while ($row = mysql_fetch_array($result)) { 
     $1 = $row['1']; 
     $2 = $row['2']; 
     $3 = $row['a3']; 
     $4 = $row['4']; 



     $xmltext = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<country></country>"; 
     $xmlobj = simplexml_load_string($xmltext); 


     $xmlobj->addChild("1", $1); 
     $xmlobj->addChild("2", $2); 
     $xmlobj->addChild("a3", $a3); 
     $xmlobj->addChild("4", $4); 
     print header("Content-type: text/plain") . $xmlobj->asXML(); // Place future code ABOVE this line 

     $xml->save(statistic.xml); 

     } 
    ?>

如果我硬編碼的土地=價值「德國」我得到一個答案,但如果我做其他的事情,沒有東西出來。

我希望你能幫助我。

+0

您是否將$ country作爲POST變量發送?你能告訴我們你使用的表單嗎? – 2009-11-20 14:33:03

+0

轉義你的變量。 $ _POST ['contry']是否填充? – NDM 2009-11-20 14:33:44

回答

4

你有一個表格將國家張貼到你的php頁面嗎?如果是這樣,是使用method =「post」的形式?如果你堅持國家的網址,使用$ _GET而不是$ _POST。

此外,請調用mysql_real_escape_string($ _ POST ['country'])以避免SQL注入問題(如某人刪除您的所有數據庫)。

另外,該線路:

print header("Content-type: text/plain") . $xmlobj->asXML(); 

有一些問題。它應該是:

header("Content-type: text/plain"); 
print $xmlobj->asXML(); 

但是,打印其他東西后不能發送頭文件 - 就像在腳本的早期回聲調用一樣。這聽起來不像是一個問題,但它會是當你的查詢工作。

此外,你循環的結果集。如果您只希望獲得一個結果,請將while循環消除。如果你有多個結果,你會因header()調用而出錯。

+0

謝謝你。我在這裏試圖打印XML,現在它正在工作。 – 2009-11-20 19:25:44

1

如果你print_rvar_dump($_POST)會發生什麼情況?乍一看,它看起來像你的POST是空的,或至少$_POST['country']

+0

是的帖子是空的。 :-) duuno它是如何發生的,但現在它回到了正軌,它正在工作:-) – 2009-11-20 19:26:28

1

您是否檢查$ _POST ['country']實際上是否包含值?

嘗試

echo $query; 

和更新帖子,所以我們可以看到的內容。

0

嘗試一個簡單的錯誤捕獲:

<?php 
mysql_connect ("localhost", "user", "pass") or die (mysql_error()); 
echo "Connected to MySql <br /><hr />"; 
mysql_select_db ("database_com") or die (mysql_error()); 
echo "Connectted to Database <br /><hr />"; 

$country = $_POST['country'];// THIS IS THE VALUE I WANT TO LOAD INTO THE SELECT STATEMENT 
echo "value <br /><hr />" . $country; 
if (!isset($country) || $country == FALSE /* other fail conditions */) { 
    echo "<p>There was a problem; one, or more, error condition occurred:</p>"; 
    echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>"; 
} 
else { 
    // database access stuff 
} 
?> 

這樣,如果沒有設置值(或錯誤的測試得到滿足)你當前定義的所有變量的顯示和數據庫訪問沒有按不會發生。

這很粗糙,但它有時有助於看到發生了什麼。不過,我個人認爲,你更可能僅僅是遇到了$_POST['country']而不是$_POST['contry']或其他什麼,或者使用$_POST而不是$_GET

0

的一個好方法來調試這是把這個區塊在你的文件的頂部:

<?php 
if (!isset($_POST)) { 
    die('A $_POST is required for this page.'); 
} 
... 
0

編寫代碼這種和平能調試程序

<?php 
    if (!isset($_POST)) { 

    } 
?> 
0

如果

$country = $_POST['country']; 

正在返回比您剛需要更改的值恰當的值

$query = "SELECT * FROM world WHERE land='$country'"; 

$query = "SELECT * FROM world WHERE land='".$country."'"; 

否則只是檢查是否正在接收$ _ POST [「國家」]值正確如果不是那麼第一次調試。