Rest php api试图从android应用程序将数据插入数据库

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

在这里,我试图使用andriod应用程序中的RESTAPI将数据插入数据库。当我尝试插入服务器时,我从服务器获得了200次成功。请帮我做这个。据我所知,我以前从未这样做过。唯一的问题是发送的变量和类型以及如何在php文件中提取以插入该变量。下面是我同时使用android和php的代码

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