2016-11-18 2 views
0

Ну, я объясняю вам, что я пытаюсь сделать, мне нужно вставить пользователя из моего устройства Android в localhost, я использую веб-службу в php, и кажется, что она не работает, потому что он говорит, что я вставил, что пользователь в моей базе данных, но когда я иду к локальному хосту я не нахожу мой пользователь ..Веб-сервис не работает точно

Вот мой код:

Java (Android):

public class NewUsuarioPart2Activity extends AppCompatActivity { 

private EditText textoEmail, textoDNI, textoEdad,textoNombreUsu; 
private Button btnHecho; 
private String nom = ""; 
private String apellido = ""; 
private String contra = ""; 
private String contraNew = ""; 
private int id = 1; 



@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_usuario_nuevo_part2); 

    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
     String str = "*** My thread is now configured to allow connection"; 

     Toast.makeText(getApplication(), str, Toast.LENGTH_LONG).show(); 
    } 

    //LO GUARDADO DE NEWUSUARIOACTIVITY 
    if (savedInstanceState == null) { 
     Bundle extras = getIntent().getExtras(); 
     if(extras == null) { 
      nom = null; 
      apellido = null; 
      contra = null; 
      contraNew = null; 
     } else { 
      nom = extras.getString("STRING_NOM"); 
      apellido = extras.getString("STRING_APELLIDO"); 
      contra = extras.getString("STRING_CONTRA"); 
      contraNew = extras.getString("STRING_CONTRA_NEW"); 
     } 
    } else { 
     nom = (String) savedInstanceState.getSerializable("STRING_NOM"); 
     apellido = (String) savedInstanceState.getSerializable("STRING_APELLIDO"); 
     contra = (String) savedInstanceState.getSerializable("STRING_CONTRA"); 
     contraNew = (String) savedInstanceState.getSerializable("STRING_CONTRA_NEW"); 
    } 

    textoEmail = (EditText)findViewById(R.id.edEmail); 
    textoDNI = (EditText)findViewById(R.id.edDNI); 
    textoEdad = (EditText)findViewById(R.id.edEdad); 
    textoNombreUsu = (EditText)findViewById(R.id.edNomUsu); 

    btnHecho = (Button)findViewById(R.id.btnHecho); 
    btnHecho.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      id++; 
      new Insertar(NewUsuarioPart2Activity.this).execute(); 
      Intent intent = new Intent(NewUsuarioPart2Activity.this, MainActivity.class); 
      v.getContext().startActivity(intent); 

     } 
    }); 

} 

//What I do here is insert my new user to my database 



private boolean insertar(){ 

     HttpClient httpclient; 
     List<NameValuePair> nameValuePairs; 
     HttpPost httppost; 
     httpclient=new DefaultHttpClient(); 
     httppost= new HttpPost("http://192.168.231.88/xabiagame/data/insertarOtroMetodo.php"); // Url del Servidor 
     //Añadimos nuestros datos 
     nameValuePairs = new ArrayList<NameValuePair>(8); 
     nameValuePairs.add(new BasicNameValuePair("id",String.valueOf(id).trim())); 
     nameValuePairs.add(new BasicNameValuePair("nombre",nom.trim())); 
     nameValuePairs.add(new BasicNameValuePair("apellidos",apellido.trim())); 
     nameValuePairs.add(new BasicNameValuePair("email",textoEmail.getText().toString().trim())); 
     nameValuePairs.add(new BasicNameValuePair("dni",textoDNI.getText().toString().trim())); 
     nameValuePairs.add(new BasicNameValuePair("contrasenya",contraNew.trim())); 
     nameValuePairs.add(new BasicNameValuePair("usuario",textoNombreUsu.getText().toString().trim())); 
     nameValuePairs.add(new BasicNameValuePair("edad",textoEdad.getText().toString().trim())); 

     for (int i=0; i<nameValuePairs.size(); i++){ 
      Log.i("User", nameValuePairs.get(i).toString()); 
     } 

     try { 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      httpclient.execute(httppost); 
      return true; 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return false; 
    } 

    //AsyncTask para insertar Personas 
    class Insertar extends AsyncTask<String,String,String> { 

     private Activity context; 

     Insertar(Activity context){ 
      this.context=context; 
     } 
     @Override 
     protected String doInBackground(String... params) { 
      // TODO Auto-generated method stub 
      if(insertar()) 
       context.runOnUiThread(new Runnable(){ 
        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         Toast.makeText(context, "Persona insertada con exito", Toast.LENGTH_LONG).show(); 

         nom = null; 
         apellido = null; 
         contra = null; 
         contraNew = null; 

         textoEmail.setText(""); 
         textoDNI.setText(""); 
         textoEdad.setText(""); 
         textoNombreUsu.setText(""); 
        } 
       }); 
      else 
       context.runOnUiThread(new Runnable(){ 
        @Override 
        public void run() { 
         // TODO Auto-generated method stub 
         Toast.makeText(context, "No insertado", Toast.LENGTH_LONG).show(); 
        } 
       }); 
      return null; 
     } 
    } 
} 

