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

Problema en Xajax al acceder a MySQL

Estas en el tema de Problema en Xajax al acceder a MySQL en el foro de Frameworks JS en Foros del Web. Hola, espero que me puedan ayudar ya que llevo con este problema varios días y no lo consigo solucionar. Estoy haciendo un gestor de estoc ...
  #1 (permalink)  
Antiguo 23/03/2008, 09:32
 
Fecha de Ingreso: noviembre-2006
Mensajes: 117
Antigüedad: 17 años, 5 meses
Puntos: 0
Problema en Xajax al acceder a MySQL

Hola, espero que me puedan ayudar ya que llevo con este problema varios días y no lo consigo solucionar. Estoy haciendo un gestor de estoc de una tienda de música como proyecto fin de carrera y lo que pretendo es que antes de hacer un insert a la BD comprobar que los campos sean correctos y que no tenga coincidencias con los llaves primarias de mi BD, de tal manera que si hay algún error me lo muestre en el div correspondiente. Bien el problema que tengo es que creo que no me accede a la BD, ya que hago 2 count para ver si tengo alguna coincidencia del nombre y la referencia que me introduce el usuario con la BD, sin embargo la variable en la que guardo el resultado del count siempre es 1, por lo que nunca me llega a hacer el insert y me muestra el error correspondiente. De las 4 comprobaciones que hago, las 2 primeras funcionan bien, pero las 2 siguientes no, y casualmente son en las que accedo a la BD. A ver si me pueden ayudar...Muchas grácias de antemano!! un saludo!!

Se que el HTML no es muy bonito pero me interesa más que funcione para luego arreglarlo...XDD. Las funciones javascript me funcionan correctamente y este código es una adaptación de uno que si funciona en html, php y javascript, pero que me da problemas (no consigo redireccionar a web y mostrar el mensaje de error correspondiente)cuando compruebo en el archivo php correspondiente si tengo coincidencias con el Nombre del Sello y la Referencia.

La versión que utilizo de ajax es la 0.5 beta 4

CODIGO XAJAX MAS FORMULARIO HTML

<?php
//incluímos la clase ajax
require_once("Xajax/xajax_core/xajax.inc.php");

//instanciamos el objeto de la clase xajax
$xajax = new xajax();
$xajax->setCharEncoding('ISO-8859-1');
$xajax->configure('decodeUTF8Input',true);

