Ayuda con base de datos


#1

Hola a todos, instale en mi Pc wampserver y cree una Base de Datos MySQL en la carpeta www cree una carpeta llamada prueba y dentro 3 archivos .php
llamados registrarAlumno.php consultar.php y funciones.php de manera que funciones.php tiene el siguente código:

funciones.php


<?php 
header( 'Content-Type: text/html;charset=utf-8' );
function ejecutarSQLCommand($commando){
  $mysqli = new mysqli("localhost", "root", "", "dbpueba");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error);
    exit();
}

if ( $mysqli->multi_query($commando)) {
     if ($resultset = $mysqli->store_result()) {
    	while ($row = $resultset->fetch_array(MYSQLI_BOTH)) {
    	}
    	$resultset->free();
     }   
}

Y funciona correctamente.

Ahora acabo de crear en 000webhost la misma base de datos pero no se a que directorio he de subir los archivos .php o si se han de crear.
Agradeceria una ayuda gracias.


Portal php y base de datos ayuda
#2

Hola,

Los ficheros los debes subir dentro de la carpeta public_html o a alguna carpeta que hagas dentro de esta carpeta.

También deberás modificar los datos de tu función ejecutarSQLCommand para que incluya los datos de conexión a tu nueva base de datos en 000webhost.
Estos datos son los que se han mostrado cuando has creado la base de datos en 000webhost y suelen ser los siguientes:

En lugar de localhost debes usar el nombre del servidor de la BD, que es del tipo mysqlXX.000webhost.com (donde XX es un número).

En lugar de root deberás poner el nombre de tu usuario de la BD que suele ser del tipo aXXXXXX_yyyyy donde aXXXXX es tu identificador y yyyyy una palabra que añadistes cuando hicistes la base de datos.

En lugar de dbprueba deberás usar el nombre de la base de datos en 000webhost que suele ser del tipo aXXXXX_zzzzzz donde aXXXXX es tu identificador y zzzzzz es una palabra que añadistes cuando hicistes la base de datos.

Además deberás añadir la contraseña del usuario de la BD la que has configurado cuando has creado la base de datos. Este dato va dentro de las dobles comillas que hay entre “root” y “dbprueba”


#3

d3iti Gracias mejor no se puede haber explicado me pongo manos a la obra y ya le comento si lo logro.

Mil gracias.


#4

d3iti acabo de realizar todo como usted me dijo en la carpeta public_html he subido la carpeta prueba con los .php cambiando usuario nombre de db y contraseña, pero sin éxito no se registra en la tabla.

Quedo asi: función.php:

