2015-06-02 6 views
0

Здесь я создал приложение Android для вставки некоторых данных в базу данных PHP Mysql. Итак, здесь я впервые объясню, что происходит в моем коде. Я создал два поля Name и Address, Layout хорошо. Теперь, когда я нажимаю кнопку «Вставить», появляется сообщение об успешном завершении, а также данные, поступающие в создание строк данных, но проблема в том, что данные пустые, означает, что строки строк не входят в БД.Ошибка ввода данных в PHP для Android

Ниже приведен код:

package com.oplo.user.listing; 

import android.app.Activity; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
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 java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends Activity { 
    private EditText editTextName; 
    private EditText editTextAdd; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     editTextName = (EditText) findViewById(R.id.editTextName); 
     editTextAdd = (EditText) findViewById(R.id.editTextAddress); 
    } 
    public void insert(View view){ 
     String name = editTextName.getText().toString(); 
     String add = editTextAdd.getText().toString(); 

     insertToDatabase(name,add); 
    } 
    private void insertToDatabase(String name, String add){ 
     @SuppressWarnings({"deprecation", "ResourceType"}) 
     class SendPostReqAsyncTask extends AsyncTask<String, Void, String> { 
      @Override 
      protected String doInBackground(String... params) { 
       String paramUsername = params[0]; 
       String paramAddress = params[1]; 


       String name = editTextName.getText().toString(); 
       String add = editTextAdd.getText().toString(); 

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
       nameValuePairs.add(new BasicNameValuePair("name", name)); 
       nameValuePairs.add(new BasicNameValuePair("address", add)); 

       try { 
        HttpClient httpClient = new DefaultHttpClient(); 
        HttpPost httpPost = new HttpPost(
          "http://xyz.in/demo.php"); 
        httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

        HttpResponse response = httpClient.execute(httpPost); 

        HttpEntity entity = response.getEntity(); 


       } catch (ClientProtocolException e) { 

       } catch (IOException e) { 

       } 
       return "success"; 
      } 

      @Override 
      protected void onPostExecute(String result) { 
       super.onPostExecute(result); 

       Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 
       TextView textViewResult = (TextView) findViewById(R.id.textViewResult); 
       textViewResult.setText("Inserted"); 
      } 
     } 
     SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); 
     sendPostReqAsyncTask.execute(name, add); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

Ниже PHP код

<?php 
 
    define('HOST','asdasd.in'); 
 
    define('USER','sadsad'); 
 
    define('PASS','sadasd'); 
 
    define('DB','asdasdasd'); 
 
    $con = mysqli_connect(HOST,USER,PASS,DB); 
 
    $name = $_POST['name']; 
 
    $address = $_POST['address']; 
 

 
    $sql = "insert into Persons (name,address) values ('$name','$address')"; 
 
    if(mysqli_query($con,$sql)){ 
 
    echo 'success'; 
 
    } 
 
    else{ 
 
    echo 'failure'; 
 
    } 
 
    mysqli_close($con); 
 
?>

Пожалуйста, проверьте код и дайте мне место ошибки в этой программе.

Заранее спасибо.

+0

Поскольку вы уже используете MySQLi, стоит использовать привязку параметров (и это очень легко сделать). В настоящее время вы уязвимы для SQL-инъекций. – halfer

ответ

1

Ваша функция insertToDatabase() имеет два строковых переменных 'name' и 'add' в качестве аргументов. У вас есть те же имена новых переменных внутри этой функции. Возможно, это проблема.

0

Ваша проблема в том, что для вашего запроса используются одинарные кавычки. Таким образом, переменные не вытягиваются. Строка с двойными кавычками будет перемежать ваши переменные как переменные не как строку. Заменить Ваш SQL с:

$sql = "insert into Persons (name,address) values ('${name}','${address}')"; 

Это очень плохая практика, чтобы вставить исходные данные в базе данных партнера ... Попробуйте использовать подготовленные заявления или Mysqli :: real_escape_string или по крайней мере, фильтровать их с filter_input() функция

Смежные вопросы