function procesar_formulario($form_entrada){
//creo el xajaxResponse para generar una salida
$respuesta = new xajaxResponse();

include_once("../BBDD/conexDBTMusik.php");

//Pongo en variables los datos del formulario


//A partir de aquí me falla el código

//Paso los valores del formulario a vars

$NomSello=$form_entrada["Nom"];
$NomRef=$form_entrada["Ref"];
$Dueno=$form_entrada["Dueno"];
$Mail1=$form_entrada["Email1"];
$Mail2=$form_entrada["Email2"];
$Web1=$form_entrada["Web1"];
$Web2=$form_entrada["Web2"];
$Telf1=$form_entrada["Telf1"];
$Telf2=$form_entrada["Telf2"];

$consulta1="SELECT COUNT(*) FROM sellos WHERE RefNom='".$NomRef."'";
$ejecuta1=mysql_query($consulta1,$link);
$nr=mysql_num_rows($ejecuta1); //$nr siempre tiene valor 1, es decir es como si encontrase en la BBDD una coincidencia, aunque no haya ninguna

$consulta2="SELECT COUNT(*) as Nom FROM sellos WHERE NombreSello='".$NomSello."'";
$ejecuta2=mysql_query($consulta2,$link);
$ns=mysql_num_rows($ejecuta2); //Si tengo coincidencia NombreSello me pone igualmente $nr=1 por lo que luego nunca me hace el insert, parece que aquí no llega a entrar
//validación
$error_form = "";
if ($form_entrada["Nom"]==""){$error_form="Debes escribir el nombre del Sello";}
elseif ($form_entrada["Ref"]==""){$error_form="Debes escribir una referencia para el Sello";}
elseif($nr!=0){$error_form="numRef: ,$nr";} //tendria que mostrar mensaje pero he puesto esto para ver el valor de las variables, esta siempre es igual a 1
elseif($ns!=0){$error_form="numNom: ,$ns";} //si esta tiene campo coincidente igualmente me muestra numRef: ,1

//compruebo resultado de la validación
if ($error_form != ""){
//Hubo un error en el formulario
//en la capa donde se muestran mensajes, muestro el error

$respuesta->assign("mensaje","innerHTML","<span style='color:red;'>$error_form</span>");
}
else
{
$cadena="INSERT INTO sellos(RefNom,NombreSello,Dueno,Mail1,Mail2,Web1,W eb2,Telf1,Telf2)VALUES('".$NomRef. "','".$NomSello. "','".$Dueno."','".$Mail1."','".$Mail2."','".$Web1 ."','".$Web2."','".$Telf1."','".$Telf2."',$link )";
$ejecuta2=mysql_query($cadena,$link);
//mostramos en capa mensaje el texto que está todo correcto
$respuesta->assign("mensaje","innerHTML","<span style='color:blue;'>Todo correcto...Sello introducido!</span>");
}

//tenemos que devolver la instanciación del objeto xajaxResponse
return $respuesta;
include_once("../BBDD/desconexDBTMusik.php");
}
//registramos la función creada anteriormente al objeto xajax
$xajax->registerFunction("procesar_formulario");

//El objeto xajax tiene que procesar cualquier petición

$xajax->processRequest();
?>

<HTML>
<HEAD>
<TITLE>Introducir/Modificar Sello</TITLE>
<SCRIPT type="text/javascript" SRC="./IntroSello/CompISello.js"></SCRIPT>
<link rel="stylesheet" type="text/css" href="../css/contenedor.css" title="contenedor" />
<link rel="alternate stylesheet" type="text/css" href="../css/menu.css" title="menu" />
<?php
//En el <head> indicamos al objeto xajax se encargue de generar el javascript necesario
$xajax->printJavascript("xajax/");
?>
</HEAD>

<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<BODY onLoad="ponerfoco(0,0);">

<div id="mensaje">
<CENTER>
Rellena los datos de este formulario y pulsa "Guardar"
</CENTER>
</div>

<!-- Conectamos con la BBDD -->
<?php include_once("../BBDD/conexDBTMusik.php"); ?>

<FORM id="formIMSello" NAME="formIMSello">

<TABLE style="HEIGHT:100%;WIDTH:100%;" BORDER=0>
<TR ALIGN="center" BOTTOM="middle"><TD>
<TABLE BORDER=0>
<tr><td>
<TR>
<TD align="left" width="100"><P>Nombre del Sello:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Nom" MAXLENGTH="20" SIZE="10" onChange="javascript:this.value=this.value.toUpper Case();"></P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Referencia del Sello:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Ref" MAXLENGTH="10" SIZE="10" onChange="javascript:this.value=this.value.toUpper Case();"> </P></TD>
</TR>
<TD align="left" width="100"><P>Fabricante:</P></TD>
<TD align="left" width="150">
<SELECT NAME="Fabricante" SIZE="1">
<?php include_once ("../php/lista/listafabricante.php");?>
</SELECT>
</TD>
</TR>
<TR>
<TD align="left" width="100"><P>Dueño(s):</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Dueno" MAXLENGTH="50" SIZE="10" onChange="javascript:this.value=this.value.toUpper Case();"> </P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Email1:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Email1" MAXLENGTH="20" SIZE="10"> </P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Email2:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Email2" MAXLENGTH="20" SIZE="10"> </P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Web1:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Web1" MAXLENGTH="20" SIZE="10" ></P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Web2:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Web2" MAXLENGTH="20" SIZE="10" ></P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Telf1:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Telf1" MAXLENGTH="14" SIZE="10" onKeyPress="return validarnums(event);"> </P></TD>
</TR>
<TR>
<TD align="left" width="100"><P>Telf2:</P></TD>
<TD align="left" width="150"><INPUT TYPE="text" NAME="Telf2" MAXLENGTH="14" SIZE="10" onKeyPress="return validarnums(event);"> </P></TD>
</TR>
<TR>
<TD>
<input type="button" value="Guardar" onClick="xajax_procesar_formulario(xajax.getFormVa lues('formIMSello'));"/>
<INPUT type="reset" value="Limpiar" name="Limpiar" onClick="ponerfoco(0,0)">
</TD>
</TR>
</FORM>

