Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/04/2013, 14:21
Avatar de berkeleyPunk
berkeleyPunk
 
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 10 meses
Puntos: 22
Sonrisa La etiqueta HTML <video> tiene problema con PHP

Otra vez yo, ¡carajo!, javascript y php se han puesto en mi contra.

Antes de presentar códigos y el problema, les digo qué quiero hacer. Tengo una galería de videos. Unos son restringidos, así que hay que logearse para verlos, otros son gratuitos. Si el video es gratuito, el title del link está vacío. Si el video es restringido, el title del link dice: restringido. Cuando el video es gratuito se muestra el video inmediatamente y aquí no hay problema. Si el video es restringido entonces se abre una nueva ventana con un formulario con usuario y contraseña. Cuando se da clic al submit se carga un doc PHP que valida al usuario, si la clave y contraseña son incorrectas simplemente no se muestra el video. Hasta aquí no hay problema. Si son correctas, entonces debe mostrarse el video elegido. Pero PHP no muestra el video. Pone el reproductor en pantalla, y éste dice que el tipo MIME del archivo no existe.

Estos son los links:
Código HTML:
Ver original
  1. <div>
  2.       <a href="#n" name="A" title="restringido" onclick="abrirVideo(this.name, this.title)"></a>
  3.     </div>
  4.     <div>
  5.       <a href="#n" name="B" title="" onclick="abrirVideo(this.name, this.title)"></a>
  6.     </div>
  7.     <div>
  8.       <a href="#n" name="C" title="restringido" onclick="abrirVideo(this.name, this.title)"></a>
  9.     </div>
  10.     <div>
  11.       <a href="#n" name="D" title="restringido" onclick="abrirVideo(this.name, this.title)"></a>
  12.     </div>

Cuando se da clic a un link se abre con javascript una nueva ventana que checa si el video es gratuito o no. Si el video es restringido, entonces se abre el formulario y cuando se da clic al submit se llama al archivo validarUsuario.php. Aquí el javascript:
Código Javascript:
Ver original
  1. function abrirVideo(nameDelVinculo, titleDelVinculo)
  2.     {
  3.         if ( titleDelVinculo != "restringido" )
  4.         { //Si el video es gratuito, simplemente se abre una nueva ventana y se muestra el video, esto funciona bien.
  5.             var ventana = window.open("", "X", "width=640, height=480");
  6.             ventana.document.write("<head><title>Video gratuito<\/title><\/head>");
  7.             ventana.document.write("<body>");
  8.  
  9. // Con la variable nameDelVinculo identifico qué video se quiere ver. Por ejemplo,
  10. // si se pulsó el video con name C, se visualizará el video llamado videoC.ogv
  11.             ventana.document.write('<video src=\"images\/video\/video' + nameDelVinculo + '.ogv\" controls><\/video>');
  12.             ventana.document.write("</body>");
  13.         }
  14.         else
  15.         {
  16.             var ventana = window.open("", "Y", "width=640, height=480");
  17.             ventana.document.write("<head><title>Video restringido<\/title></head>");
  18.             ventana.document.write("<body>");
  19.             ventana.document.write('<form action=\"images\/docs\/validarUsuario.php\" method=\"post\">');
  20.             ventana.document.write('Usuario<input type=\"text\" name=\"usuario\" \/>');
  21.             ventana.document.write('<br \/>');
  22.             ventana.document.write('Contraseña<input type=\"text\" name=\"contrasena\" \/>');
  23.             ventana.document.write('<br \/>');
  24.  
  25. // Este input guarda el valor C de la variable nameDelVinculo (luego vuelvo invisible este input).
  26. // Así, este valor se lleva al archivo PHP por medio de $_POST, con lo cual PHP podrá enviar el video requerido.
  27.             ventana.document.write('<input type=\"text\" name=\"linkClicleado\" value=\"' + nameDelVinculo + '\" />');
  28.             ventana.document.write('<input type=\"submit\" value=\"Entrar\" \/>');
  29.             ventana.document.write('<\/form>');
  30.             ventana.document.write("<\/body>");
  31.         }
  32.     }

Supongamos que el video es restringido y el usuario se logea, entonces se llama el archivo validarUsuario.php, que contiene:
Código PHP:
    if ( (!isset($_POST["usuario"])) || (!isset($_POST["contrasena"])) )
    {
        echo 
'Necesitas logearte primero para acceder a esta zona';
    }
    else
    {
        
$archivo file("users.txt");
        
$cuenta  count($archivo);
        for (
$i=0$i<$cuenta$i++)
        {
            
$filaDividida explode(":"$archivo[$i]);
            
$user         $filaDividida[0];
            
$pass         $filaDividida[1];
            if ( (
$_POST["usuario"] == trim($user)) && ($_POST["contrasena"] == trim($pass)) )
            {
                echo 
'<video src="video' $_POST["linkClicleado"] . '.ogv" controls="controls"></video>';
            }
        }
    } 
Aquí está el problema.
No se visualiza el video con estas instrucciones PHP. Juro por mi madre, en paz descanse, que le he movido infinidad de veces, haciendo pruebas y repruebas.
Creo que pude filtrar un poco dónde está el error, aunque no de modo exacto.
Vean.

Si en el archivo validarUsuario.php se quita toda la programación PHP que valida al usuario (que es el código de aquí arriba), y sólo se pone las intrucciones PHP necesarias para ver el video que el usuario eligió, entonces sí se visualiza el video:
Código PHP:
    <?php
      
echo '<video src="video' $_POST["linkClicleado"] . '.ogv" controls="controls"></video>';
    
?>
Esto significa que la variable linkClicleado sí contiene la letra que identifica al link que fue elegido por el usuario. Pero si incluimos este mismo código dentro del código PHP que valida al usuario, ya no funciona. O sea, si resulta correcta la validación del usuario entonces se ejecuta este mismo código, pero en este contexto no funciona. ¿Por qué?





.