2012-04-09 75 views
0

我使用下面的代碼從一個Android應用程序的數據發佈到一個PHP腳本:怪誕當數據發佈到PHP腳本

public class Upload extends Activity implements OnClickListener { 
EditText joke; 
Button upload = (Button) findViewById(R.id.bUpload); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.upload); 
    upload.setOnClickListener(this); 
} 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.bUpload: 
     uploadJoke(); 
     break; 
    } 

} 
private void uploadJoke() { 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://xxxx/telejoke.php"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("username", "test")); 
     nameValuePairs.add(new BasicNameValuePair("joke", joke.getText().toString())); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

    } catch (ClientProtocolException e) { 
    } catch (IOException e) { 
    } 
} 

此代碼將數據發送到PHP腳本,然後將它發送到一個SQL數據庫。這些數據顯示在SQL數據庫中,但是如果我嘗試類似echo $username的內容,那麼當我轉到http://xxxx/telejoke.php時,它不會顯示用戶名。

PHP腳本:

<?php 
    include 'DBConnect.php'; 
    include 'JokeValidate.php'; 

    $username = $_POST['username']; 
    $joke = $_POST['joke']; 
    $dbname = 'Telejoke'; 
    mysql_select_db($dbname); 

    echo $username. " " . $joke; 

    if (validate()){ 
    $query = "INSERT INTO jokes (username, joke) VALUES ('$username','$joke')"; 
    mysql_query($query) or die('Error, insert query failed'); 
    } 
    mysql_close($conn); 
?> 

請幫助。除了將它發送到數據庫之外,我想用PHP來發布數據。

+0

如果數據使它到數據庫好,那麼我們需要看telejoke.php,因爲沒有什麼錯java代碼。 – drew010 2012-04-09 17:53:17

+0

爲什麼不發佈你的php代碼?這個客戶端代碼不會幫你處理服務器代碼中的問題 – EMI 2012-04-09 17:54:21

+0

按鈕點擊是definitley工作。上傳後,我可以在數據庫中看到數據。 EditText笑話用於'nameValuePairs.add(new BasicNameValuePair(「joke」,joke.getText()。toString())); ' – moesef 2012-04-09 18:28:20

回答

2

我猜register_globals已關閉(這很好)!

你必須通過$ _POST ['用戶名'](當然在telepost.php中)來解決用戶名。

OKAY(你發佈你的php腳本後,我想我知道了)。 你說「去http://xxx/telejoke.php後我看不到我的用戶名,但數據上傳正確」。

- >是的,這種行爲是正確的。 您不會將任何POST參數傳遞給您的php腳本,因此$ _POST ['username']爲空。

- >但是,如果您通過應用程序調用腳本,則將所需的POST參數(用戶名,笑話等)傳遞給腳本。所以它可以在數據庫中正確寫入數據。

另外,您應該優化您的SQL /腳本以防止SQL注入。 一個壞的用戶可能會對你的網站造成損害(例如,刪除所有的笑話,等等)

+0

那麼,當我從我的應用程序調用腳本,然後去http://xxx/telejoke.php,它不應該回應最後發佈的笑話的用戶名?如果是這種情況,則不會發生。我後來擔心用戶注入,但感謝您的支持。 – moesef 2012-04-09 19:27:21

+1

不,因爲它是一個新的請求(默認情況下,http的狀態更少 - >沒有信息存儲),因此您必須將請求參數傳遞給腳本,否則不會發生任何事情。但是你可以創建一個頁面 - 讓我們說listjokes.php - 你可以看到存儲在數據庫中的所有笑話。 – zip 2012-04-10 07:38:46

+0

哦,呃。感謝您的幫助:P – moesef 2012-04-10 17:27:44