2013-01-02 62 views
0

我試圖插入來自android應用到mysql數據庫表中的數據。 但不知何故數據沒有被插入..我認爲android和mysql數據庫沒有連接。我沒有從android方面得到任何錯誤。但在PHP方面...如果我運行網址..我得到通知。那個未定義的變量。但這些變量是在android中。記錄中,無法從Android的插入MySQL數據庫表

這是我的android端代碼:

package com.example.insertintophp; 

import java.util.ArrayList; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    EditText name,city,email,contact,msg; 
    Button insert; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     name =(EditText)findViewById(R.id.txtname); 
     city =(EditText)findViewById(R.id.txtcity); 
     email =(EditText)findViewById(R.id.txteid); 
     contact =(EditText)findViewById(R.id.txtno); 
     msg =(EditText)findViewById(R.id.txtmsg); 
     insert=(Button)findViewById(R.id.btninsert); 

     insert.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) 
      { 
       // TODO Auto-generated method stub 
       String nm = name.getText().toString(); 
       String ct = city.getText().toString(); 
       String emailid = email.getText().toString(); 
       String no = contact.getText().toString(); 
       String str = msg.getText().toString(); 
       insertRecords(nm, ct, emailid, no, str); 

      } 
      private void insertRecords(String nm,String ct,String emailid,String no,String str) 
      { 
       ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5); 
        nameValuePairs.add(new BasicNameValuePair("name", nm)); 
        nameValuePairs.add(new BasicNameValuePair("city",ct)); 
        nameValuePairs.add(new BasicNameValuePair("email",emailid)); 
        nameValuePairs.add(new BasicNameValuePair("contact",no)); 
        nameValuePairs.add(new BasicNameValuePair("msg",str)); 
        sendData(nameValuePairs); 
      } 
      private void sendData(ArrayList<NameValuePair> data) 
      { 
       try 
       { 
        HttpClient httpclient = new DefaultHttpClient(); 
        HttpPost httppost = new HttpPost("http://10.0.2.2:8080/demo/insertData.php"); 
        httppost.setEntity(new UrlEncodedFormEntity(data)); 
        HttpResponse response = httpclient.execute(httppost); 

       } 
       catch (Exception e) { 
        // TODO: handle exception 
        Log.e("log_tag", "Error: "+e.toString()); 
       } 
      } 
     }); 

    } 


} 

這是我的PHP端代碼:

<?php 

$icon = mysql_connect("localhost","root",""); 
if(!$icon) 
{ 
die('Could not connect : ' . mysql_error()); 
} 
mysql_select_db("db_best_voyage", $icon)or die("database selection error"); 

echo json_encode($data); 
$name=$_POST['name']; 
$city=$_POST['city']; 
$email = $_POST['email']; 
$contact = $_POST['contact']; 
$msg = $_POST['msg']; 

mysql_query("INSERT INTO ctable (name,city,email,contact,msg) VALUES ('".$name."', '".$city."', '".$email."', '".$contact."', '".$msg."')"); 
mysql_close($icon); 

?> 
+0

[**在新的代碼,請不要使用'mysql_ *'功能**](HTTP:// bit.ly/phpmsql)。他們不再被維護[並被正式棄用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。如果你選擇PDO,[這裏是一個很好的教程](http://j.mp/PoWehJ)。這也將擺脫那個令人討厭的SQL注入漏洞。 – PeeHaa

+0

這是你粘貼在這裏的整個php代碼嗎? – Kanth

+0

@Appu是..它是完整的代碼。 –

回答

1

這是因爲

1)您尚未聲明/初始化任何$ data變量,但是您將其編碼爲json和回顯。

2)此外,您在訪問後的參數及像下面在數據庫中插入後,他們呼應jsonencoded數據。

$name=$_POST['name']; 
    $city=$_POST['city']; 
    $email = $_POST['email']; 
    $contact = $_POST['contact']; 
    $msg = $_POST['msg']; 

    mysql_query("INSERT INTO ctable (name,city,email,contact,msg) VALUES ('".$name."', '".$city."', '".$email."', '".$contact."', '".$msg."')"); 

echo json_encode($data); 

確保爲某些數據提供$數據以確保您成功插入記錄。

編輯:

測試此首先從你的瀏覽器:

<?php 

$output = array(); 

$icon = mysql_connect("localhost","root",""); 
if(!$icon) 
{ 
die('Could not connect : ' . mysql_error()); 
} 
mysql_select_db("db_best_voyage", $icon)or die("database selection error"); 

echo json_encode($data); 
$name= "name1"; 
$city= "city1"; 
$email = "email1"; 
$contact = "contact1"; 
$msg = "msg1"; 

$insert1 = mysql_query("INSERT INTO ctable (name,city,email,contact,msg) VALUES ('".$name."', '".$city."', '".$email."', '".$contact."', '".$msg."')"); 
mysql_close($icon); 

if($insert1) 
{ 
     $output["success"] = 1; 
    $output["message"] = "Successfully inserted"; 

    // echoing JSON response 
    echo json_encode($output); 
} 
else 
{ 
    $output["success"] = 0; 
    $output["message"] = "insertion failed......"; 

    // echoing JSON response 
    echo json_encode($output); 
} 


?> 
+0

亞.... $的數據是不是有什麼..它是印刷零。這意味着..什麼是錯的Android中端編碼..但在Android的側面,我沒有得到任何異常。 –

+0

沒有什麼錯在android系統方面,你必須準備$數據有它的一些數據,並對其進行編碼。做這件事情測試是否真的在那裏出了問題。編輯我的答案。 – Kanth

+0

我正在插入失敗 –

0

你的代碼perfact但有些更改,請試試這個:

public class MainActivity extends Activity { 

EditText name,city,email,contact,msg; 
Button insert; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    name =(EditText)findViewById(R.id.txtname); 
    city =(EditText)findViewById(R.id.txtcity); 
    email =(EditText)findViewById(R.id.txteid); 
    contact =(EditText)findViewById(R.id.txtno); 
    msg =(EditText)findViewById(R.id.txtmsg); 
    insert=(Button)findViewById(R.id.btninsert); 

    insert.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
      String nm = name.getText().toString(); 
      String ct = city.getText().toString(); 
      String emailid = email.getText().toString(); 
      String no = contact.getText().toString(); 
      String str = msg.getText().toString(); 

     insertRecords(nm,ct,emailid,no,str); 
     } 

    }); 
} 
private void insertRecords(String nm,String ct,String emailid,String no,String str) 
     { 
      ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(5); 
       nameValuePairs.add(new BasicNameValuePair("name", nm)); 
       nameValuePairs.add(new BasicNameValuePair("city",ct)); 
       nameValuePairs.add(new BasicNameValuePair("email",emailid)); 
       nameValuePairs.add(new BasicNameValuePair("contact",no)); 
       nameValuePairs.add(new BasicNameValuePair("msg",str)); 
       sendData(nameValuePairs); 
     } 
     private void sendData(ArrayList<NameValuePair> data) 
     { 
      try 
      { 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://10.0.2.2:8080/demo/insertData.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(data)); 
       HttpResponse response = httpclient.execute(httppost); 

      } 
      catch (Exception e) { 
       // TODO: handle exception 
       Log.e("log_tag", "Error: "+e.toString()); 
      } 
     } 
} 
+0

沒有發生我已經試過你的代碼:( –

+0

現在的Android端代碼工作perface,但我不知道PHP..sorry –

相關問題