2016-10-23 9 views
0

私はデータベースに入力を挿入しようとしていますが、試してみると空の行が追加されます。私は完璧に動作するHTMLフォームを作成しました。ここに私のコードはありますが、私はどんな助けにも感謝します。Androidは空白の行をdbに追加します

MyFragment.java

public class MyFragment extends Fragment{ 

EditText senderEt, headerEt, textEt; 
Button btn; 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    final View rootView = inflater.inflate(R.layout.my_fragment, container, false); 
    senderEt = (EditText)rootView.findViewById(R.id.sender); 
    headerEt = (EditText)rootView.findViewById(R.id.header); 
    textEt = (EditText)rootView.findViewById(R.id.text); 
    btn = (Button) rootView.findViewById(R.id.btnSend); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      addToDB(getView()); 
     } 
    }); 

    return rootView; 
} 

public void addToDB(View view){ 
    String sender= senderEt.getText().toString(); 
    String header= headerEt.getText().toString(); 
    String text= textEt.getText().toString(); 

    BackgroundTask backgroundTask = new BackgroundTask(getActivity()); 
    backgroundTask.execute(sender, header, text); 


} 
} 

BackgroundTask.java

public class BackgroundTask extends AsyncTask<String, Void, String> { 

Context context; 
BackgroundTask(Context context){ 
    this.context=context; 
} 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
} 


@Override 
protected String doInBackground(String... params) { 
    String add_url= "http://139.179.196.153:8080/addDB.php"; 
    String sender = params[0]; 
    String header = params[1]; 
    String text = params[2]; 

    try { 
     URL url = new URL(add_url); 
     HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
     httpURLConnection.setRequestMethod("POST"); 
     httpURLConnection.setDoOutput(true); 
     OutputStream outputStream = httpURLConnection.getOutputStream(); 
     BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
     String data = URLEncoder.encode("sender", "UTF-8") + " = "+URLEncoder.encode(sender, "UTF-8")+"&"+ 
     URLEncoder.encode("header", "UTF-8") + " = "+URLEncoder.encode(header, "UTF-8")+"&"+ 
       URLEncoder.encode("text", "UTF-8") + " = "+URLEncoder.encode(text, "UTF-8"); 
     bufferedWriter.write(data); 
     bufferedWriter.flush(); 
     bufferedWriter.close(); 
     outputStream.close(); 

     InputStream inpInputStream = httpURLConnection.getInputStream(); 
     inpInputStream.close(); 
     return "Add to DB Success"; 


    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 


    return null; 

} 

@Override 
protected void onProgressUpdate(Void... values) { 
    super.onProgressUpdate(values); 
} 

@Override 
protected void onPostExecute(String res) { 
    Toast.makeText(context, res, Toast.LENGTH_SHORT).show(); 
} 

}

私はデバッグした後、私は=

送信者として "BackgroundTaskの" の "データ" 変数を得fggff & header = kkkjjj & text = qwwqwq

引用符で囲む必要がありますか?または空白問題がありますか?

PHPコード

<?php 
$db_name = "test"; 
$db_user = "root"; 
$db_password = ""; 
$db_server_name = "localhost"; 


$con = new mysqli($db_server_name, $db_user, $db_password, $db_name); 
if($con->connect_error){ 
echo "Connection error".mysqli_connect_error(); 
} 

else{ 
echo "<h3>Database connection success</h3>"; 
} 

$sender = $_POST["sender"]; 
$header = $_POST["header"]; 
$text = $_POST["text"]; 


$sql_query = "insert into things values('$sender','$header','$text')"; 

if(mysqli_query($con, $sql_query)){ 
echo "<h3>Data insertion success</h3>"; 
} 
else{ 
echo "<Data insertion error</h3>".mysqli_error($con); 
} 
+0

挿入を行っているPHPコードはどこですか? – tadman

+0

@tadman私はそれらを追加しました – Burak

+1

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)を使用する必要があります。と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使ってクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

答えて

0

呼び出されたときに、あなたのバックグラウンドタスクがすぐに挿入を行うことはありません覚えておいてください。私はあなたが(スカラーではない)参照パラメータを渡していると思うので、バックグラウンドタスクがそれらを使用する機会を得る前に、呼び出し側がそれらを変更している可能性があります。

2つの選択肢:バックグラウンドで実行しないでください - ローカルデータベースの場合、1つの挿入は非常に高速で、通常はUIスレッドで実行できます。

または、文字列のコピーを作成してから、バックグラウンドタスクに送信してください。

+0

私はデータ変数上の空白文字を削除し、ローカルデータベースに追加しました。しかし、私はまだリモートデータベースに追加しようとするとエラーが表示されますが、HTML形式でも追加しようとするとエラーが表示されます。 – Burak

関連する問題