我正在创建一个Android应用,用户可以在其中使用register
和login
。
目前注册和登录工作正常。
但是PHP
代码容易受到SQL Injection
攻击,因此我想使用PDO
使其安全。
用户注册时,其Name
和Surname
被保存在Shared Preferences
中,并在其Home activity
中显示。
问题在于,当我将Login
脚本与PDO
一起使用时,SharedPreferences
中的变量是错误的。
如果我有10个users
,即使我使用user 1
,user 2
,{{1}登录,它也会显示user 3
的名称和姓氏}等...
此外,如果我将user 4
文件与Register.php
一起使用,它不会为我保留PDO
中所有用户的名字和姓氏。
所以我想了解为什么SharedPreferences
文件更改后SharedPrefrences
不起作用?
使用PHP
的{{1}}文件有什么问题?
有人对我有什么建议吗?
我愿意听你的话。
没有PDO的Login.php
PHP
使用PDO的Login.php
PDO
没有PDP的Register.php
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
// echo $_SERVER["DOCUMENT_ROOT"]; // /home1/demonuts/public_html
//including the database connection file
include_once("config2.php");
$idAKr = $_POST['idAKr'];
$cell = $_POST['cellulare'];
if( $idAKr == '' || $cell == '' ){
echo json_encode(array( "statusr" => "false","message" => "Inserisci numero di telefono!") );
}else{
$query= "SELECT * FROM Ristoratori WHERE cellulare='$cell'";
$result= mysqli_query($con, $query);
if(mysqli_num_rows($result) > 0){
$query= "SELECT * FROM Ristoratori WHERE cellulare='$cell'";
$result= mysqli_query($con, $query);
$emparray = array();
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$emparray[] = $row;
}
}
echo json_encode(array( "statusr" => "truer","message" => "Accesso eseguito", "datar" => $emparray) );
}else{
echo json_encode(array( "statusr" => "false","message" => "Numero di telefono sbagliato!") );
}
mysqli_close($con);
}
} else{
echo json_encode(array( "statusr" => "false","message" => "Errore, riprova!") );
}
?>
使用PDO注册
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
// echo $_SERVER["DOCUMENT_ROOT"]; // /home1/demonuts/public_html
//including the database connection file
$output = array();
require_once('db.php');
$idAKr = $_POST['idAKr'];
$cell = $_POST['cellulare'];
if( $idAKr == '' || $cell == '' ){
echo json_encode(array( "statusr" => "false","message" => "Inserisci numero di telefono!") );
}else{
$conn=$dbh->prepare("SELECT * FROM Ristoratori WHERE cellulare=?");
$conn->bindParam(1,$cell);
$conn->execute();
if($conn->rowCount() !==0){
$query= "SELECT * FROM Ristoratori WHERE cellulare='$cell'";
$result= mysqli_query($con, $query);
$emparray = array();
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$emparray[] = $row;
}
}
echo json_encode(array( "statusr" => "truer","message" => "Accesso eseguito", "datar" => $emparray) );
}else{
echo json_encode(array( "statusr" => "false","message" => "Numero di telefono sbagliato!") );
}
}
} else{
echo json_encode(array( "statusr" => "false","message" => "Errore, riprova!") );
}
?>
Register.java
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
// echo $_SERVER["DOCUMENT_ROOT"]; // /home1/demonuts/public_html
//including the database connection file
include_once("config2.php");
$idAKr = $_POST['idAKr'];
$cell = $_POST['cellulare'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$data = $_POST['data_nascita'];
$sesso = $_POST['sesso'];
$ristorante = $_POST['ristorante'];
// $data_iscrizione = $_POST['data_iscrizione'];
// $data_scadenza = $_POST['data_scadenza'];
$data_iscrizione = date('Y/m/d');
$data_scadenza = date_create_from_format('Y/m/d', $data_iscrizione)->add(new DateInterval('P6M'))->format('Y/m/d');
$fk_id_ristorante = $_POST['fk_id_ristorante'];
if($nome == '' || $cognome == '' || $data == '' || $ristorante =='' ){
echo json_encode(array( "statusr" => "false","message" => "Inserisci tutti i dati") );
}else {
$query= "SELECT * FROM Ristoratori WHERE ristorante='$ristorante'";
$result= mysqli_query($con, $query);
if(mysqli_num_rows($result) > 0){
echo json_encode(array( "statusr" => "false","message" => "Nome Ristorante già in uso") );
}else{
$query = "INSERT INTO Ristoratori (idAKr,cellulare,nome,cognome,data_nascita,sesso,ristorante,FK_id_ristorante) VALUES ('$idAKr','$cell','$nome','$cognome','$data','$sesso','$ristorante','$fk_id_ristorante')";
if(mysqli_query($con,$query)){
$query= "SELECT * FROM Ristoratori WHERE nome='$nome' AND cognome='$cognome' AND data_nascita='$data' AND ristorante='$ristorante' ";
$result= mysqli_query($con, $query);
$emparray = array();
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$emparray[] = $row;
}
}
echo json_encode(array( "statusr" => "truer","message" => "Registrazione completata!" , "datar" => $emparray) );
}else{
echo json_encode(array( "statusr" => "false","message" => "Errore5") );
}
//prova
}
mysqli_close($con);
}
} else{
echo json_encode(array( "statusr" => "false","message" => "Errore3") );
}
?>
ParseContentRistoratore.java
<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
// echo $_SERVER["DOCUMENT_ROOT"]; // /home1/demonuts/public_html
//including the database connection file
$output = array();
require_once('db.php');
$idAKr = $_POST['idAKr'];
$cell = $_POST['cellulare'];
$nome = $_POST['nome'];
$cognome = $_POST['cognome'];
$data = $_POST['data_nascita'];
$sesso = $_POST['sesso'];
$ristorante = $_POST['ristorante'];
// $data_iscrizione = $_POST['data_iscrizione'];
// $data_scadenza = $_POST['data_scadenza'];
$data_iscrizione = date('Y/m/d');
$data_scadenza = date_create_from_format('Y/m/d', $data_iscrizione)->add(new DateInterval('P6M'))->format('Y/m/d');
$fk_id_ristorante = $_POST['fk_id_ristorante'];
if($nome == '' || $cognome == '' || $data == '' || $ristorante =='' ){
echo json_encode(array( "statusr" => "false","message" => "Inserisci tutti i dati") );
}else {
$conn=$dbh->prepare("SELECT ristorante FROM Ristoratori WHERE ristorante=?");
$conn->bindParam(1,$ristorante);
$conn->execute();
if($conn->rowCount() !==0){
echo json_encode(array( "statusr" => "false","message" => "Nome Ristorante già in uso") );
}else{
$conn=$dbh->prepare('INSERT INTO Ristoratori(idAKr,cellulare,nome,cognome,data_nascita,sesso,ristorante,FK_id_ristorante) VALUES (?,?,?,?,?,?,?,?)');
//encrypting the password
$conn->bindParam(1,$idAKr);
$conn->bindParam(2,$cell);
$conn->bindParam(3,$nome);
$conn->bindParam(4,$cognome);
$conn->bindParam(5,$data);
$conn->bindParam(6,$sesso);
$conn->bindParam(7,$ristorante);
$conn->bindParam(8,$fk_id_ristorante);
$conn->execute();
if($conn->rowCount() !==0){
$query= "SELECT * FROM Ristoratori WHERE nome='$nome' AND cognome='$cognome' AND data_nascita='$data' AND ristorante='$ristorante' ";
$result= mysqli_query($conn, $query);
$emparray = array();
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$emparray[] = $row;
}
}
echo json_encode(array( "statusr" => "truer","message" => "Registrazione completata!" , "datar" => $emparray) );
}else{
echo json_encode(array( "statusr" => "false","message" => "Errore5") );
}
}
}
} else{
echo json_encode(array( "statusr" => "false","message" => "Errore3") );
}
?>
Login.java
private void registerRistoratore() throws IOException, JSONException {
if (!AndyUtilsRistoratore.isNetworkAvailableRistoratore(r_register.this)) {
Toast.makeText(r_register.this, "Internet is required!", Toast.LENGTH_SHORT).show();
return;
}
AndyUtilsRistoratore.showSimpleProgressDialogRistoratore(r_register.this);
final HashMap<String, String> mapRistoratore = new HashMap<>();
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.IDRistoratore, etidAKr.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.CELLRistoratore, etcellulare.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.NOMERistoratore, etnome.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.COGNOMERistoratore, etcognome.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.DATARistoratore, etdata.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.RISTORANTEmono, etristorante.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.SESSORistoratore, ((RadioButton) findViewById(rGroup.getCheckedRadioButtonId())).getText().toString());
// mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.DATAIscrizione, data_iscrizione.getText().toString());
// mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.DATAScadenza, data_scadenza.getText().toString());
mapRistoratore.put(AndyConstantsRistoratore.ParamsRistoratore.FKIDRistorante, fk_id_ristorante.getText().toString());
new AsyncTask<Void, Void, String>(){
protected String doInBackground(Void[] paramsRistoratore) {
String responseRistoratore="";
try {
HttpRequestRistoratore reqRistoratore = new HttpRequestRistoratore(AndyConstantsRistoratore.ServiceTypeRistoratore.REGISTERRistoratore);
responseRistoratore = reqRistoratore.prepareRistoratore(HttpRequestRistoratore.Method.POST).withDataRistoratore(mapRistoratore).sendAndReadStringRistoratore();
} catch (Exception eRistoratore) {
responseRistoratore=eRistoratore.getMessage();
}
return responseRistoratore;
}
protected void onPostExecute(String resultRistoratore) {
//do something with response
Log.d("newwwss", resultRistoratore);
onTaskCompletedRistoratore(resultRistoratore, RegTaskRistoratore);
}
}.execute();
}
private void onTaskCompletedRistoratore(String responseRistoratore,int taskRistoratore) {
Log.d("responsejson", responseRistoratore);
AndyUtilsRistoratore.removeSimpleProgressDialogRistoratore(); //will remove progress dialog
switch (taskRistoratore) {
case RegTaskRistoratore:
if (parseContentRistoratore.isSuccessRistoratore(responseRistoratore)) {
parseContentRistoratore.saveInfoRistoratore(responseRistoratore);
Toast.makeText(r_register.this, "Registrazione completata!", Toast.LENGTH_SHORT).show();
Intent intentRistoratore = new Intent(r_register.this,OnBoardingR.class);
intentRistoratore.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentRistoratore);
this.finish();
}else {
Toast.makeText(r_register.this, parseContentRistoratore.getErrorMessageRistoratore(responseRistoratore), Toast.LENGTH_SHORT).show();
}
}
}