Foros del Web » Programando para Internet » PHP »

No puedo Mostar Mensajes de Error con echo.

Estas en el tema de No puedo Mostar Mensajes de Error con echo. en el foro de PHP en Foros del Web. Hola que tal tengo un problema y no se como resolverlo. Tengo un archivo en php y muestro un formulario con modal y utilizo Ajax, ...
  #1 (permalink)  
Antiguo 14/09/2016, 14:00
 
Fecha de Ingreso: abril-2006
Mensajes: 134
Antigüedad: 18 años
Puntos: 0
No puedo Mostar Mensajes de Error con echo.

Hola que tal tengo un problema y no se como resolverlo.
Tengo un archivo en php y muestro un formulario con modal y utilizo Ajax, para ingresar datos a mysql o modificarlos o eliminarlos.
Esto lo hago en un archivo también php, pero antes de ingresar la información, hago una comparacion y si encuenmtro que la serie que se quiere ingresar esta activa, quiero mostrar un mensaje de error. Intente con echo, pero no imprime nada ya que como utilizo una ventana modal esta se recarga , así mismo intente cambiar la pagina y mostrar el error pero tampoco me deja.
Pego el codigo de mi archivo y espero me puedan ayudar ....
Hago mension que ..El script funciona sin problemas agrega los datos


