Y este código hace toda la magia:
$sentencia = $pdo->prepare(«SELECT @@identity AS id»);
$sentencia ->execute();
$resultado = $sentencia ->fetchAll();
$id = 0;
foreach ($resultado as $row) {
$id = $row[«id»];
}
Vamos a crear una base de datos llamada relacional con dos tablas unidas por una foreign key
tabla: estudiantes
tabla: cursos
Como se que eres don vergas y doña vergas te voy dejar el código de la base datos y puedas implementarlo de forma rápida:
CREATE TABLE `cursos` (
`id_cursos` int(11) NOT NULL,
`id_estudiante` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `estudiante` (
`id_estudiante` int(11) NOT NULL,
`nombre` varchar(60) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `estudiante`
ADD PRIMARY KEY (`id_estudiante`);
ALTER TABLE `estudiante`
MODIFY `id_estudiante` int(11) NOT NULL AUTO_INCREMENT;
Ahora nos toca la webservices: como yo lo estoy creando de forma loca con mi xampp creare una carpeta llamada relacional y guardare ahí mi webservices con el nombre de registro.php
la ruta seria: C:xampphtdocsrelacional
<?php
$host_database = 'mysql:dbname=relacional;host=localhost';
$username = "root";
$password = "12345";
try{ $pdo = new PDO($host_database,$username,$password); }
catch(PDOException $e){ echo 'Error: ' . $e->getMessage(); }
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
$nombre = $_POST['nombre'];
$Curso = $_POST['id_cursos'];
//Recibimos los valores de los cursos seleccionados
$sentencia = $pdo->prepare( 'INSERT INTO estudiante (id_estudiante,nombre) VALUES (null, :nombre)' );
$sentencia ->execute(array( ':nombre' => $nombre, ));
//Después del insert consultamos el id insertado:
$sentencia = $pdo->prepare("SELECT @@identity AS id");
$sentencia ->execute();
$resultado = $sentencia ->fetchAll();
$id = 0;
foreach ($resultado as $row) {
$id = $row["id"];
}
//Ya tenemos el último id insertado, ahora hacemos el insert en la tabla students_courses
$sentencia = $pdo->prepare( 'INSERT INTO cursos (id_cursos,id_estudiante) VALUES (:id_cursos, :id_estudiante)' );
$sentencia ->bindParam(':id_cursos', $idCurso);
$sentencia ->bindParam(':id_estudiante', $id); //Variable del último id registrado en la tabla de students
//Insertamos dependiendo de los id's elegidos
foreach ($Curso as $option_value)
{
$idCurso = $option_value;
$sentencia ->execute();
}
}
?>
Ya esta armado nuestra webservices ahora hay que crear la app, para ello crearemos una nueva aplicación y le agregaremos lo siguiente en su builgradle:
useLibrary'org.apache.http.legacy'
Y quedara de la siguiente forma:
android {
compileSdkVersion 26
buildToolsVersion "26.0.2"
defaultConfig {
applicationId "com.androidmorefast.pc.appwebservicesbasico"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
useLibrary'org.apache.http.legacy'
}
Ahora en nuestra aplicación debemos ir a nuestro res->values-> String
Ahí debemos agregar un array llamado cursos que contendrá todos nuestros cursos:
<resources>
<string name="app_name">AppWebServicesBasico</string>
<string-array name="cursos">
<item>Matematicas</item>
<item>Algebra</item>
<item>Quimica</item>
<item>Ciencias</item>
<item>Fisica</item>
</string-array>
</resources>
En nuestro AndroidManifest debemos agregar la siguiente linea:
<uses-permission android:name="android.permission.INTERNET"/>
Debemos crear una interfaz de un editText un spinner y un botón deberia quedar como se muestra en la siguiente imagen:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.androidmorefast.pc.appwebservicesbasico.MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:text="Enviar datos al servidor"
android:textSize="20dp"
android:textColor="#000000" />
<EditText
android:id="@+id/txtNombre"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_below="@+id/textView"
android:layout_marginTop="28dp"
android:ems="10"
android:gravity="center"
android:hint="Ingresa Nombre"
android:inputType="textPersonName" />
<Spinner
android:id="@+id/sp_cursos"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txtNombre"
android:layout_centerHorizontal="true"
android:layout_marginTop="46dp"
android:ems="10"
android:gravity="center"
android:entries="@array/cursos"/>
<Button
android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/sp_cursos"
android:layout_centerHorizontal="true"
android:layout_marginTop="38dp"
android:text="Enviar datos " />
</RelativeLayout>
Por ultimo nuestro MainActivity contendra lo siguiente
package com.androidmorefast.pc.appwebservicesbasico;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
String ServerURL = "http://192.168.8.133/relacional/registrar.php" ;
EditText nombre;
Button button;
String TempNombre;
int TempCurso;
Spinner curso;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
curso = (Spinner) findViewById(R.id.sp_cursos);
nombre = (EditText)findViewById(R.id.txtNombre);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ObtenerDatos();
InsertaDatos(TempNombre, TempCurso);
}
});
}
public void ObtenerDatos(){
TempNombre = nombre.getText().toString();
TempCurso = curso.getSelectedItemPosition();
}
public void InsertaDatos(final String nombre,final int cursos){
class SendPostReqAsyncTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String NombreHolder = nombre ;
int CursoHolder = cursos ;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("id_cursos[]", Integer.toString(CursoHolder)));
nameValuePairs.add(new BasicNameValuePair("nombre", NombreHolder));
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(ServerURL);
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
return "Datos insertados con éxito";
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Toast.makeText(MainActivity.this, "Datos enviados con éxito", Toast.LENGTH_LONG).show();
}
}
SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask();
sendPostReqAsyncTask.execute(nombre,Integer.toString(cursos));
}
}
Y con eso hemos culminado el ejercicio, espero les aya servido.
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
Jajaja estuvo genial, muchas gracias lo pondré en práctica!!
Hurrah, that’s what I was seeking for, what a material!
present here at this webpage, thanks admin of this site.