Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Función en JavaScript no admite código php

Hola a todos.
Partimos de la base de que no soy experto en HTML/JS/PHP.
Puede que veáis barbaridades en mi código.

Mi idea es comprobar un número de licencia que tengo en un fichero de texto, con una colección de ellas, con el texto introducido en un TextArea de un formulario.

Tengo un par de formularios que superpongo según interese.

En varias ocasiones, ya he hecho algo similar, combinando HTML/JS/PHP (Podéis ver un ejemplo en mi hilo anterior en este foro)

Sin embargo, en esta ocasión, intentando hacer algo parecido, NO ADMITE CÓDIGO PHP en una función de JS. No puedo entender ¿por qué?

Os dejo el código que estoy probando bastante comentado, para que entendáis el problema. Agradecería que alguien me sacara de dudas.

Código PHP:

</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" >


<script type="text/javascript">

function Si_Desc_y_Licen(){
    var siono=true;
    var frm1=document.una;
    var frm2=document.dos;
    var frm3=document.tres;
    
    
// Si está visible el formulario frm1
if (frm1.style.display.valueOf()=="block")
    {  
    var indice = (document.getElementById('sele1')).selectedIndex;
    if (indice > 2) // sele1 es un select con varias opciones
        {    
                // Comprobamos si existe la licencia en el fichero .usd
                if (frm3.Old_Licencia.value.length !=16) // Longitud incorrecta
                    {
                    alert("Debe completar la clave de la licencia con 16 números y/o letras");
                    frm3.Old_Licencia.focus();
                    siono = false; // Esta condición funciona perfectamente
                    }
                else
                    {
                        if (indice == 3)
                        {siono = false; 
                        // AQUI ESTÁ EL PROBLEMA (de aquí para abajo no está comprobado
                        return  Bonificar_W(frm3.Old_Licencia.value); // texto del TextArea
                        }
                        else
                        {siono = false; 
                            //siono = Bonificar_M(frm3.Old_Licencia.value);
                        }
                    if (!siono) // La licemcia no está o ya está usada
                        {
                            alert("El número de licencia tecleado, no se ha instalado todavía o es erróneo.");
                            siono = false;
                            frm3.Old_Licencia.focus();
                        }
                    
                    }
         }    
    };
    
// Si  está visible el formulario frm2
if (frm2.style.display.valueOf()=="block")
    { 
    siono = false; // Para probar
    };
    
if (!siono){
           alert("No se pueden confirmar los datos."); // Para pruebas, luego lo quitaré       
           return false;
           }
if (siono) return true;    
};


function HazArrayM_usd(licencia)
{
datos = new Array ();// Creamos el array de JS     

<?php
// Aquí leemos un fihero de texto en php y rellenaríamos el array datos de javascript y comprobamos
// licencia de una forma parecida a la solución (que funciona) propuesta en mi hilo anterior en este foro
// FALLA solamente con poner los corchetes de PHP, sin escribir ningún código
?>

    //Comprobaremos la licencia en el array de JS pero no llega el código hasta aquí
    // el código <?php ?> no lo admite     
    
return false;            

};
function Bonificar_W(licencia) 
                       
{
var siono = false;
HazArrayM_usd(licencia);
// Da error en HazArrayM_usd y ya no muestra el alert que está a continuación de esta línea código php en la función (aunque esté vacío)
 HazArrayM_usd(licencia);
    alert( "La longitud de datos es: "+datos.length);
    
    //Comprobamos la licenciia en el array de JS    
    
return false;                    
};
</script>
Gracias anticipadas, sólo por leer mi texto.
Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #2  
Antiguo 18-02-2018
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

El problema es sencillo: PHP es un lenguaje que se ejecuta en el servidor, y, Javascript (en este caso) es un lenguaje que se ejecuta en el cliente. Por tanto, no puedes, simplemente, mezclar código PHP y Javascript, porque, estos se ejecutan en ámbitos diferentes.

Por "combinar" PHP y Javascript tal vez entiendes algo así como que un script PHP produzca código Javascript. Ciertamente, esto es posible, pero, el código Javascript que prepares en un script PHP siempre se ejecutará en el cliente.

Eso, por decirlo así, no deberíamos llamarlo "combinar", pues, como digo, no puedes usar funciones de Javascript en PHP ni tampoco hacer lo propio a la viceversa.

Entonces, ¿qué puede hacerse? Lo que puede hacerse hacer "llamadas HTTP" al servidor desde Javascript. O sea, lo que se ha dado en llamar "AJAX". Desde Javascript, puedes hacer una "llamada HTTP" a cierto script PHP, pudiendo enviar argumentos a dicho script PHP, y, reaccionando adecuadamente a su respuesta.

Pero, eso es una cosa, y, mezclar (mejor que combinar) código Javascript y PHP es otra muy diferente, como he dicho, imposible, pues ambos lenguajes se ejecutan en diferentes ámbitos: uno en el cliente y el otro en el servidor.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 18-02-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Muchas gracias, Dec por responder y...¡tan pronto! y...¡en domingo!

Nunca he usado Ajax. (Aunque he oído hablar mucho de él) A lo mejor es más sencillo de lo que me imagino. ¿Tengo entendido que hay que subir algunos scripts a la web? ¿o me confundo con otra cosa?