Código:
function objetoAjax(){
	var xmlhttp=false;
	try{
		xmlhttp= new ActiveXObject("Msxml2.XMLHTTP");
	}catch(e){
		try{
			xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
		}catch(E){
			xmlhttp=false;
		}
	}
	if(!xmlhttp && typeof XMLHttpRequest!='undefined'){
		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

function Registrar(idO,accion){
	
	categoria 	= document.frmObjetos.categoria.value;
	nombre 		= document.frmObjetos.nombre.value;
	marca 		= document.frmObjetos.marca.value;
	modelo 		= document.frmObjetos.modelo.value;
	serie 		= document.frmObjetos.serie.value;
	ubicacion 	= document.frmObjetos.ubicacion.value;
	user	 	= document.frmObjetos.user.value;
	
	ajax = objetoAjax();
	
	if(accion == 'N'){	
		ajax.open("POST", "clases/registraObjeto.php",true);
	}else if(accion == 'E'){
		ajax.open("POST", "clases/actualizaObjeto.php",true);
	}
	
	ajax.onreadystatechange=function() {
		if(ajax.readyState==4){
			alert('Datos de Usuario Guardados con Exito.');
			window.location.reload();
			Limpiar();			
		}
	}
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	ajax.send("marca="+marca+"&modelo="+modelo+"&serie="+serie+"&idO="+idO+"&categoria="+categoria+"&ubicacion="+ubicacion+"&nombre="+nombre+"&user="+user);
	
}

function Eliminar(idO){
	if(confirm("Esta Seguro de Eliminar el Objetol?")){
		
		ajax = objetoAjax();
		ajax.open("POST", "clases/eliminarObjeto.php",true);
		ajax.onreadystatechange=function() {
			if(ajax.readyState==4){
				alert('Usuario Eliminado.');
				window.location.reload();
			}
		}
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send("idO="+idO);
	}else{
	
	}
}

function RegCRT(accion){
	divResultado = document.getElementById('resultado');
	var campo;
	var variable = new Array();
	var tabla = document.getElementById("tabla").value;
	var ido = document.frmCaract.ido.value;
	var idca = document.frmCaract.idca.value;
	var conca = document.frmCaract.conca.value;
	var res = conca.split("+");
	for (var i = 0; i<res.length-1; i++) {
		campo = res[i];
		variable[i] = document.getElementById(campo).value;
		document.getElementById(campo).value='';
	}
	
	
	ajax = objetoAjax();
	
	if(accion == 'N'){	
		ajax.open("POST", "clases/registraCO.php",true);
	}else if(accion == 'E'){
		ajax.open("POST", "clases/actualizaCO.php",true);
	}
	
	ajax.onreadystatechange=function() {
		if(ajax.readyState==4){
			if(accion == 'N'){	
				window.location="objetos.php";
			}else if(accion == 'E'){
				alert('Datos de Usuario Guardados con Exito.');
				window.location.reload();
			}
		}
	}
	ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	ajax.send("tabla="+tabla+"&conca="+conca+"&variable="+variable+"&ido="+ido+"&idca="+idca);
	
}

function EliminarCA(idCA,tabla,idO){
	if(confirm("Esta Seguro de Eliminar la Característica del Objeto?")){
		
		ajax = objetoAjax();
		ajax.open("POST", "clases/eliminarCO.php",true);
		ajax.onreadystatechange=function() {
			if(ajax.readyState==4){
				alert('Usuario Eliminado.');
				window.location="objetos.php";
			}
		}
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send("tabla="+tabla+"&idCA="+idCA+"&idO="+idO);
	}else{
	
	}
}


function Limpiar(){
	document.frmObjetos.nombre.value='';
	document.frmObjetos.puesto.value='';
	document.frmObjetos.ubicacion.value='';
}
ahi paso las variables a este archivo donde hago la comparacion y donde quiero mandar el mensaje de error:
Código PHP:
<?php

    
include ('../Librerias/stdio.inc.php');
    
    
$nombre     $_POST["nombre"];
    
$categoria     $_POST["categoria"];
    
$marca         $_POST["marca"];
    
$modelo     $_POST["modelo"];
    
$serie         $_POST["serie"];
    
$ubicacion     $_POST["ubicacion"];
    
$user         $_POST["user"];
    
    
$conn conexion();
    
$REP="Select * from objeto where(serie=$serie and visible!=0)";
    
$rre mysqli_query($conn$REP); if (!$rre) die("Error Objeto Repetido." mysqli_errno($conn));
    if(
$row_cnt mysqli_num_rows($rre) > 0){
            echo 
"<script>window.location='Error.php;</script>";
            die();
    }else{
    
$INS="INSERT INTO objeto values(0,$categoria,0,'$nombre','$marca','$modelo','$serie','$ubicacion',$user,1)";
    
$rin mysqli_query($conn$INS); if (!$rin) die("Error en la insercion de Objeto Nuevo." mysqli_errno($conn));
    }

?>
  #2 (permalink)  
Antiguo 15/09/2016, 04:53
Avatar de manuparquegiralda  
Fecha de Ingreso: junio-2012
Ubicación: Barcelona
Mensajes: 241
Antigüedad: 11 años, 9 meses
Puntos: 39
Respuesta: No puedo Mostar Mensajes de Error con echo.

A ver, no se te muestra el mensaje de error con un echo ya que ajax trabaja de modo asíncrono, es decir, estás enviando peticiones al servidor en segundo plano y un echo lo que hace es imprimirte en pantalla cuando el navegador está cargando la página. No sé si me he explicado bien, pero intentaré ponerte un ejemplo de como yo lo haría:

Código Javascript:
Ver original
  1. function Registrar(idO, accion){
  2.    
  3.     var categoria = document.frmObjetos.categoria.value;
  4.     var nombre = document.frmObjetos.nombre.value;
  5.     var marca = document.frmObjetos.marca.value;
  6.     var modelo = document.frmObjetos.modelo.value;
  7.     var serie = document.frmObjetos.serie.value;
  8.     var ubicacion   = document.frmObjetos.ubicacion.value;
  9.     var user = document.frmObjetos.user.value;
  10.    
  11.         /* CREAS OBJETO AJAX */
  12.     var xhr = new XMLHttpRequest();
  13.  
  14.         /* DATOS DEL FORMULARIO AL OBJETO AJAX */
  15.     var data = new FormData();
  16.     data.append("categoria",categoria);
  17.     data.append("nombre",nombre);
  18.     data.append("marca",marca);
  19.     data.append("modelo",modelo);
  20.     data.append("serie",serie);
  21.     data.append("ubicacion",ubicacion);
  22.     data.append("user",user);
  23.        
  24.     /* SI HAY UN ERROR */
  25.     xhr.addEventListener("error", function(e){
  26.         alert("Hubo un error en la petición");
  27.     }, false);
  28.  
  29.     /* REGISTRO TERMINADO */
  30.     xhr.addEventListener("load", function(e){
  31.         var EVAL = eval;
  32.         var r = xhr.responseText;
  33.         var o = EVAL("("+r+")");
  34.  
  35.  
  36.                 /* SI TODO ESTÁ OK */
  37.         if(o.estado === "OK"){  
  38.             alert('Los datos de '+o.nombre+' se guardarón exitosamente.');
  39.             Limpiar();
  40.         }
  41.  
  42.  
  43.                 /* SI HAY QUE MOSTRAR UN ERROR */
  44.                 if(o.estado === "KO"){
  45.             alert(o.alerta);
  46.         }      
  47.     });
  48.  
  49.     /* ENVIAMOS EL FORMULARIO */
  50.    
  51.     if(accion === 'N'){
  52.                 xhr.open('POST', '/clases/registraObjeto.php');
  53.     }else if(accion === 'E'){
  54.                 xhr.open('POST', '/clases/actualizaObjeto.php');
  55.     }
  56.    
  57.     xhr.send(data);
  58. }

Como puedes ver la función de registro la cambio levemente y utilizo un formData para enviar el formulario. La gran diferencia está en la respuesta. Si bien no ibas mal encaminado con lo de usar un echo, el echo no te va a funcionar como cuando cargas una página en el navegador, sino que sera el objeto xhr.responseText lo que te traiga el texto que imprime el script al que estás accediendo por AJAX.

En este caso para tener más control sobre la respuesta, en el script de PHP lo que haré será imprimir con un echo una clase codificada en json que javascript evaluará, de esta manera podemos devolver muchos datos diferentes y podemos controlarlos. Te he cambiado la alerta en caso de éxito para que veas las posibilidades. Por ejemplo:

Código PHP:
Ver original
  1. <?php
  2.    
  3.     /* CLASE DE RESPUESTA  (TANTAS VARIABLES COMO QUERAMOS) */
  4.     class Respuesta {
  5.         public $estado;
  6.         public $alerta;
  7.         public $nombre;
  8.     }
  9.  
  10.     /* INSTANCIAMOS LA CLASE */
  11.     $OBJ_RESPONSE = new Respuesta();
  12.  
  13.     include ('../Librerias/stdio.inc.php');
  14.      
  15.     $nombre     = $_POST["nombre"];
  16.     $categoria     = $_POST["categoria"];
  17.     $marca         = $_POST["marca"];
  18.     $modelo     = $_POST["modelo"];
  19.     $serie         = $_POST["serie"];
  20.     $ubicacion     = $_POST["ubicacion"];
  21.     $user         = $_POST["user"];
  22.      
  23.     $conn = conexion();
  24.     $REP="Select * from objeto where(serie=$serie and visible!=0)";
  25.     $rre = mysqli_query($conn, $REP);
  26.  
  27.     if (!$rre){
  28.             /* RESPUESTA AJAX CON ESTADO KO PARA DETERMINAR ERROR */
  29.             $OBJ_RESPONSE->estado = "KO";
  30.             $OBJ_RESPONSE->alerta = "Error Objeto Repetido".mysqli_errno($conn) ;
  31.             echo json_encode($OBJ_RESPONSE);
  32.             die();
  33.     }
  34.  
  35.  
  36.     if($row_cnt = mysqli_num_rows($rre) > 0){
  37.             /* RESPUESTA AJAX CON ESTADO KO PARA DETERMINAR ERROR */
  38.             $OBJ_RESPONSE->estado = "KO";
  39.             $OBJ_RESPONSE->alerta = "Error.php";
  40.             echo json_encode($OBJ_RESPONSE);
  41.             die();
  42.     }else{
  43.             $INS="INSERT INTO objeto values(0,$categoria,0,'$nombre','$marca','$modelo','$serie','$ubicacion',$user,1)";
  44.             $rin = mysqli_query($conn, $INS);
  45.  
  46.             if (!$rin){
  47.                  /* RESPUESTA AJAX CON ESTADO KO PARA DETERMINAR ERROR */
  48.                  $OBJ_RESPONSE->estado = "KO";
  49.                  $OBJ_RESPONSE->alerta = "Error en la insercion de Objeto Nuevo." . mysqli_errno($conn);
  50.                  echo json_encode($OBJ_RESPONSE);
  51.                  die();
  52.             }
  53.     }
  54.  
  55.     /* RESPUESTA AJAX CON ESTADO OK PARA DETERMINAR QUE TODO ESTÁ CORRECTO Y LE PASAMOS EL NOMBRE PARA PERSONALIZAR LA RESPUESTA COMO EJEMPLO */
  56.     $OBJ_RESPONSE->estado = "OK";
  57.     $OBJ_RESPONSE->nombre = $nombre;
  58.     echo json_encode($OBJ_RESPONSE);
  59.  
  60. ?>

Como puedes ver lo que queremos devolverle a la peticion ajax en javascript lo hacemos por medio de un echo. No necesariamente tiene que ser una clase PHP, el responseText de javascript, recibirá cualquier cosa que este impresa en la pantalla, ya puede ser un echo en PHP como código HTML, es decir, recibirá cualquier cosa que tu verías en un navegador. En este caso enviamos un objeto PHP codificado para poder evaluarlo en javascript. El objeto puede ser como tu quieras con tantas variables como desees para poder recibir tantos datos separados como quieras. Eso sí, javascript no te evaluará métodos de la clase PHP por si se te ocurre hacerlo.

Como buena práctica, utiliza siempre la palabra VAR para declarar variables dentro de funciones javascript ya que si no lo haces esas variables tendrán caracter global y no estarán solo dentro del contexto de la función y puede ocasionarte problemas. Yo y esto es algo personal aconsejo usar el menor número de variables globales en javascript.

Espero haberte ayudado, un saludo.
__________________
Diseño Web - Arisman Web

Última edición por manuparquegiralda; 15/09/2016 a las 05:05
  #3 (permalink)  
Antiguo 15/09/2016, 11:18
 
Fecha de Ingreso: abril-2006
Mensajes: 134
Antigüedad: 18 años
Puntos: 0
Respuesta: No puedo Mostar Mensajes de Error con echo.

Hola manuparquegiralda, te agradezco por tu respuesta, la probare y mil gracias por los consejos.

Saludos.
  #4 (permalink)  
Antiguo 28/09/2016, 11:06
 
Fecha de Ingreso: abril-2006
Mensajes: 134
Antigüedad: 18 años
Puntos: 0
Respuesta: No puedo Mostar Mensajes de Error con echo.

Hola manuparquegiralda, mil disulpas por responder hasta ahora, pero he tenido unos dias algo malos, pero bueno.....

Veras he probado el codigo que me haces favor de poner como respuesta y lo he probado pero no hace nada .... no inserta no da ningun tipo de mensaje ....

Intente generar un error quitando la conexion a la base de datos para que saliera el mensaje de error de conexion con Mysql, pero aun eso nada.

Podrias ayudarme un poca mas, por favor.

Saludos.

Etiquetas: formulario, mensajes, mostar, mysql, select, tabla, variable
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 16:35.