Ejecución javascript

Hola,
te comento lo que me pasa, hago una búsqueda según 3 campos:dni, usuario o nombre y apellido. Según el dato de búsqueda rellena los otros campos.
El problema es que cuando la búsqueda es por dni o usuario todo va bien, pero cuando es por nombre o apellido no ejecuta el código javascript.
Te pongo el código donde recibo los datos y hago todo. Lo raro es que la consulta esta bien.
<?php
session_start();
if (isset($_SESSION['usuario']))
{
    include("../conectar.php");
    $dni = $_REQUEST['dni'];
    $user = $_REQUEST['user'];
    $nom = $_REQUEST['nom'];
    $ape =  $_REQUEST['ape'];
    $tipo = $_REQUEST['tipo'];
    $db = conectar();
    if ($dni != "")     
    $seleccion="select dni,nombre,apellidos,usuario from registrado where dni='".$dni."' and estado='Alta' and tipo='".$tipo."'";
    else
    {
        if ($user != "")    
        $seleccion="select dni,nombre,apellidos,usuario from registrado where usuario='".$user."' and estado='Alta' and tipo='".$tipo."'";
        else                    
        $seleccion="select dni,nombre,apellidos,usuario from registrado where nombre='".$nom."' and apellidos='".$ape."' and estado='Alta' and tipo='".$tipo."'";                
    }
    $rs=consulta($db,$seleccion);
    if($rs->RecordCount()!=0 && $rs->RecordCount()!= -1)
    {            
?>
<script type="text/javascript">
        document.getElementById('dni').value= "<?php echo $rs->fields[0];?>";
        document.getElementById('nombre').value= "<?php echo $rs->fields[1];?>";
        document.getElementById('ape').value= "<?php echo $rs->fields[2];?>";
        document.getElementById('user').value= "<?php echo $rs->fields[3];?>";
        document.getElementById('b_baja').disabled = false;
        document.getElementById('dni').setAttribute("readOnly","readOnly") ;
        document.getElementById('nombre').setAttribute("readOnly","readOnly") ;
        document.getElementById('ape').setAttribute("readOnly","readOnly") ;
        document.getElementById('user').setAttribute("readOnly","readOnly") ;
</script>
<?php
    }
    else
    {
    ?>
<script type="text/javascript">
        alert("El usuario no existe o esta dado de baja");
    //    document.location.href="http://localhost/director.php";
    </script>
<?php
    }
    close($rs);
    close($db);
}
?>

1 Respuesta

Respuesta
1
¿No será que por un lado el campo en el html del formulario de búsqueda se llama "nombre" y por otro lado, en el código PHP, recuperas el parámetro "nom" para hacer la búsqueda?
Carlos.
Este es la página desde donde llamo a la otra