function ejecutarSQLCommand($commando){

$mysqli = new mysqli(“mysql50.570webhost.com”, “a4720645_darkol”, “pasword”, “a7390535_dbprueb”);
“los numeros de contraseña y usuario son una imitación”

La dirección que puse en la aplicación android para conectar con 000webhost es la siguiente:
http://mysql50.570webhost.com/prueba/registrarAlumno.php?cc=

Para conectar con el servidor local del Pc uso la siguiente y conecta sin problemas:
http://192.168.1.132/prueba/registrarAlumno.php?cc=

¿Qué parte estaré haciendo mal ?
Gracias por su tiempo.


#5

Hola,

¿Estás consiguiendo algún mensaje de error?

No se de donde sacas la dirección que escribes, mysql50.580webhost.com, pero deberías usar la que tiene tu sitio alojado en 000webhost.

Sobre los datos que pones tampoco entiendo a que servidor te estás refiriendo con myslq50.570webhost.com ya que como te comenté el nombre del servidor de la base de datos de 000webhost suelen ser de la forma mysql[COLOR=“Red”]X[/COLOR].000webhost.com . Este dato lo puedes ver entrando al CPanel, sección MySQL.


#6

d3iti Gracias nuevamente y disculpe mi torpeza, pero me equivoque editando los datos le expongo nuevamente los datos introducidos.
Al crear la base de datos 000webhost me entrega estos datos para guardar:

Database:
$mysql_host = “mysql20.000webhost.com”;
$mysql_database = “a3820635_basedatos”;
$mysql_user = “a3820635_usuario”;
$mysql_password = “password”;

Y los datos que edito en función ejecutarSQLCommand quedan asi:

function ejecutarSQLCommand($commando){

$mysqli = new mysqli(“mysql20.0000webhost.com”, “a3820635_usuario”, “password”, “a3820635_gasedatos”);

Y la ruta que tengo puesta en la aplicación es la siguente quizá sea ese el problema:

http://mysql20.000webhost.com/prueba/registrarAlumno.php?cc=

Quiza debería ser:

http://mysql10.000webhost.com/public_html/prueba/registrarAlumno.php?cc=

Aunque lo acabo de probar y tampoco resulto.

No se que parte estoy haciendo mal y discúlpeme nuevamente.
Gracias por su paciencia.


#7

Hola,
No tengo muy claro que intentas hacer, hablando en general. Hablas de una aplicación Android, que imagino que llamará a algún fichero en el servidor, por ejemplo, registrarUsuario.php y le pasará algún dato para registrar, aunque todo lo que digo sólo es una suposición para mí.

Comentar que las cuentas gratuitas de 000webhost no permiten acceder a las base de datos de forma externa, aunque en tu caso entiendo que usas unos ficheros .php para evitar esta restricción y en lugar de hacer una conexión directa a la base de datos, cosa que no está permitido, hacer la conexión a través de los ficheros .php que tienes en el servidor.

En este caso te recomiendo que comiences probando la aplicación desde un PC normal, ejecutando tu aplicación directamente y cuando todo funcione es cuando deberás pasar a usarlo con tu aplicación Android.

Como dirección de tu sitio web puedes probar la que ya tienes, que según veo es la siguiente:

Date cuenta de que en tus mensajes anteriores estás haciendo referencia a un fichero l lamado registrarAlumno.php cuando lo que al parecer tienes en el servidor es un fichero llamado registrarUsuario.php.

Por último indicar que hasta aquí te puede decir sin ver el contenido de tus ficheros registrarUsuario.php y consultarUsuario.php.


#8

d3iti,

al final me mandara a cuenca por mi torpeza le explicare de un principio mis intenciones y espero explicarme bien.
1º crear una aplicación android que registre datos en una base de datos en la nube ( 1º la provaremos en servidor local ) y poder consultar los datos introducidos en tiempo real.

Después de crear la aplicación android la instalo en un terminal real, consta de un simple formulario de introducción de datos y esta es su Activity:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        Button b1=(Button)findViewById(R.id.button1);
        final EditText cc=(EditText)findViewById(R.id.editTextCedula);
        final EditText nombre=(EditText)findViewById(R.id.editTextNombre);
        final EditText apellido=(EditText)findViewById(R.id.editTextApellido);
        final EditText direccion=(EditText)findViewById(R.id.editTextDireccion);
        final EditText telefono=(EditText)findViewById(R.id.editTextTelefono);
        
        b1.setOnClickListener(new View.OnClickListener() {
			
			@SuppressLint("ShowToast") @Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				try{
					httpGetData("http://10.0.2.2/prueba/registrarUsuario.php?cc="+cc.getText()+
							"&nombre="+nombre.getText()+"&apellido="+apellido.getText()+
							"&direccion="+direccion.getText()+"&telefono="+telefono.getText());
					Toast.makeText(getApplicationContext(), "El dato ha sido enviado correctamente", 1000).show();
				}catch(Exception e){
					Toast.makeText(getApplicationContext(), "Error en el envio de la informacion, verifique su conexion a internet y vuelva a intentarlo.", 1000).show();
					
				}
				
			}
		});
        
        cc.setOnFocusChangeListener(new View.OnFocusChangeListener() {
			
			@Override
			public void onFocusChange(View v, boolean hasFocus) {
				// TODO Auto-generated method stub
				if(hasFocus==false){
					JSONArray ja=null;
					try {
						String data;
						data=httpGetData("http://10.0.2.2/prueba/consultaUsuario.php?cc="+cc.getText());
						if(data.length()>1)
							ja=new JSONArray(data);
						
						
					} catch (JSONException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
						Toast.makeText(getApplicationContext(), "Error recuperando la informacion del servidor, verifique su conexion a internet y vuelva a intentarlo.", 1000).show();
						
					}
					try{
						
					nombre.setText(ja.getString(1));
					apellido.setText(ja.getString(2));
					direccion.setText(ja.getString(3));
					telefono.setText(ja.getString(4));
					} catch (Exception e) {

						nombre.setText("");
						apellido.setText("");
						direccion.setText("");
						telefono.setText("");
					}
				}
			}
		});

        
    }
    

    public String httpGetData(String mURL) {
           String response="";
           mURL=mURL.replace(" ", "%20");
            Log.i("LocAndroid Response HTTP Threas","Ejecutando get 0: "+mURL);
             HttpClient httpclient = new DefaultHttpClient();
             
            Log.i("LocAndroid Response HTTP Thread","Ejecutando get 1");
       	HttpGet httppost = new HttpGet(mURL);
            Log.i("LocAndroid Response HTTP Thread","Ejecutando get 2");
   try {
      

            Log.i("LocAndroid Response HTTP","Ejecutando get");
           // Execute HTTP Post Request
         ResponseHandler<String> responseHandler=new BasicResponseHandler();
           	response = httpclient.execute(httppost,responseHandler);
            Log.i("LocAndroid Response HTTP",response);
       	} catch (ClientProtocolException e) {
           Log.i("LocAndroid Response HTTP ERROR 1",e.getMessage());
           // TODO Auto-generated catch block
       } catch (IOException e) {
           
           Log.i("LocAndroid Response HTTP ERROR 2",e.getMessage());
           // TODO Auto-generated catch block
       }
       return response;
       
       } 
}

