앞서 작성한 insert.php 파일을 다음 코드로 변경해 줍니다.
<?php
error_reporting(E_ALL);
ini_set('display_errors',1);
include('dbcon.php');
$android = strpos($_SERVER['HTTP_USER_AGENT'], "Android");
if( (($_SERVER['REQUEST_METHOD'] == 'POST') && isset($_POST['submit'])) || $android )
{
// 안드로이드 코드의 postParameters 변수에 적어준 이름을 가지고 값을 전달 받습니다.
$name=$_POST['name'];
$age=$_POST['age];
if(empty($name)){
$errMSG = "이름을 입력하세요.";
}
else if(empty($age)){
$errMSG = "나이를 입력하세요.";
}
if(!isset($errMSG)) // 이름과 나이 모두 입력이라면
{
try{
// 데이터를 MySQL 서버의 person 테이블에 저장합니다.
$stmt = $con->prepare('INSERT INTO person(name, age) VALUES(:name, :age)');
$stmt->bindParam(':name', $name);
$stmt->bindParam(':age', $age);
if($stmt->execute())
{
$successMSG = "새로운 사용자를 추가했습니다.";
}
else
{
$errMSG = "사용자 추가 에러";
}
} catch(PDOException $e) {
die("Database error: " . $e->getMessage());
}
}
}
?>
<?php
if (isset($errMSG)) echo $errMSG;
if (isset($successMSG)) echo $successMSG;
$android = strpos($_SERVER['HTTP_USER_AGENT'], "Android");
if( !$android )
{
?>
<html>
<body>
<form action="<?php $_PHP_SELF ?>" method="POST">
Name: <input type = "text" name = "name" />
Age: <input type = "text" name = "age" /><br>
<input type = "submit" name = "submit" />
</form>
</body>
</html>
<?php
}
?>
안드로이드 스튜디오에서 인터넷 접근 허용 퍼미션을 추가해 줍니다.
AndroidManifest.xml에서
<uses-permission android:name="android.permission.INTERNET" /> |
을 추가해줍니다.
그 다음 activity_main.xml 파일을 아래와 같이 바꿉니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name"
android:id="@+id/textView_name" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText_name" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Age"
android:id="@+id/textView_age" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText_age" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Insert"
android:id="@+id/button_insert" />
<TextView
android:layout_width="match_parent"
android:layout_height="250dp"
android:id="@+id/textView_result" />
</LinearLayout>
그 다음으로 MainActivity.java 파일을 아래 내용으로 바꿔줍니다.
private static String IP_ADDRESS=“IP주소”;
//IP주소를 파이의 IP로 수정
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private static String IP_ADDRESS = "IP주소";
private EditText mEditTextName;
private EditText mEditTextAge;
private TextView mTextViewResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
mEditTextName = (EditText)findViewById(R.id.editText_name);
mEditTextAge = (EditText)findViewById(R.id.editText_age);
mTextViewResult = (TextView)findViewById(R.id.textView_result);
mTextViewResult.setMovementMethod(new ScrollingMovementMethod());
Button buttonInsert = (Button)findViewById(R.id.button_insert);
buttonInsert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = mEditTextName.getText().toString();
String age = mEditTextAge.getText().toString();
InsertData task = new InsertData();
task.execute("http://" + IP_ADDRESS + "/insert.php", name,age);
mEditTextName.setText("");
mEditTextAge.setText("");
}
});
}
class InsertData extends AsyncTask<String, Void, String>{
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = ProgressDialog.show(MainActivity.this,
"Please Wait", null, true, true);
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progressDialog.dismiss();
mTextViewResult.setText(result);
Log.d(TAG, "POST response - " + result);
}
@Override
protected String doInBackground(String... params) {
String name = (String)params[1];
String age = (String)params[2];
String serverURL = (String)params[0];
String postParameters = "name=" + name + "&age=" + age;
try {
URL url = new URL(serverURL);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setReadTimeout(5000);
httpURLConnection.setConnectTimeout(5000);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.connect();
OutputStream outputStream = httpURLConnection.getOutputStream();
outputStream.write(postParameters.getBytes("UTF-8"));
outputStream.flush();
outputStream.close();
int responseStatusCode = httpURLConnection.getResponseCode();
Log.d(TAG, "POST response code - " + responseStatusCode);
InputStream inputStream;
if(responseStatusCode == HttpURLConnection.HTTP_OK) {
inputStream = httpURLConnection.getInputStream();
}
else{
inputStream = httpURLConnection.getErrorStream();
}
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
StringBuilder sb = new StringBuilder();
String line = null;
while((line = bufferedReader.readLine()) != null){
sb.append(line);
}
bufferedReader.close();
return sb.toString();
} catch (Exception e) {
Log.d(TAG, "InsertData: Error ", e);
return new String("Error: " + e.getMessage());
}
}
}
}
안드로이드 프로젝트를 빌드하여 앱을 테스트 해봅니다. 안드로이드 스튜디오는 인터넷 연결이 안되기 때문에 직접 핸드폰으로 받아서 해 보는것을 추천합니다.
이름과 나이를 입력하고 입력을 누르게 되면 성공한 경우 새로운 사용자를 추가했다는 문자열이 출력됩니다.
이후 mysql에서 확인해보면 정상적으로 입력된 것을 확인 가능합니다.
코드 설명은 https://webnautes.tistory.com/828?category=613155에 자세하게 나와있습니다.
'라즈베리 파이4 > 서버' 카테고리의 다른 글
웹 브라우저로 php 동작 테스트 (0) | 2020.07.26 |
---|---|
데이터 베이스 및 테이블 생성 (0) | 2020.07.26 |
라즈베리파이4 LAMP 설치 - 3 (0) | 2020.07.26 |
라즈베리파이4 LAMP 설치 - 2 (0) | 2020.07.26 |
라즈베리파이4 LAMP 설치 - 1 (0) | 2020.07.26 |