<?php include_once("../BBDD/desconexDBTMusik.php"); ?>

</BODY>
</HTML>

Última edición por Kilofafeure; 23/03/2008 a las 09:38
  #2 (permalink)  
Antiguo 23/03/2008, 11:10
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Re: Problema en Xajax al acceder a MySQL

Hola estube revisando y haciendo unas pruebas me sorprendi al ver que en la consola de mysql la sentencia que indicas y tambien una sentencia que probe yo siempre da {0}, en el count, pero cuando se realiza la misma query desde el php devuelve 1, probe tambien mysql_affected_rows(), pero tambien me da el mismo resultado, ahora algo a notar es que solo sucede cuando usas un count dentro de la sentencia sql, por lo cual ese que devuelve no seria el nro de registros devuelto por la consulta, si no mas bien un valor verdadero que indica que se realizo la consulta, por lo cual te sugiero cambies la estructura de esa sentencia, es decir ovia el count, el resto queda igual, ejemplo:
Código PHP:
$consulta1="SELECT * FROM sellos WHERE RefNom='".$NomRef."'";
$ns=mysql_num_rows($ejecuta2); 
Bueno hasta ahi analize el codigo, jejeje espero te sirva, saludos...
__________________
Un Caballero Jura Lealtad. Usa su espada para suprimir la Injusticia No Conoce el Odio y Tampoco el AMOR...
  #3 (permalink)  
Antiguo 23/03/2008, 11:57
 
Fecha de Ingreso: noviembre-2006
Mensajes: 117
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Problema en Xajax al acceder a MySQL

Muchas gracias Bellenger!!! haciéndolo como tú dices funcionan los mensajes, lo que ahora no me funciona es el INSERT, he mirado y he visto el error. Yo ponía esto:

$cadena="INSERT INTO sellos(RefNom,NombreSello,Dueno,Mail1,Mail2,Web1,W eb2,Telf1,Telf2)VALUES('".$NomRef. "','".$NomSello. "','".$Dueno."','".$Mail1."','".$Mail2."','".$Web1 ."','".$Web2."','".$Telf1."','".$Telf2."',$link )";

y había que poner esto:

$cadena="INSERT INTO sellos(RefNom,NombreSello,Dueno,Mail1,Mail2,Web1,W eb2,Telf1,Telf2)VALUES('".$NomRef. "','".$NomSello. "','".$Dueno."','".$Mail1."','".$Mail2."','".$Web1 ."','".$Web2."','".$Telf1."','".$Telf2."')";

Muchas gracias otra vez!!!
  #4 (permalink)  
Antiguo 23/03/2008, 22:32
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Re: Problema en Xajax al acceder a MySQL

Ok que bueno que sirvio... :)
__________________
Un Caballero Jura Lealtad. Usa su espada para suprimir la Injusticia No Conoce el Odio y Tampoco el AMOR...
  #5 (permalink)  
Antiguo 25/03/2008, 05:22
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Información Re: Problema en Xajax al acceder a MySQL

Buenas, veo que Bellenger resolvio tu problema rápida y audazmente :)

Bueno, ya que estoy aburrido y para que sirva a los que estan por aqui resolviendo sus problemas, a la hora de buscar un resultado podemos hacerlo de 2 formas:

