Reputation: 23
I have been researching this for a while now and not getting anywhere.
What I'm trying to do is to create a registrion/login activities, which will store all access details on a remote SQL database.
My outline of the code was to create the "Registrar" object, convert it to JSON object, and convert that JSON object to a string, and then send that string over httpclient as a post to the PHP page ( which is located on my XAMPP ), kindly take note that I'm using Android Studio Emulator.
My problem:
I don't know if the JSON file is received by the PHP server or not. Here is my code:
Submit function:
public void goSubmit(View view) throws IOException {
EditText nameEdit = (EditText) findViewById(R.id.nameEdit);
EditText idEdit = (EditText) findViewById(R.id.idEdit);
String name = nameEdit.getText().toString();
String ID = idEdit.getText().toString();
//Creating Student (Registrar) Object
Student registrar = new Student();
registrar.setMajor(majorEdit);
registrar.setName(name);
registrar.setId(ID);
//Creating JSON String
String registrarJSON = null;
try {
registrarJSON = ObjInJSON(registrar);
Toast.makeText(this, registrarJSON, Toast.LENGTH_LONG).show();
} catch (JSONException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//Posting JSON String on Remote PHP
String PHPresponse = sendToRegistrationPHP(registrarJSON);
Toast.makeText(this, PHPresponse, Toast.LENGTH_LONG).show();
//Receive PIN from PHP as JSON String
//Parsing JSON string to integer (pin)
//Set PIN in registrar.getpin()
//Passing the object to setPassword Activity condition registrar.pin =! null
}
Student class:
public class Student {
String Id = "NULL" ;
String Major = "NULL";
String Name = "NULL";
String Password = "NULL";
String Pin = "NULL";
public String getPin() {
return Pin;
}
public void setPin(String pin) {
Pin = pin;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
}
public String getId() {
return Id;
}
public String setId(String id) {
Id = id;
return id;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getMajor() {
return Major;
}
public void setMajor(String major) {
Major = major;
}
}
Creating JSON object in string format:
protected String ObjInJSON(Student studentC) throws JSONException, UnsupportedEncodingException {
String ID = studentC.getId();
String Pin = studentC.getPin();
String Major = studentC.getMajor();
String Password = studentC.getPassword();
String Name = studentC.getName();
JSONObject json_obj = new JSONObject();
json_obj.put("id", ID);
json_obj.put("password", Password);
json_obj.put("pin", Pin);
json_obj.put("major", Major);
json_obj.put("name", Name);
return json_obj.toString();
}
Sending to PHP server:
public static String sendToRegistrationPHP(String jarr) throws IOException {
StringBuffer response = null;
try {
String myurl = "10.0.2.2:8070/StudentaccistancePHP/MySqlTEST.php";
URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
OutputStream out = new BufferedOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, "UTF-8"));
writer.write(jarr);
writer.close();
out.close();
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
System.out.println("Response in universal: " + response.toString());
} catch (Exception exception) {
System.out.println("Exception: " + exception);
}
if (response != null) {
return response.toString();
}
else return "Not WORKING !";
}
PHP server:
<?php
$json = file_get_contents('php://input');
$data = json_decode($json, true);
$ID = $data['id'];
$password = $data['password'];
$pin = "323232";
$major = $data['major'];
$name = $data['name'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "studentassictance";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
$sql = "INSERT INTO students (id, major, name, password, pin)
VALUES ('$ID', '$major', '$name', '$password', '$pin')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully <br>";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
?>
However, nothing is inserted to the database.
Upvotes: 2
Views: 327
Reputation: 3484
First, you need to check what arrives as JSON into PHP side. You can
var_dump($json,$data);
after json_encode()
call and watch it to be a valid JSON. You can validate it here
Second, show you SHOW CREATE TABLE students
And third, rewrite everything to PDO as it supports named parameters and it would be theoretically easier for you to migrate to another DB engine later if needed. So it would be something like:
<?php
define('DSN','mysql:dbname=test;host=localhost');
define('DB_USERNAME','testuser');
define('DB_PASSWORD','testpassword');
$connect = new PDO(DSN, DB_USERNAME, DB_PASSWORD);
$json = file_get_contents('php://input');
/*$json = '{
"id": "111",
"password": "sfsdfsdf",
"major": "Math",
"name": "Test User"
}';*/
$data = json_decode($json, true);
$ID = $data['id'];
$password = $data['password'];
$pin = "323232";
$major = $data['major'];
$name = $data['name'];
$sql = "INSERT INTO `students`(`id`,`major`, `name`, `password`, `pin`) VALUES(:id, :major, :name, :password, :pin)";
$result = $connect->prepare($sql);
//bind parameter(s) to variable(s)
$result->bindParam( ':id', $ID, PDO::PARAM_INT );
$result->bindParam( ':major', $major, PDO::PARAM_STR );
$result->bindParam( ':name', $name, PDO::PARAM_STR );
$result->bindParam( ':password', $password, PDO::PARAM_STR );
$result->bindParam( ':pin', $pin, PDO::PARAM_STR );
$status = $result->execute();
if ($status)
{
echo "New record created successfully <br>";
} else
{
echo "Error: <br>" .
var_dump($connect->errorInfo(),$status);
}
$connect = null;
Upvotes: 1