Creacion de Servidor Local con WANPSERVER phpMyAdmin

Luego en un Pc que tengo en un rincón de casa le instalo WampServer2.2
Lo inicio y entro en phpMyAdmin luego entro en base de datos y creo una base de datos llamada dbprueba y una tabla llamada tablaprueba con 5 celdas.

La dirección ip de este ordenador donde esta instalado el phpMyAdmin es 10.0.2.2 por eso en el código de la aplicación android puse:
http://10.0.2.2/prueba/registrarUsuario.php?cc=

En el directorio de WAMPSERVER www que su ruta es :
C:\wamp\www
Creo una carpeta llamada prueba la cual contiene los 3 archivos .php

registrarUsuario.php consultarUsuario.php y functions.php de manera que functions.php tiene el siguente código completo:

functions.php


<?php 
header( 'Content-Type: text/html;charset=utf-8' );
function ejecutarSQLCommand($commando){
   $mysqli = new mysqli("localhost", "root", "", "dbprueba");
/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error);
    exit();
}

if ( $mysqli->multi_query($commando)) {
     if ($resultset = $mysqli->store_result()) {
    	while ($row = $resultset->fetch_array(MYSQLI_BOTH)) {
    		
    	}
    	$resultset->free();
     }  
}
$mysqli->close();
}
function getSQLResultSet($commando){ 
  $mysqli = new mysqli("localhost", "root", "", "dbprueba");

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error);
    exit();
}
if ( $mysqli->multi_query($commando)) {
	return $mysqli->store_result();   
}
$mysqli->close();
}

?>

Inicio la aplicación Android desde la red local inserto datos y se envían perfecto a la base de datos que esta en el Pc, realizo una consulta y me retorna los datos que ya existen el la base de datos, todo funciona bien.

Ahora lo que intento es que la base de datos este en 000webhost para ver como funcionaria online.
Es por ello que he creado una base de datos en 000webhost
Estos son los datos:

Database:
$mysql_host = “mysql20.000webhost.com”;
$mysql_database = “a3820635_basedatos”;
$mysql_user = “a3820635_usuario”;
$mysql_password = “password”;

Y esta la ruta que he cambiado en el functions.php
$mysqli = new mysqli(“localhost”, “root”, “”, “dbprueba”); esta la cambio por:

Esta otra:
$mysqli = new mysqli(“mysql20.0000webhost.com”, “a3820635_usuario”, “password”, “a3820635_basedatos”);

Y en la conexión de la aplicación Android
Cambio esta “http://10.0.2.2/prueba/registrarUsuario.php?cc=

Por esta otra:
http://mysql20.000webhost.com/prueba/registrarUsuario.php?cc=

La aplicación Android me dice que se han enviado los datos correctamente pero no aparece nada en la base de datos. ¿ Que paso ? se perdieron ?

A nivel local todo funciona perfecto registra y retorna datos pero con 000webhost no lo consigo. ¿ Realizo algo mal, o es que no es posible en las cuentas gratuitas de 000webhost no permiten acceder a las base de datos de forma externa ?

De la forma que lo intento ¿ No es posible ? que tengo mal.

Como lo puedo solucionar ?

Como agradecerle su paciencia y su tiempo ?

Mil gracias de nuevo y muy de agradecer todo el tiempo que invierte en ayudar.


#9

Hola,

Creo que hay un pequeño error en tu último paso. Donde deberías enviar los datos es a la dirección:
http://cgfandroiddeveloper.hostoi.com/prueba/registrarUsuario.php?cc=

en lugar de la dirección que escribes en tu aplicación Android (“http://mysql20.000webhost.com/prueba/registrarUsuario.php?cc=”)

Tienes que enviar los datos a la dirección del servidor web y no al servidor de la base de datos, ya que a la base de datos accedes a través del servidor web. Esto lo haces porque en 000webhost no puedes acceder directamente al servidor de la base de datos y debes hacerlo a través del servidor web cuya dirección es la que tienes que cambiar.


#10

d3iti Siiiiiiiiiiiiiiiiiiiiiiiiii si era ese el error que estaba cometiendo poníamos

En lugar de localhost debes usar el nombre del servidor de la BD, que es del tipo mysqlXX.000webhost.com (donde XX es un número).

Por eso poníamos:

(“http://mysql20.000webhost.com/prueba/registrarUsuario.php?cc=”)

y no conectaba ya conecta perfecto le doy mil gracias pienso que a muchos les pasara este error y seguro que lo leerán espero les sirva y de nuevo mil mil mil gracias.

Continuare aprendiendo de los errores es como mas se aprende espero verle de nuevo.

Saludos desde Denia, Alicante, España.

Cuidese.


#11

Si ya está solucionado estupendo.
Un saludo.


#13