Código PHP:
$row mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM tabla WHERE id=2"));
if (
$row[0] > 0) {} //Se han encontrado coincidencias
else {} //No se han encontrado coincidencias 
Código PHP:
$query mysql_query("SELECT * FROM tabla WHERE id=2");
if (
mysql_num_rows($query) > 0) {} //Se han encontrado coincidencias
else {} //No se han encontrado coincidencias 
También es importante el control de errores:
Código PHP:
$query mysql_query("SELECT * FROM tabla WHERE campo1 IS NOT NULL") or die(mysql_error()); 
O bien:
Código PHP:
$query mysql_query("SELECT * FROM tabla WHERE campo1 IS NOT NULL");
if (
mysql_errno() != 0) die(mysql_error()); 
Utilizar die para comprobación de errores es rápido y efectivo cuando estamo diseñando la aplicacion, si bien de cara al exterior debemos ser más delicados y hacer una llamada a una función que controle los errores, dar un valor a una variable o cualquier cosa para que el visitante no se percate del pete en la consulta.

Eso es todo amigos!
  #6 (permalink)  
Antiguo 25/03/2008, 05:25
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Información Re: Problema en Xajax al acceder a MySQL

Cita:
Iniciado por Kilofafeure Ver Mensaje
Muchas gracias Bellenger!!! haciéndolo como tú dices funcionan los mensajes, lo que ahora no me funciona es el INSERT, he mirado y he visto el error. Yo ponía esto:

$cadena="INSERT INTO sellos(RefNom,NombreSello,Dueno,Mail1,Mail2,Web1,W eb2,Telf1,Telf2)VALUES('".$NomRef. "','".$NomSello. "','".$Dueno."','".$Mail1."','".$Mail2."','".$Web1 ."','".$Web2."','".$Telf1."','".$Telf2."',$link )";

y había que poner esto:

$cadena="INSERT INTO sellos(RefNom,NombreSello,Dueno,Mail1,Mail2,Web1,W eb2,Telf1,Telf2)VALUES('".$NomRef. "','".$NomSello. "','".$Dueno."','".$Mail1."','".$Mail2."','".$Web1 ."','".$Web2."','".$Telf1."','".$Telf2."')";

Muchas gracias otra vez!!!
La referencia al enlace a la base de datos ($link) devuelta por mysql_connect no suele ser necesaria a no ser que estes utilizando varias conexiones. No obstante ponerlo no está de más.
  #7 (permalink)  
Antiguo 25/03/2008, 05:45
 
Fecha de Ingreso: noviembre-2006
Mensajes: 117
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Problema en Xajax al acceder a MySQL

Ya lo se!!! lo ponía porqué puedo hacer varios accesos des de diferente ordenadores a la vez, lo q pasa es q kon el $link no funciona y sin él sí, no se por qué pero así me ha pasado!!! meeeeeeeeersy!!!
  #8 (permalink)  
Antiguo 25/03/2008, 05:56
Avatar de mgusdl  
Fecha de Ingreso: abril-2007
Ubicación: Malaga, España
Mensajes: 190
Antigüedad: 17 años
Puntos: 5
Re: Problema en Xajax al acceder a MySQL

Cita:
Iniciado por Kilofafeure Ver Mensaje
Ya lo se!!! lo ponía porqué puedo hacer varios accesos des de diferente ordenadores a la vez, lo q pasa es q kon el $link no funciona y sin él sí, no se por qué pero así me ha pasado!!! meeeeeeeeersy!!!
Ok, si haces accesos desde distintos ordenadores (clientes) no afecta en eso, me refería más bien a realizar varias conexiones en un mismo script (para usar 2 bases de datos distintas en el mismo servidor o en distintos servidores)

Aun así me alegra saber que te fue útil.

Más referencias en http://es2.php.net/manual/es/function.mysql-query.php
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 21:14.