Вот мой веб-службы в Php (у меня есть два):

И эти два кажется, что он не работает.

Первый один:

<?PHP 
$hostname_localhost ="localhost"; //nuestro servidor 
$database_localhost ="xabiagame";//Nombre de nuestra base de datos 
$username_localhost ="root";//Nombre de usuario de nuestra base de datos (yo utilizo el valor por defecto) 
$password_localhost ="";//Contraseña de nuestra base de datos (yo utilizo por defecto) 

//'ejemplo.com:3307', 'usuario_mysql', 'contraseña_mysql' 

$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost)//Conexión a nuestro servidor mysql 
or 
trigger_error(mysql_error(),E_USER_ERROR); //mensaaje de error si no se puede conectar 
mysql_select_db($database_localhost, $localhost);//seleccion de la base de datos con la qu se desea trabajar 

//variables que almacenan los valores que enviamos por nuestra app, (observar que se llaman igual en nuestra app y aqui) 
$id=$_POST['id']; 
$nombre=$_POST['nombre']; 
$apellidos=$_POST['apellidos']; 
$email=$_POST['email']; 
$dni=$_POST['dni']; 
$contrasenya=$_POST['contraseña']; 
$usuario=$_POST['usuario']; 
$edad=$_POST['edad']; 

$query_search = "insert into usuario(id,nombre,apellidos,email, dni, contraseña, usuario, edad) values ('".$id."','".$nombre."','".$apellidos."','".$email."','".$dni."','".$contrasenya."','".$usuario."','".$edad."')";//Sentencia sql a realizar 
$query_exec = mysql_query($query_search) or die(mysql_error());//Ejecuta la sentencia sql. 

/* Consignar la transación */ 
if (!mysqli_commit($localhost)) { 
    print("Falló la consignación de la transacción\n"); 
    exit(); 
} 
/* Cerrar la conexión */ 
mysqli_close($localhost); 

?> 

Другой:

<?php 

$id=$_POST['id']; 
$nombre=$_POST['nombre']; 
$apellidos=$_POST['apellidos']; 
$email=$_POST['email']; 
$dni=$_POST['dni']; 
$contrasenya=$_POST['contraseña']; 
$usuario=$_POST['usuario']; 
$edad=$_POST['edad']; 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "xabiagame"; 
// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection fallida: " . $conn->connect_error); 
} 
$sql = "INSERT INTO usuario (id,nombre,apellidos,email, dni, contraseña, usuario, edad) 
VALUES ('$id','$nombre','$apellidos','$email','$dni','$contrasenya','$usuario','$edad')"; 
if ($conn->query($sql) === TRUE) { 
    echo "se creo el usuario"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 
$conn->close(); 
?> 

Я не знаю, что это моя ошибка .. Кажется, что все хорошо, я думаю ..

+0

Ваш код широко открыт для ** SQL-инъекций ** атак. просто представьте, что кто-то POSTing $ edad like ''); DROP TABLE usuario; - '- пожалуйста, используйте параметризованные инструкции для обеспечения безопасности вашей системы. –

