Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Cuestiones elementales de estructura

Estas en el tema de Cuestiones elementales de estructura en el foro de Frameworks JS en Foros del Web. Cuestión 1: Veamos... actualmente tengo una funcion JS que carga un archivo nuevocliente.php que contiene un formulario. Al pulsar el botón "enviar" del formulario este ...
  #1 (permalink)  
Antiguo 17/11/2009, 21:20
Avatar de caneva  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla (España)
Mensajes: 81
Antigüedad: 17 años, 10 meses
Puntos: 1
Cuestiones elementales de estructura

Cuestión 1:
Veamos... actualmente tengo una funcion JS que carga un archivo nuevocliente.php que contiene un formulario. Al pulsar el botón "enviar" del formulario este llama a otra función JS que hace una llamada mediante ajax a un archivo insertar_usuario.php pasándole por post los parámetros del formulario. Hasta aquí bien.

El problema surge cuando en insertar_usuario.php intento hacer una consulta SQL, concretamente intento usar un include('conexion.php'); para la conexión mysql, como paso previo para hacer la consulta y claro este no funciona, sin embargo al poner el código directamente de conexion.php en insertar_usuario.php si que funciona. Lo que me indica que los includes no funcionan si has hecho una petición de cargar un .php mediante ajax, obviamente la solución inicial sería hacer la conexión mysql en cada uno de los archivos que llame, pero supongo que debe haber una forma más eficiente de hacer esto que desconozco ¿cual?

También y en relación con la cuestión número 2, no deja de ser curioso que si cargo conexion.php en el index luego no puedo hacer consultas desde insertar_usuario.php usándola.

Cuestión 2:
De forma análoga si quiero llamar a funciones JS o PHP que haya cargado, en el index, es decir en el principal, antes de ese primer archivo (nuevocliente.php) que estoy llamando con ajax ¿cómo puedo usarlas desde el sin necesidad de volver a ponerlas dentro del mismo?

Cuestión 3:
Por otro lado he observado que lo que devuelve un archivo .php mediante una llamada desde JS, es decir una llamada AJAX, suele ser texto plano ¿hay alguna forma de recibir un array u otros tipos de datos? ¿cómo? Si no tienen tiempo para responder en profundidad, espero que al menos puedan facilitarme un enlace para seguir investigando yo mismo.
__________________
Cita:
"El camino empieza renunciando al control, y volviéndose flexibles."

Última edición por caneva; 17/11/2009 a las 21:27
  #2 (permalink)  
Antiguo 18/11/2009, 09:17
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cuestiones elementales de estructura

Debes tener en cuenta que lo que haces con Ajax es generar una nueva petición al servidor, por eso, ya no tiene nada que ver con el código PHP que se ejecutó para generar la página activa. En cuanto a ejecutar el código Javascript que se recibe en la respuesta, lee esto:
http://www.forosdelweb.com/f77/howto...e-ajax-510438/

Sobre el tipo de dato recibido, el único tipo de dato que el objeto XMLHttpRequest() procesa nativamente es XML (responseXML) Otros formatos de datos como JSON debes procesar manualmente a partir del texto plano (responseText)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 18/11/2009, 10:50
Avatar de caneva  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla (España)
Mensajes: 81
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Cuestiones elementales de estructura

Vale pero eso no explica porque si hago un include/require a conexion.php dentro de insertar_usuario.php (recuerdo que es el archivo al que llamo mediante ajax), con lo que debería interpretar el archivo en el servidor antes de devolver una respuesta por la petición, no realiza la conexión a la base de datos.
__________________
Cita:
"El camino empieza renunciando al control, y volviéndose flexibles."
  #4 (permalink)  
Antiguo 18/11/2009, 10:59
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cuestiones elementales de estructura

Configura correctamente error_reporting para ver cuál es el problema. Puede ser un problema de rutas o cualquier otra cosa.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #5 (permalink)  
Antiguo 18/11/2009, 11:05
Avatar de caneva  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla (España)
Mensajes: 81
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Cuestiones elementales de estructura

