Duda con PHP y base de datos

Iniciado por jamatbar, 28 Octubre 2020, 17:46 PM

0 Miembros y 1 Visitante están viendo este tema.

jamatbar

Cita de: #!drvy en 30 Octubre 2020, 13:44 PM
Las comillas en tu mensaje están rotas y por tanto se rompe el javascript entero. O las escapas o usas combinación de comillas simples y dobles.

Lo ideal también es que se usen funciones como printf/sprintf que están hechas para estas cosas.


Código (php) [Seleccionar]
printf(
   '<script>alert("El usuario %s se ha desconectado de la base de datos %s");</script>',
   htmlentities($_POST['usuario'], ENT_QUOTES), // Recuerda escapar para prevenir XSS.
   htmlentities($_POST['bd'], ENT_QUOTES)
);


o

Código (php) [Seleccionar]
$usuario = htmlentities($_POST['usuario'], ENT_QUOTES);
$bd      = htmlentities($_POST['bd'], ENT_QUOTES);
echo "<script>alert('El usuario {$usuario} se ha desconectado de la base de datos {$bd}');</script>";



Saludos

Antes que nada gracias de nuevo.

¿Dónde se rompen las comillas de mi echo?, y he probado ambas soluciones que me has dado y sigue sin salir ningún mensaje, sólo salta a index.php

Código (php) [Seleccionar]
                <?php
                
if (isset($_POST['desconectar'])) {
                    
//echo "<script>alert('El usuario {$_POST["usuario"]} se ha desconectado de la base de datos {$_POST["bd"]}');</script>";
                
printf(
                    
'<script>alert("El usuario %s se ha desconectado de la base de datos %s");</script>',
                    
htmlentities($_POST['usuario'], ENT_QUOTES), // Recuerda escapar para prevenir XSS.
                    
htmlentities($_POST['bd'], ENT_QUOTES)
                );
                    
mysqli_close($pruebaconexion);
                }
                
?>

#!drvy

Mmmm perdona no se porque me hice la idea que se romperían las comillas dobles entre los corchetes. Supongo que por el syntax highlight que se ve xD De todos modos, está bien que se escapen.

¿Cuándo dices que "te lleva" o "salta a" index.php, te refieres a que ese formulario de desconectar NO está en index.php? ¿Es decir, no es que se esté recargado la página sino que te lleva a otra diferente?

Si es el caso, es normal porque el formulario con los datos se envía directamente a index.php el PHP nunca tiene oportunidad de ejecutarse. En todo caso, la comprobación de si existe POST "desconectar" tendrias que hacerla en el index.

Saludos

jamatbar

Cita de: #!drvy en 30 Octubre 2020, 14:14 PM
Mmmm perdona no se porque me hice la idea que se romperían las comillas dobles entre los corchetes. Supongo que por el syntax highlight que se ve xD De todos modos, está bien que se escapen.

¿Cuándo dices que "te lleva" o "salta a" index.php, te refieres a que ese formulario de desconectar NO está en index.php? ¿Es decir, no es que se esté recargado la página sino que te lleva a otra diferente?

Si es el caso, es normal porque el formulario con los datos se envía directamente a index.php el PHP nunca tiene oportunidad de ejecutarse. En todo caso, la comprobación de si existe POST "desconectar" tendrias que hacerla en el index.

Saludos

Así es, el formulario desconectar te redirige a index.php para que puedas volver a conectarte. El código de index.php es el siguiente:

Código (php) [Seleccionar]
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <title>Colección Videojuegos</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="main.css">
    </head>
    <body>

        <form action="conectado.php" method="POST">
            <label for="equipo">Equipo</label>
            <input type="text" value="Equipo" name="equipo">
            <label for="usuario">Usuario</label>
            <input type="text" value="Usuario" name="usuario">
            <label for="contrasena">Password</label>
            <input type="password" value="Contraseña" name="password">
            <label for="basededatos">Base de datos</label>
            <input type="text" value="Nombre BD" name="bd">
            <input type="submit" value="Conectar" name="conectar">
            <?php
            
//Incluímos los métodos
            
include('conectar.php');
            
//Comprobamos que hayamos pulsado el botón Conectar
            
if (isset($_POST['conectar'])) {
                
Conectar($_POST['equipo'], $_POST['usuario'], $_POST['password'], $_POST['bd']);
            }
            
?>

        </form>
    </body>
</html>


¿Ahí tendría que colocar el isset?

jamatbar

He colocado el isset en index.php (usando echo que por ahora estoy más familiarizado), pero sin argumentos, ya que si le pongo $usuario y $bd no me los encuentra.

Código (php) [Seleccionar]
            <?php
            
//Incluímos los métodos
            
include('conectar.php');
            
//Comprobamos que hayamos pulsado el botón Conectar
            
if (isset($_POST['conectar'])) {
                
Conectar($_POST['equipo'], $_POST['usuario'], $_POST['password'], $_POST['bd']);
            }
            
            if (isset(
$_POST['desconectar'])) {
                    
//echo "<script>alert('El usuario {$_POST["usuario"]} se ha desconectado de la base de datos {$_POST["bd"]}');</script>";
                
echo(
                    
'<script>alert("El usuario se ha desconectado de la base de datos");</script>');
                    
mysqli_close($pruebaconexion);
                }
            
?>


El problema es que ahora no encuentra $pruebaconexion, me salen los siguientes fallos:

Notice: Undefined variable: pruebaconexion in C:\xampp\htdocs\ProyBD\index.php on line 38

Warning: mysqli_close() expects parameter 1 to be mysqli, null given in C:\xampp\htdocs\ProyBD\index.php on line 38

jamatbar

Ya lo conseguí, al final lo arreglé con un onclick en el botón de desconectar.