Rest php api试图从android应用程序将数据插入数据库
在这里,我试图使用andriod应用程序中的RESTAPI将数据插入数据库。当我尝试插入服务器时,我从服务器获得了200次成功。请帮我做这个。据我所知,我以前从未这样做过。唯一的问题是发送的变量和类型以及如何在php文件中提取以插入该变量。下面是我同时使用android和php的代码Rest php api试图从android应用程序将数据插入数据库,php,database,insert,Php,Database,Insert,在这里,我试图使用andriod应用程序中的RESTAPI将数据插入数据库。当我尝试插入服务器时,我从服务器获得了200次成功。请帮我做这个。据我所知,我以前从未这样做过。唯一的问题是发送的变量和类型以及如何在php文件中提取以插入该变量。下面是我同时使用android和php的代码 private class SingupAsyn extends AsyncTask<String, Void, String>{ URL url; HttpURLConnection connecti
private class SingupAsyn extends AsyncTask<String, Void, String>{
URL url;
HttpURLConnection connection;
OutputStream outputStream;
OutputStreamWriter outputStreamWriter;
BufferedWriter bufferedWriter;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
/*
Receive data which is input by user
*/
String cname = params[0];
String cemail = params[1];
String cuname = params[2];
String dcpassword = params[3];
String cdob = params[4];
String cgender = params[5];
try {
url = new URL("here url");
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json");
JSONObject jsonObject = new JSONObject();
jsonObject.accumulate("user_full_name", cname);
jsonObject.accumulate("user_email", cemail);
jsonObject.accumulate("user_name", cuname);
jsonObject.accumulate("user_password", dcpassword);
jsonObject.accumulate("user_dob", cdob);
jsonObject.accumulate("user_gender", cgender);
outputStream = connection.getOutputStream();
outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write(jsonObject.toString());
outputStreamWriter.flush();
outputStreamWriter.close();
Log.d("YOUR DATA", "" + jsonObject);
Log.v( "postURL: " ,""+url);
int res = connection.getResponseCode();
return ("" + res);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
Log.d("ok", s);
int s1 = Integer.parseInt(s);
if ((s1== HttpURLConnection.HTTP_ACCEPTED) || (s1 ==HttpURLConnection.HTTP_OK)) {
pDialog.dismiss();
Toast.makeText(getActivity(), "Registration Success" + s, Toast.LENGTH_SHORT).show();
}
else
{
pDialog.dismiss();
Toast.makeText(getActivity(), "failure" + s, Toast.LENGTH_SHORT).show();
}
super.onPostExecute(s);
}
}
私有类SingupAsyn扩展异步任务{
网址;
httpurl连接;
输出流输出流;
OutputStreamWriter OutputStreamWriter;
缓冲写入程序缓冲写入程序;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
/*
接收用户输入的数据
*/
字符串cname=params[0];
字符串cemail=params[1];
字符串cuname=params[2];
字符串dcpassword=params[3];
字符串cdob=params[4];
字符串cgender=params[5];
试一试{
url=新url(“此处url”);
connection=(HttpURLConnection)url.openConnection();
connection.setDoOutput(真);
connection.setRequestMethod(“POST”);
setRequestProperty(“内容类型”、“应用程序/json”);
JSONObject JSONObject=新的JSONObject();
jsonObject.accumulate(“用户全名”,cname);
jsonObject.accumulate(“用户电子邮件”,cemail);
jsonObject.acculate(“用户名”,cuname);
jsonObject.accumulate(“用户密码”,dcpassword);
jsonObject.accumulate(“用户dob”,cdob);
jsonObject.acculate(“用户性别”,cgender);
outputStream=connection.getOutputStream();
outputStreamWriter=新的outputStreamWriter(outputStream);
outputStreamWriter.write(jsonObject.toString());
outputStreamWriter.flush();
outputStreamWriter.close();
Log.d(“您的数据”,“jsonObject”);
Log.v(“postrl:,”+url);
int res=connection.getResponseCode();
返回(“+res”);
}捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(JSONException e){
e、 printStackTrace();
}
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
Log.d(“正常”,s);
int s1=整数.parseInt(s);
如果((s1==HttpURLConnection.HTTP|u接受)| |(s1==HttpURLConnection.HTTP|u OK)){
pDialog.disclose();
Toast.makeText(getActivity(),“注册成功”+s,Toast.LENGTH_SHORT.show();
}
其他的
{
pDialog.disclose();
Toast.makeText(getActivity(),“failure”+s,Toast.LENGTH_SHORT.show();
}
super.onPostExecute(s);
}
}
这是我的服务器端代码
<?php
include('../db.php');
$response = array();
$user_info = json_decode($jsonObject, true);
if (isset($user_info['user_full_name']) && isset($user_info['user_email']) && isset($user_info['user_name'])) {
$query = mysql_query("INSERT INTO `users` (user_pk, user_full_name, user_email, user_name, user_password, user_dob, user_gender, user_status, user_ip, user_activation, user_created_at)
VALUES ('', '".$user_info['user_full_name']."', '".$user_info['user_email']."', '".$user_info['user_name']."','".$user_info['user_password']."', '".$user_info['user_dob']."', '".$user_info['user_gender']."', '0', '".$_SREVER['REMOTE_ADDR']."', '".rand(10000, 99999)."', '".now()."', ") or die(mysql_error());
if ($result) {
$response["success_msg"] = 1;
$response["message"] = "Successfully Registred.";
echo json_encode($response);
}
else {
// failed to insert row
$response["success_msg "] = 0;
$response["message"] = "Your Registration is failed Please try again.";
// echoing JSON response
echo json_encode($response);
}
}
mysql_close($con);
?>
首先要做的是避开PHP中的mysql.*
函数,因为它们可能非常不安全,更重要的是,它们已经被弃用近十年了,并且在较新版本的PHP中被删除
我建议您使用PDO和准备好的语句来处理可能的SQL注入尝试。请在下面的示例中查找如何执行此操作
$conn=newpdo(“mysql:host=$host;dbname=$dbname”,$username,$password);
//将PDO错误模式设置为异常
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
//准备sql和绑定参数
$stmt=$conn->prepare(“插入MyTable(col1、col2、col3))
值(:col1,:col2,:col3)”;
$stmt->bindParam(':col1',$val1);
$stmt->bindParam(':col2',$val2);
$stmt->bindParam(':col3',$val2);
//插入一行
$val1=“值1”;
$val2=“值2”;
$val3=“值3”;
$stmt->execute();
因此,我们先来讨论一下服务器端脚本。因为您说您得到了正确的响应,但数据库中没有新数据,这意味着PHP中发生了一些错误/警告/通知,但您正在抑制它们,所以首先要做的是启用错误报告和错误显示。通过在脚本顶部添加两个简单命令,可以在脚本本身中执行此操作:
ini\u集(“显示错误”,1);
错误报告(E_全部);
在部署到生产环境之前,请确保删除此项
现在,如果我运用我对Java的基本知识,您将以HTTP正文的形式发送JSON对象,因此您必须首先用PHP读取并解码它。为此,PHP提供了一个只读流php://input您可以从中读取,因为它是文件系统上的文件
$jsonObject=json\u decode(文件获取内容)php://input"));
您可以在此处阅读更多有关此的信息:
php://input 是一个只读流,允许您读取原始数据
来自请求主体。对于POST请求,最好是
使用php://input 而不是$HTTP\u RAW\u POST\u DATA
,因为它没有
依赖于特殊的php.ini指令。此外,对于以下情况:
$HTTP_RAW_POST_数据
默认情况下不填充,它可能是
与激活相比,内存占用更少
始终填充原始数据。php://input 不适用于
enctype=“多部分/表单数据”
首先要做的是避开PHP中的mysql.*
函数,因为它们可能非常不安全,更重要的是,它们已经被弃用了近十年,并且在PHP的新版本中被删除
我建议您使用PDO和准备好的语句来处理可能的SQL注入尝试。请在下面的示例中查找如何执行此操作
$conn=newpdo(“mysql:host=$host;dbname=$dbname”,$username,$password);
//将PDO错误模式设置为异常
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
//准备sql和绑定参数
$stmt=$conn->prepare(“插入MyTable(col1、col2、col3))
瓦尔
<?php
$dbname = 'maxximpu_tiffmiff';
$con = mysql_connect('localhost', 'maxximpu_tiff', 'tiffmiff123');
if (!$con) {
echo 'Could not connect to mysql';
exit;
}
mysql_select_db($dbname, $con);
?>