Cita:
Iniciado por David Ver Mensaje
Configura correctamente error_reporting para ver cuál es el problema. Puede ser un problema de rutas o cualquier otra cosa.
Según leo en php.net error_reporting debería tener uno de los siguientes valores:
http://www.php.net/manual/en/errorfunc.constants.php

Sin embargo en mi host error_reporting está configurado como 1013 ¿puede afectar esto al problema que nos atañe? ¿cómo es posible que ese número no este contemplado en la lista de php.net?
__________________
Cita:
"El camino empieza renunciando al control, y volviéndose flexibles."
  #6 (permalink)  
Antiguo 18/11/2009, 11:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cuestiones elementales de estructura

Es que el número puede ser la combinación de cualquiera de las constantes.

Usa la función error_reporting() para configurar esa directiva en tiempo de ejecución. Lo más probable es que se esté produciendo algún error al intentar conectar o al intentar incluir el archivo.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 18/11/2009, 11:50
Avatar de caneva  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla (España)
Mensajes: 81
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Cuestiones elementales de estructura

Cita:
Iniciado por David Ver Mensaje
Es que el número puede ser la combinación de cualquiera de las constantes.

Usa la función error_reporting() para configurar esa directiva en tiempo de ejecución. Lo más probable es que se esté produciendo algún error al intentar conectar o al intentar incluir el archivo.
Pues he estado buscando información al respecto de como usar correctamente error_reporting() pero es todo un poco confuso, probé primero a poner error_reporting(E_ALL) en mi cabecero.php pero no conseguía nada, en insertar_usuario.php tampoco, así que algo estoy haciendo mal ¿te importaría decirme en que archivo debería de incluirlo en este caso y de que forma? gracias.
__________________
Cita:
"El camino empieza renunciando al control, y volviéndose flexibles."
  #8 (permalink)  
Antiguo 18/11/2009, 11:58
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cuestiones elementales de estructura

Debes incluirlo en insertar_usuario.php en la primera línea. Además, llama a la página desde la barra de direcciones de tu navegador, así te será más fácil ver los errores que produce.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #9 (permalink)  
Antiguo 18/11/2009, 12:14
Avatar de caneva  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla (España)
Mensajes: 81
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Cuestiones elementales de estructura

He seteado el valor de la variable $nombre, ya que como voy a llamar el archivo desde url de otra forma no podría enviarle el valor mediante post (la anterior declaración la deje comentada):


http://www.midominio.com/funciones/insertar_usuario.php
Código PHP:
<?php
error_reporting
(E_ALL);

//$usuario_nombre = $_POST["nombre"];
$usuario_nombre "enrique";
echo 
'$usuario_nombre: '.$usuario_nombre.'<br /><br />';

//Conexion a la bd
include('http://www.midominio.com/funciones/cBD.php');

//Consulta para ver si existen ese usuario

$consulta mysql_query("select * from clientes where nombre='$usuario_nombre'");
$filas_devueltas_por_la_consulta mysql_fetch_array($consulta);
echo 
'$filas_devueltas_por_la_consulta: '.$filas_devueltas_por_la_consulta.'<br />';
if (
$filas_devueltas_por_la_consulta == "" || $filas_devueltas_por_la_consulta == "0" || $filas_devueltas_por_la_consulta == "null"  )
{    
echo 
'El usuario no existe en la base de datos';
}
else

 echo 
'Este usuario ya estaba en la base de datos';
}

?>
Y lo que me muestra es esto:
Código PHP:
$usuario_nombreenrique 
Es decir se come todo lo relacionado con la base de datos.

Por si hace falta el contenido de la conexión que se intenta incluir mediante http://www.midominio.com/funciones/cBD.php
Código PHP:
<?php    
$db mysql_pconnect('midominio.com''login''password');
    if (!
$db)
    {
        echo 
'Error: No se ha podido conectar a la base de datos.  Porfavor intentelo ms tarde.';
        exit;
    }
    else
    