Bueno, que php se ejecuta en el servidor y JS en el lado del cliente, ya lo sé. Y "combinarlos" no es tarea fácil (y en algunas circunstancias, IMPOSIBLE)

No obstante, hay algunas combinaciones posibles, quizá no recomendables, pero posibles.

Te copio una función, que estoy usando y que funciona correctamente. Y que lo que pretendo hacer es prácticamente lo mismo. Es la función a la que me refería en mi hilo anterior en este foro. Quizá no sea muy elegante, pero funciona.

Código PHP:
<script> 

// creamos la matriz 
function HazArray() 

 datos = new Array ();  

<?php         
php 
  define 
('ARCHIVO_DATOS''fichero.txt'); 

  if (!
file_exists(ARCHIVO_DATOS)) // Aviso si no encuentra el fichero 
    
die ('<pre>no encuentro el fichero "'.ARCHIVO_DATOS.'".</pre>'); 
  
$fa2 file(ARCHIVO_DATOS); // leemos todo el fichero en un array php 
  
if ($fa2 === FALSE// Aviso si no recibió los datos del fichero 
    
die ('<pre>No pude leer el fichero "'.ARCHIVO_DATOS.'".</pre>'); 

    
$size count($fa2);     
     
for(
$i=0$i<$size$i++)  
    {         
    
$fa2[$i] = utf8_encode($fa2[$i]); 
    
$text explode("|",rtrim($fa2[$i]));     
    
?> 
     
    datos.push(<?php echo json_encode($text);?>); 
     
    <?php     
    

?>                         


//El select queda así 
 <select name="Nombres" size="50" id="Nombres" onChange="Rellenar()" > </select> 

// Actualizamos los datos del formulario 
function Rellenar() 
{     
indice = (document.getElementById('Nombres')).selectedIndex; 

document.encuesta.item01.value = datos[indice][0]; 
document.encuesta.item02.value = datos[indice][1]; 
document.encuesta.item03.value = datos[indice][2]; 
document.encuesta.item04.value = datos[indice][3]; 
document.encuesta.item05.value = datos[indice][4]; 
document.encuesta.item06.value = datos[indice][5]; 
document.encuesta.item07.value = datos[indice][6]; 
document.encuesta.item08.value = datos[indice][7]; 
document.encuesta.item09.value = datos[indice][8]; 
document.encuesta.MultiText1.value = datos[indice][9]; 
document.encuesta.MultiText2.value = datos[indice][10]; 
document.encuesta.MultiText3.value = datos[indice][11]; 
document.encuesta.email.value = datos[indice][13]; 
     


</script>
La función a que me refiero es "HazArray()"

Lo que pretendo hacer es usarla con otro nombre de archivo. El problema está en que, no sé por qué no me permite usarla en esta parte del código, para rellenar un array parecido.

Gracias, por tu interés.
Un saludo.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #4  
Antiguo 18-02-2018
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Hola a todos.
Dec, no te quiebres la cabeza, soy un cazurro. Llevo con esto 2 días completos. Pero probando en casa, ahora acabo de probarlo en el servidor, y parece que SI QUE FUNCIONA. Nunca lo hubiera imaginado. Ya lo se.
Mis disculpas. Saludos.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)
Responder Con Cita
  #5  
Antiguo 18-02-2018
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.119
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola a todos,

Lo que tú haces en el código PHP que muestras es preparar, por decirlo así, cierto código Javascript. Eso es perfectamente posible, ahora bien, dicho Javascript se ejecutará ya en el cliente, y, ahí PHP no tiene nada que hacer (no hay intérprete de PHP en el cliente). Es decir, resumiendo, no puedes usar una función de PHP en código Javascript, ni tampoco lo contrario. Digamos que lo que muestras podemos llamarlo "combinar", y, eso, es posible, pero, lo que no podrás hacer es "mezclar" código PHP y Javascript.

Tendrás que investigar sobre "AJAX", puesto que no hay otra forma de, desde Javascript, ejecutar un script de PHP y conocer su resultado. Esto sería parecido a "llamar a una función de PHP en Javascript", pero, no es exactamente así: en realidad se hace una llamada HTTP al servidor, donde se ejecuta un script PHP, que, retorna un resultado, que, puede aprovecharse en Javascript. Pero hay que pasar por todo esto, no puedes, simplemente, ejecutar una función de PHP desde Javascript.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Función javascript que llama a otra función javascript en otra página jandroruiz HTML, Javascript y otros 4 28-02-2013 12:38:00
delphi for php insertar funcion javascript en el head del html raulb PHP 0 21-08-2010 03:11:37
No se que parametro enviarle a esta funcion en javaScript gulder HTML, Javascript y otros 1 11-11-2008 22:06:11
Llamar una funcion javascript desde vbscript bellota HTML, Javascript y otros 0 24-07-2007 02:33:58
Ejecutar función de JavaScript a partir del nombre de su identificador (string) dec HTML, Javascript y otros 12 24-08-2006 02:30:45


La franja horaria es GMT +2. Ahora son las 20:02:09.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi