Buenas tengo un problema con php y postgresql, estoy haciendo un login vulnerable a sql injection para practicar y me topo con estos errores:
Warning: pg_exec(): Query failed: ERROR: no existe la relación «productos» LINE 1: SELECT * FROM Productos WHERE Nombre='admin' and Contracena=... ^ in C:\xampp\htdocs\conpostgres.php on line 17
Warning: pg_numrows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\conpostgres.php on line 24
el codigo de el login es el siguiente:
este el login.php
<?php
session_start();
include 'conpostgres.php';
// si se ha rellenado anteriormente el formulario ,comprobar los datos
if(isset($_POST['nombre'])){
//sentencia sql a ejecutar
$sql="SELECT * FROM Productos WHERE Nombre='".$_POST["nombre"]."' and Contracena='".$_POST["pwd"]."'";
$resultado=ejecutar_SQL($conexion,$sql);
//si hay filas,los datos de accseso eran correctos
if(numero_filas($resultado)!=0){
//obtener los datos de l usuario logado
$fila=$fila($resultado,0);
// almacenar su ID en los datos de la sesion
$_SESSION['usuario']=$fila['id'];
// dar la bienvenida
echo "<h3>Login OK</h3>
Bienvenid@,".$fila['desc']."<br>
Pulse <a href=producto.php>aquí</a> para continuar.";
}else {
echo "<h3>Login fallido</h3>";
}
}
// si no se ha iniciado sesion,mostrar un formulario de logon
if(!isset($_SESSION['usuario'])){
print '<form method="POST" action="login.php">
<table border="1">
<tr><td colspan="2">Introduzca sus datos de acceso</td></tr>
<tr><td>Nombre: </td><td><input type="text" name="nombre" id="nombre"></td></tr>
<tr><td>Clave: </td><td><input type="password" name="pwd" id="pwd"></td></tr>
</table>
<input type="submit" value="Enviar">
</form>';
}
?>
y este es para la conexion:
<?php
// abrir conexion con la base de datos
function conectar($host,$db,$usuario,$contraceña){
return pg_connect("host=$host dbname=$db user=$usuario password=$contraceña");
}
// cerrar conexion
function cerrar_conexion($conexion){
pg_close($conexion);
}
// ejecutar una consulta sql sobre abre unaconexion
function ejecutar_SQL($conexion,$cadena){
return pg_exec($conexion,$cadena);
}
//obtner numeros de filas de u nresultado
function numero_filas($resultado){
return pg_numrows($resultado);
}
// obtiene la fila numero $i de un resultado
// para obtener un campo de usa la sintaxis $fila_obtenida['nmbre de la columna']
function fila($resultado,$i){
return pg_fetch_array($resultado,$i);
}
$conexion=conectar('localhost','postgres','postgres','123456');
?>
que puede ser? porque cree la base de datos bien con las tablas correctas,uso xampp
un saludo y gracias
Y si existe la tabla productos, si puedes pasar una captura de tu base de datos por fa men Saludos!
Lista las tablas de la base de datos como dice arthusu con "\l". Y realiza la consulta más corta para saber de donde viene el problema, por ejemplo en el WHERE utiliza sola "nombre" (y escríbelo todo en minúscula)
Saludos
Hola nexusz, ese error suele ocurrir cuando no existe la tabla a la que intentas acceder. Además, he visto que tu variable $sql crea una cadena con la consulta pero te has olvidad el punto y coma al final. Observa que tu punto y coma es de la declaración de php, pero te falta el punto y coma después de la última comilla simple '
Prueba y si no funciona te recomendaría ver si de verdad existe la tabla. En postgresql puedes ver las tablas con \d (tienes que estar conectado a la base de datos) y las bases de datos con \l.
Saludos ;)
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Y si existe la tabla productos, si puedes pasar una captura de tu base de datos por fa men Saludos!
ahi esta la imagen de las tablasy la base de datos
(https://s12.postimg.org/6dbo0n3yl/tablas.jpg)
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
Lista las tablas de la base de datos como dice arthusu con "\l". Y realiza la consulta más corta para saber de donde viene el problema, por ejemplo en el WHERE utiliza sola "nombre" (y escríbelo todo en minúscula)
Saludos
ya probe en dejar solo el nombre y tambien probe en dejar solo la contraceña y me sigue diciendo que no detecta la tabla
cambie de version a postgresql 9.4 y no me tira mas el error ese, me tira otro es el siguiente:
Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? in C:\xampp\htdocs\conpostgres.php on line 5
No tienes permitido ver enlaces.
Registrate o Entra a tu cuenta
cambie de version a postgresql 9.4 y no me tira mas el error ese, me tira otro es el siguiente:
Warning: pg_connect(): Unable to connect to PostgreSQL server: could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (::1) and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? in C:\xampp\htdocs\conpostgres.php on line 5
ya esta todo solucionado, le agregue el port a la conexion y ya me detecta las tablas y todo con esta version de postgres