Почему данные не могут быть вставлены из приложений Android в MySQL - PullRequest
3 голосов
/ 15 февраля 2012

Я создал свою базу данных MySQL и хочу отправить данные из приложений Android в базу данных, но я не смог этого сделать. Я использую Wamp-сервер.

Вот мой php код:

<?php mysql_connect("localhost","cupcake","123456");
mysql_select_db("cindy");
$sql=mysql_query("insert into yang (name)values('".$_REQUEST['i_name']."')");
$r=mysql_query($sql);
if(!$r)echo "Error in query: ".mysql_error();mysql_close();?>

Вот мой Java-файл с Android

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);



        String result = null;
        JSONArray jArray;
        InputStream is = null;
        StringBuilder sb=null;


        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

        nameValuePairs.add(new BasicNameValuePair("i_name","aaa"));
        try{     

            HttpClient httpclient = new DefaultHttpClient();

             HttpPost httppost = new HttpPost("http://10.0.2.2/testing.php");
             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
             HttpResponse response = httpclient.execute(httppost);
             HttpEntity entity = response.getEntity();
             is = entity.getContent();
             }catch(Exception e){
                 Log.e("log_tag", "Error in http connection"+e.toString());
            }



        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
             sb = new StringBuilder();
             sb.append(reader.readLine() + "\n");
             String line="0";
             while ((line = reader.readLine()) != null) {
                            sb.append(line + "\n");        }
              is.close();
              result=sb.toString();
              }catch(Exception e){
                    Log.e("log_tag", "Error converting result "+e.toString());
              }//paring datatry


        try {
            jArray = new JSONArray(result);
           //int[] deal_id=new int[jArray.length()+1];
            JSONObject json_data=null;
            for(int i=0;i<jArray.length();i++){
                   json_data = jArray.getJSONObject(i);
                            }
            }      catch(JSONException e1){
                   } catch (ParseException e1) {
                e1.printStackTrace();   }
          }}

Это таблица MySQL, которую я создал

--

CREATE TABLE IF NOT EXISTS `yang` (
  `name` varchar(100) NOT NULL,
  PRIMARY KEY (`name`)
) 

Пожалуйста, помогите мне .. Спасибо ...

Ответы [ 3 ]

0 голосов
/ 17 мая 2012

Я согласен, что вы должны постараться включить как можно больше журналов, чтобы увидеть, что происходит.

Я предполагаю, что вы развертываете это Android-приложение на свой телефон или эмулятор, правильно? В собственном браузере вы можете перейти по адресу http: // 10.0.2.2 /testing.php и убедиться, что это не проблема с локальной сетью?

Кроме того, вы независимо тестировали свой код PHP? Вы уверены, что это работает?

Наконец, ваш PHP-скрипт уязвим для внедрения SQL. Вы никогда не захотите объединить какие-либо данные от пользователя непосредственно в оператор SQL. Используйте подготовленное заявление, чтобы справиться с этим. PHP имеет библиотеку PDO, которую вы можете использовать. Вот учебник (http://www.kitebird.com/articles/php-pdo.html) - есть много других, которым вы можете следовать. Просто учебник по подготовленным инструкциям Google PHP PDO или что-то еще

Дайте мне знать, какие ответы вы найдете на поставленные выше вопросы.

0 голосов
/ 03 июня 2012

Вы предоставляете адрес localhost в java-файле Android, т.е. 10.0.2.2, и, насколько мне известно, он не работает. Откройте командную строку, введите ipconfig и нажмите Enter. После этого проверьте ваш адрес ip v4, который будет запускаться как 192.168 .... скопируйте этот адрес и в строке поиска, если проект запущен, чем замените localhost ip этим. На самом деле Android принимает доменное имя, а не localhost. и изменить в Android-файл Java с этим также. надеюсь, что это сработает. Спасибо

0 голосов
/ 02 марта 2012

Этот вид разработки может быть довольно сложным для отладки, поэтому я всегда буду использовать много журналов.

Например, в вашем PHP добавьте:

error_log ("Вставка имени:". $ _REQUEST ['i_name']);

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

PS: я не эксперт по PHP, но мне кажется, что ваш PHP будет уязвим для атаки SQL-инъекцией, поэтому вы, вероятно, не захотите ее развертывать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...