2016-10-23 7 views
0

Ich versuche, Eingaben in die Datenbank einzufügen, aber wenn ich es versuche, fügt es leere Zeilen hinzu. Ich habe ein HTML-Formular erstellt, das perfekt funktioniert. Hier ist mein Code Ich würde jede Hilfe zu schätzen wissen.Android fügt leere Zeilen zu db hinzu

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(); 
} 

}

Nachdem ich ausgetestet, ich habe "data" Variable in "Background" als

sender = fggff & header = kkkjjj & text = qwwqwq

müssen sie in Anführungszeichen stehen? oder sind die Leerzeichen?

PHP-Code

<?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

Wo ist der PHP-Code, der die Einfügung macht? – tadman

+0

@tadman Ich habe sie hinzugefügt – Burak

+1

** WARNUNG **: Wenn Sie 'mysqli' verwenden, sollten Sie [parametrisierte Abfragen] verwenden (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) und ['bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Abfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST 'oder' $ _GET' Daten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

0

Beachten Sie, dass Ihre Hintergrundaufgabe werden die Einsätze nicht sofort tun, wenn sie aufgerufen. Ich denke, dass Sie Referenzparameter übergeben (das sind keine Skalare) und so könnte der Anrufer sie ändern, bevor die Hintergrundaufgabe eine Chance hat, sie zu verwenden.

Zwei Möglichkeiten: Im Hintergrund nicht tun - für eine lokale Datenbank ist eine einzelne Einfügung wirklich schnell und kann normalerweise auf dem UI-Thread durchgeführt werden.

Oder kopieren Sie die Zeichenfolgen, bevor Sie sie an die Hintergrundaufgabe senden.

+0

Ich habe die leeren Zeichen auf Datenvariable entfernt und jetzt fügt es zur lokalen Datenbank hinzu. aber ich bekomme immer noch Fehler, wenn ich versuche, zur entfernten Datenbank hinzuzufügen, bekomme ich Fehler, wenn ich versuche, über HTML-Formular entweder hinzuzufügen. – Burak

Verwandte Themen