mysql_select_db('basededatos');
?>
__________________
Cita:
"El camino empieza renunciando al control, y volviéndose flexibles."
  #10 (permalink)  
Antiguo 18/11/2009, 12:19
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cuestiones elementales de estructura

Es que si colocas la ruta del archivo PHP como URL, se procesa en el servidor, y sólo recibirás la salida. Debes colocar la ruta como archivo local:
Código PHP:
Ver original
  1. include('cDB.php');
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #11 (permalink)  
Antiguo 18/11/2009, 12:31
Avatar de caneva  
Fecha de Ingreso: junio-2006
Ubicación: Sevilla (España)
Mensajes: 81
Antigüedad: 17 años, 10 meses
Puntos: 1
Respuesta: Cuestiones elementales de estructura

Cita:
Iniciado por David Ver Mensaje
Es que si colocas la ruta del archivo PHP como URL, se procesa en el servidor, y sólo recibirás la salida. Debes colocar la ruta como archivo local:
Código PHP:
Ver original
  1. include('cDB.php');
Mira que llevo años haciendo includes, eso si antes no ponía las urls completas como en este caso donde pretendía evitar errores de rutas y mira tu por donde no sabía de ese pequeño matiz... ni siquiera viene en el libro que tengo de php xD
__________________
Cita:
"El camino empieza renunciando al control, y volviéndose flexibles."
  #12 (permalink)  
Antiguo 20/01/2010, 23:51
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Cuestiones elementales de estructura

Bueno aquí va otro problema que vuelve del pasado...

Si tengo la siguiente estructura:
(Raiz)
-index.php (estructura principal)
-cabecero.php (autodescriptivo :P)
-main.php (funciones generales php)
-cBD.php (conexión a la base de datos)
-insertar_usuario.php (archivo llamado desde ajax)
-basicos.js (funciones javascript, encargadas entre otras cosas de AJAX)
-pie.php (autodescriptivo :P)
--(Secciones)
---clientes.php
---servicios.php
---materiales.php

Index.php
Código:
<?php 
//CONSTANTES******************************************************************************
if ( !defined('ROOT') ) {define('ROOT',$_SERVER["DOCUMENT_ROOT"].'/lau/');} //Para include/require
if ( !defined('RUTA') ) {define('RUTA','http://www.midominio.com/lau/');} //Para URLs
//****************************************************************************************
include('cBD.php');
include('main.php');
include(ROOT.'cabecero.php');

//Carga de seccion:
switch( $_GET["sec"] )
{
  case "clientes":
  { 
    include(ROOT.'/secciones/clientes.php');
    break;
  }
  case "servicios":
  { 
    include(ROOT.'/secciones/servicios.php');
    break;
  }
  case "materiales":
  { 
    include(ROOT.'/secciones/materiales.php');
    break;
  }
  default:
  {
    include(ROOT.'/secciones/inicio.php');
    break;
  }
}
//End of: Carga de seccion.

include(ROOT.'pie.php'); 
?>
No reconoce las funciones declaradas en main.php cuando hago una petición del archivo insertar_usuario.php desde basicos.js (AJAX), supongo que es porque al ser el include anterior a la petición ya no está en el servidor cuando insertar_usuario.php lo requiere, tal y como dijeron en este post con anterioridad. Pero entonces ¿me veo absolutamente obligado a tener duplicadas las llamadas a main.php desde archivos pedidos mediante ajax y desde archivos normales?
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
  #13 (permalink)  
Antiguo 21/01/2010, 05:10
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Cuestiones elementales de estructura

Si vas a tener una petición directa a insertar_usuario.php, sí, necesariamente tienes que incluir en ese archivo el main.php así como cualquier otro archivo de funciones que vayas a utilizar.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 21/01/2010, 14:59
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Cuestiones elementales de estructura

Cita:
Iniciado por David Ver Mensaje
Si vas a tener una petición directa a insertar_usuario.php, sí, necesariamente tienes que incluir en ese archivo el main.php así como cualquier otro archivo de funciones que vayas a utilizar.
¡Que putada! Gracias por la respuesta.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:49.