+0

@FranzGleichmann это окончательный проект для моей средней школы, мне все равно, что не знаю, какие-то атаки. Я знаю, что вы правильно это говорите и благодарите за консультацию, но, я знаю, я просто пытаюсь вставить или получить информацию .. когда я уже сделал это, я сосредоточусь на параметризованных заявлениях ... Спасибо за ваш ответ: D – AlbusAllDay

+2

ну, я не мог этого знать. во всяком случае: это школьный проект ** нет ** извинения за написание ненадежного кода, так как таким образом вы тренируетесь, чтобы писать ненадежный код в будущем. также: ваш код будет разорваться в любое время, когда кто-то вставляет любое значение, содержащее '' '. –

ответ

0

Проблема в том, что вы всегда назначаете тот же id записи, которую вы пытаетесь сохранить в базе данных. Следовательно, ошибка, которую пользователь уже существует.

Проверьте код здесь:

private int id = 1; 

Эта переменная никогда не изменяется в коде, так что все записи, которые вы пытаетесь сохранить у id=1. По моему мнению, вы не должны отправлять id из своего приложения для Android, его задание вашей базы данных, чтобы назначить идентификатор каждой новой вставке. Проверьте стратегии первичного ключа, например. автоматическое приращение.

+0

Спасибо за ответ, но это не то, что я думаю, потому что, когда я ставлю id равным 2, он показывает мне то же самое ... пользователь вставил, но никто в my database – AlbusAllDay

+0

В вашей базе данных есть поле 'id', обозначенное как Первичный ключ? Если это точно, то сохранение того же 'id' и вставки записей вызовет проблемы. Так что это одна ошибка. Теперь попробуйте отладить ваш запрос на вставку, добавив 'echo $ sql;' в ваш 'php' чуть ниже' 'sql =" INSERT ... "и попытайтесь запустить его в вашей базе данных. – pleft

+0

Да, _id_ отмечен в качестве основного ключа ... Когда я запускаю эту веб-службу php в [link] http://sandbox.onlinephpfunctions.com/, она показывает мне: '
Неустранимая ошибка: Неиспользуемая ошибка: класс 'mysqli' не найден в [...] [...]: 17 Стек след: # 0 {главная} выброшен в [...] [...] на линии
' – AlbusAllDay

0
<?php 
$data = json_decode(file_get_contents('php://input'), true); 
    $key= $input->value; //try like this for all below. 
    /* $id=$_POST['id']; 
$nombre=$_POST['nombre']; 
$apellidos=$_POST['apellidos']; 
$email=$_POST['email']; 
    $dni=$_POST['dni']; 
$contrasenya=$_POST['contraseña']; 
$usuario=$_POST['usuario']; 
$edad=$_POST['edad']; 
*/ 
$servername = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $dbname = "xabiagame"; 
    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
die("Connection fallida: " . $conn->connect_error); 
} 
$sql = "INSERT INTO usuario (id,nombre,apellidos,email, dni, contraseña, usuario, edad) 
    VALUES ('$id','$nombre','$apellidos','$email','$dni','$contrasenya','$usuario','$edad')"; 
if ($conn->query($sql) === TRUE) { 
echo "se creo el usuario"; 
} else { 
echo "Error: " . $sql . "<br>" . $conn->error; 
} 
$conn->close(); 
?> 
+0

Почему ты прокомментировал идентификатор, nombre, apellidos ... и т. д. – AlbusAllDay

+0

вы пытаетесь получить значения таким образом. $ key = $ input-> value..ex: $ id = $ input-> id; ay for all –

+0

Я сделал так, и он говорит мне то же самое, пользователь вставил, но в моей базе ничего нет ... – AlbusAllDay

Смежные вопросы