[英]Inserting POST data in my sql using PHP
我正在尝试将一些数据从android
应用程序发送到mysql
,但是只有最后添加的记录才添加到我的数据库中 。 如何通过POST
将所有发送的数据添加到数据库中? 这是我从我的应用程序用来向mysql
发送数据的代码
private void registerUser(){
StringRequest stringRequest = new StringRequest(Request.Method.POST,
URL_LOGIN,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show();
}
}){
@Override
protected Map<String,String> getParams()throws AuthFailureError{
Map<String,String> params = new HashMap<String, String>();
Cursor cursor=db.rawQuery(selectQuery,null);
if (cursor.moveToFirst()) {
do {
//params.put("sid",cursor.getString(1));
params.put("code",cursor.getString(2));
params.put("answer", cursor.getString(3));
} while (cursor.moveToNext());
}
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(stringRequest);
}
我的PHP代码:
$answer = $_POST['answer'];
$code = $_POST['code'];
//$sid=$_POST['sid'];
//$useremail = $_POST['email'];
//$userpassword = $_POST['password'];
$user = "root";
$pass = "";
$host= "localhost";
$dbname="offlinesurvey";
date_default_timezone_set('UTC');
$date = date('YmdHis');
//$name=$sid.'_'.$date;
$con = mysqli_connect($host,$user,$pass,$dbname);
$sql_create="CREATE TABLE `offlinesurvey`.`lime_survey_` ( `id` INT NULL AUTO_INCREMENT ,whenadded DATETIME, `code` VARCHAR(255) NOT NULL,`answer` VARCHAR(255) NOT NULL , UNIQUE `id` (`id`)) ENGINE = MyISAM;";
if(mysqli_query($con,$sql_create)){
}
else {
"No..No";
}
$sql="insert into lime_survey_(whenadded,code,answer)
(Now(),'".$code."','".$answer."');";
if(mysqli_query($con,$sql)){
echo "data inserted";
}else{
echo "Failed";
}
重命名参数以包括方括号,例如code[]
和answer[]
。 使用方括号会将php中的数据转换为第一个数组,例如$_POST['code'][0]
, $_POST['code']
。然后,您可以遍历$_POST['code']
并获取每个值。 只要每个代码都有答案,每个代码和答案的键就应该对齐。
params.put("code[]",cursor.getString(2));
params.put("answer[]", cursor.getString(3));
PHP方面的快速示例:
foreach($_POST['code'] as $key=>$value){
echo "Code {$key}: {$value}; Answer {$key}: {$_POST['answer'][$key]}\n";
}
如果您不想信任[]
追加(例如,缺少代码或答案),也可以通过重命名为诸如code[0]
/ answer[0]
, code[1]
显式地放置键号。 / answer[1]
。
简单的解决方法是确保地图中的每个键都不同。 您可以通过使用迭代器变量显式设置键的索引来做到这一点,如下所示:
@Override
protected Map<String,String> getParams()throws AuthFailureError{
Map<String,String> params = new HashMap<String, String>();
Cursor cursor=db.rawQuery(selectQuery,null);
if (cursor.moveToFirst()) {
//iterator integer
int i = 0;
do {
//concatenate the iterator with the name
params.put("code[" + String.valueOf(i) + "]",cursor.getString(2));
params.put("answer[" + String.valueOf(i) + "]", cursor.getString(3));
i++;
} while (cursor.moveToNext());
}
return params;
}
您仍然需要像上面那样在php端循环发布数据,以获取每个记录并插入。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.