function busqueda() //valido datos rellenos para saber consulta
{
    var dni = document.getElementById('dni').value;
    var user = document.getElementById('user').value;
    var nom = document.getElementById('nombre').value;
    var ape = document.getElementById('ape').value;
    if(dni != "" )
        $("#blanco").load("controller/datos_usuario.php?dni="+dni+"&user="+user+"&nom="+nom+"&ape="+ape+"&tipo=P");
    else
        if(user != "")
            $("#blanco").load("controller/datos_usuario.php?dni="+dni+"&user="+user+"&nom="+nom+"&ape="+ape+"&tipo=P");
        else
            if( nom == "" && ape == "")
                alert("No ha introducido ningun dato de busqueda");
            else
            {        
                if(nom == "" && ape!="")
                    alert("Falta el nombre");
                if(nom != "" && ape=="")
                    alert("Falta el apellido");
                if(nom != "" && ape!="") //no lo hace
                    /*$("#blanco").load*/window.open("controller/datos_usuario.php?dni="+dni+"&user="+user+"&nom="+nom+"&ape="+ape+"&tipo=P");
            }   

Los datos que envioson correctos porque sino la consulta seria errónea y si extrae bien los datos. Si comento todo lo de javascript y hago un alert con los datos de la consulta, son correctos.
Mete un alert en la página php donde haces la consulta, para ver lo que llega en "ape". Si llegan mal los datos por meter un espacio en medio, deberás pasar el parámetro data a la función load de jquery. Así, parseará bien los parámetros de la llamada a la php.
Ya me contarás.
Aver los datos llegan bien y los datos que quiero imprimir están bien, porque la consulta se hace bien.
El fallo da en la parte de javascript, no entiendo porque no lo imprime cuando ese código si lo ejecuta cuando la consulta es por dni o usuario.
He probado a poner variable = document.getElementById('xxxxx');
Esto no da fallo, pero en cuanto pongo variable. value;  ya da fallo porque no sigue ejecutando lo que le sigue.
No es que de error como tal si no que no ejecuta las lineas siguientes a donde imprimo y tampoco imprime los adatos.
No se si me explico bien
Vale, creo que te he entendido. ¿Has logrado localizar en cual de la líneas del script da el error? Te puede servir algo así:
alert("dni=<?php echo $rs->fields[0];?>");
document.getElementById('dni').value= "<?php echo $rs->fields[0];?>"; 
alert("nom=<?php echo $rs->fields[1];?>");
document.getElementById('nombre').value= "<?php echo $rs->fields[1];?>"; 
alert("ape=<?php echo $rs->fields[2];?>");
document.getElementById('ape').value= "<?php echo $rs->fields[2];?>"; 
alert("user=<?php echo $rs->fields[3];?>");
document.getElementById('user').value= "<?php echo $rs->fields[3];?>";
Dependiendo de lo que te salga esta prueba, seguimos por un lado o por otro.
Si dejas el código javascript no ejecuta ninguna de las lineas que están entre
<script></script>
.
Si comentas las lineas document... y dejas los alert te salen los datos correctos.
Por eso no lo entiendo. Porque ademas esto funciona si lo haces con dni o usuario
Si no ejecuta ninguna línea cuando buscas por nombre y apellido, ni siquiera el primer alert, es que cuando se sustituyen las variables php, se genera algún error de sintaxis en javascript. Lo extraño es que si quitas los document. GetElementById() y dejas los alert, los alert funcionen en ese caso, trazando bien las variables php.
Haz una cosa: comenta las líneas document. GetElementById() (no las borres) y tras ejecutarse la página, mira el código fuente generado y me lo pasas.
No se a que te refieres con : "Haz una cosa: comenta las líneas document.getElementById() (no las borres) y tras ejecutarse la página, mira el código fuente generado y me lo pasas."
Me pasa justo lo que has comentado, si hago
alert("dni=<?php echo $rs->fields[0];?>");
//document.getElementById('dni').value= "<?php echo $rs->fields[0];?>"; 
alert("nom=<?php echo $rs->fields[1];?>");
//document.getElementById('nombre').value= "<?php echo $rs->fields[1];?>"; 
alert("ape=<?php echo $rs->fields[2];?>");
//document.getElementById('ape').value= "<?php echo $rs->fields[2];?>"; 
alert("user=<?php echo $rs->fields[3];?>");
//document.getElementById('user').value= "<?php echo $rs->fields[3];?>";
/*
document.getElementById('b_baja').disabled = false;
        document.getElementById('dni').setAttribute("readOnly","readOnly") ;
        document.getElementById('nombre').setAttribute("readOnly","readOnly") ;
        document.getElementById('ape').setAttribute("readOnly","readOnly") ;
        document.getElementById('user').setAttribute("readOnly","readOnly") ;
*/
me hace los alert con los datos bien.
Fíjate que las ultimas lineas comentadas son cosas que no llevan php y si nos la comento me da error también.
Que lata te estoy dando, ya lo siento pero es que ya no se que hacer
Respecto a lo de las últimas líneas: mira a ver si tienes varios elementos que tengan id's repetidos, lo que puede hacer que casque.
Lo de comentar las líneas y luego ver el código fuente generado, es para ver que tras ejecutarse las porciones de php, y sustituirse por valores, puede que genere cosas que hagan que el script tenga errores de sintaxis. De ahí lo de que comentaras las líneas: para que no de errores de sintaxis, pero poder ver los valores, y el script que se debería ejecutar si las líneas no estuvieran comentadas.
Por favor, una vez que la página se haya ejecutado, haz un "ver código fuente" en el navegador, copia la parte del script y me la mandas.
No se si es esto lo que quieres, lo he ejecutado y da esto:
<script type="text/javascript">
/*
document.getElementById('dni').value= "78884488P";
document.getElementById('nombre').value= "Monica";
document.getElementById('ape').value= "Ampudia Roncero Diez";
document.getElementById('user').value= "monica_a_r";
document.getElementById('b_baja').disabled = false;
document.getElementById('dni').setAttribute("readOnly","readOnly") ;
document.getElementById('nombre').setAttribute("readOnly","readOnly") ;
document.getElementById('ape').setAttribute("readOnly","readOnly") ;
document.getElementById('user').setAttribute("readOnly","readOnly") ;
*/
</script>
¿Pero si hubiese algo mal no daría el error cuando la búsqueda es por dni o usuario?
Espero que te sirva.
Muchas gracias
¿Esto qué has puesto es buscando por nombre y apellidos?
Si pero vamos que da lo mismo si la bsuqueda es por dni o usuario porque es el mismo código.
Lo que me cuentas es de verdad un poltergeist. No tiene sentido que el script falle dependiendo del tipo de búsqueda. Lo único que se me ocurre es, poner el javascript como tiene que estar, y luego, primero ejecutar la búsqueda que funciona, y copiarse el código generado (ver código fuente). Luego, ejecutar la query por nombre y apellido, y ver también el código html generado. En algún sitio tiene que haber alguna diferencia que haga que el javascript tire en un sitio y en el otro no.
Pruébalo y me cuentas. No se me ocurre otra cosa...
Carlos.
PAra poder ver el código fuente tengo que hacer window. open en vez de load. Pues bien en la búsqueda por dni abriendo una ventana no me funciona, aunque el código fuente es el mismo. Los datos son los correctos pero no me los carga en los campos.
A lo mejor el fallo lo tengo al llamar a la función.
Voy a probar
Te comento, la llamada a la función es correcta pero he hecho esto:
<script type="text/javascript">
<?php echo $rs->fields[0];?>
//    document.getElementById('dni').value= "<?php echo $rs->fields[0];?>//";
        //document.getElementById('nombre').value= "<?php echo $rs->fields[1];?>//";
        //document.getElementById('ape').value= "<?php echo $rs->fields[2];?>//";
        //document.getElementById('user').value= "<?php echo $rs->fields[3];?>//";
    //    document.getElementById('b_baja').disabled = false;
        //setReadonly('dni|nombre|ape|user');
        //document.getElementById('buscar').disabled = true;
        //document.getElementById('reseteo').disabled = 'disabled';
        /*
        document.getElementById('dni').setAttribute("readOnly","readOnly") ;
        document.getElementById('nombre').setAttribute("readOnly","readOnly") ;
        document.getElementById('ape').setAttribute("readOnly","readOnly") ;
        document.getElementById('user').setAttribute("readOnly","readOnly") ;
        */
</script>
como ves he comentado todo el javascript.
Si hago un alert("<?php echo $rs->fields[0];?>"); al ejecutar el programa si sale el alert, pero no me sale ningún echo del código php que tengo puesto
De todas maneras el codigo fuente es este:
script type="text/javascript">
78884488P//document.getElementById('dni').value= "78884488P//";
//document.getElementById('nombre').value= "Monica//";
//document.getElementById('ape').value= "Ampudia Roncero Diez//";
//document.getElementById('user').value= "monsa//";
//document.getElementById('b_baja').disabled = false;
//setReadonly('dni|nombre|ape|user');
//document.getElementById('buscar').disabled = true;
//document.getElementById('reseteo').disabled = 'disabled';
/*
document.getElementById('dni').setAttribute("readOnly","readOnly") ;
document.getElementById('nombre').setAttribute("readOnly","readOnly") ;
document.getElementById('ape').setAttribute("readOnly","readOnly") ;
document.getElementById('user').setAttribute("readOnly","readOnly") ;
*/
</script>
Ya no se que hacer, esto me parece muy raro.
Con window. Open() no te va a tirar porque luego no va a encontrar en la página los elementos para darles valor. Tendrías que hacer un "opener.document.getElementById()". Pero centrándonos en que siempre vas a utilizar load() para cargar los datos, eso no haría falta.
Por cierto, ya que usas jquery, no hagas:
document.getElementById("dni").value="a".
Usa:
$("#dni").val("a").
Si te sigue si ir, prueba una cosa: en vez del:
 $("#blanco").load("controller/datos_usuario.php?dni="+dni+"&user="+user+"&nom="+nom+"&ape="+ape+"&tipo=P")
, usa un:
$.getScript("controller/datos_usuario.php?dni="+dni+"&user="+user+"&nom="+nom+"&ape="+ape+"&tipo=P")
Gracias pero no me funciona jquery y eso que he vuelto a cargar la librería.
Si uso window.open no me va opener.
$.getScript tampoco va
Al final si hago window.open y pongo opener si me funciona así que lo tendré que hacer así porque con load sigue sin irme la búsqueda por nombre y apellidos.
Aunque con open no queda visualmente muy bien.
No entiendo nada. Tendría que funcionar. Pero bueno, si tira con lo de opener, prueba a usar un iframe oculto y cargarlo con iframe. src="mi.php" en vez de un window. Open, y en vez de "opener" usa "parent". Así, visualmente mejoraría la cosa.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas