[SOLUCIONADO] Problema con PHP y Postgresql

Iniciado por nexusz, Noviembre 23, 2016, 11:06:00 PM

Tema anterior - Siguiente tema

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

Noviembre 23, 2016, 11:06:00 PM Ultima modificación: Noviembre 26, 2016, 12:11:21 AM por Gabriela
Buenas tengo un problema con php y postgresql, estoy haciendo un login vulnerable a sql injection para practicar y me topo con estos errores:
Código: php
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
Código: 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&iacute;</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:&nbsp;</td><td><input type="text" name="nombre" id="nombre"></td></tr>
<tr><td>Clave:&nbsp;</td><td><input type="password" name="pwd" id="pwd"></td></tr>
</table>
<input type="submit" value="Enviar">
</form>';
}
?>



y este es para la conexion:
Código: php
<?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!
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Noviembre 24, 2016, 04:24:48 AM #2 Ultima modificación: Noviembre 24, 2016, 04:27:09 AM por Stiuvert
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 ;)

Noviembre 24, 2016, 08:06:46 PM #4 Ultima modificación: Noviembre 26, 2016, 05:29:09 AM por Stiuvert
No tienes permitido ver los links. Registrarse o Entrar a mi 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





No tienes permitido ver los links. Registrarse o Entrar a mi 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:
Código: php
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 los links. Registrarse o Entrar a mi cuenta
cambie de version a  postgresql 9.4 y no me tira mas el error ese, me tira otro es el siguiente:
Código: php
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