Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   commit PHP firebird (https://www.clubdelphi.com/foros/showthread.php?t=51053)

hecbuma 04-12-2007 22:54:44

commit PHP firebird
 
hola estoy haciendo una aplicacion con firebird".0/interbase y php en un
servidro apache ubuntu... todo funciona bien pero pero a la hora de hacer un
DELETE o un INSERT en alguna tabla no realiza ninguna accion no regresa ningun
error el commit no se realiza.. aqui esta mi codigo y espero que me puedan
ayudar:
Código PHP:

$nom $_GET['nom'];
$ns $_GET['nc'];
$c $_GET['c'];
$gr $_GET['gr'];
/*echo $nom . " " . $ns . " " . $c . " " . $gr;*/
$c=ibase_pconnect("localhost:/usr/bases/PRESTAMOS.FDB",'sysdba','masterkey');
$tr=ibase_trans("IBASE_WRITE",$c);
$sql="UPDATE alumno SET no_cuenta='" ns "', nombre='" nom "', grupo='"
gr "' where no_cuenta like '%" "%';";
$q=ibase_query($tr,$sql);
ibase_commit($tr);
ibase_close($c);
header("Location:alumnos.php"); 


Mick 05-12-2007 11:36:51

Hola,

IBASE_WRITE no debe ir entre comillas, de todas formas siendo un script tan pequeño y como no se esta usando rollback no es necesario iniciar explicitamente ninguna transaccion.

Como usas pconnect (conexion persistente), llamar a ibase_close no es necesario ya que en realidad no hace nada en ese caso.

Y otra cosa importantisima debes validar las entradas y usar parametros en las queries (usando una ? para marcar los parametros), ese script es un peligro, cualquiera podria borrar los numeros de cuenta de todos los alumnos dejando en blanco el campo c del formulario y aunque comprobases que no quede en blanco bastaria escribir algo de este estilo ' OR 1=1 OR ''=' .

Otra cosa, como haces una redireccion a otra pagina, nunca te apareceran errores que pudiese dar ese script en pantalla.

El codigo quedaria asi:

Código PHP:

$nom $_GET['nom'];
$ns    $_GET['nc'];
$c     $_GET['c'];
$gr    $_GET['gr'];

// Aqui asegurarse de que los parametros tengan valores validos.

$c=ibase_pconnect("localhost:/usr/bases/PRESTAMOS.FDB",'sysdba','masterkey');
$sql="UPDATE alumno SET no_cuenta=?, nombre=?, grupo=? WHERE no_cuenta CONTAINING ?";
$rsibase_query($c,$sql,$ns$nom$gr$c);

if(
$rs!==FALSE) {
 
header("Location:alumnos.php");  
} else {
 
// Ha habido algun error, hacer lo que sea necesario en ese caso.


Saludos

jgutti 05-12-2007 14:50:00

al guardar registro, se corrompe la base
 
Hola al foro, utilizo firebird + php, al insertar o actulizar registros estos se graban correctamente en la base de datos pero esta se corrompte, el script es el sgte:

$db=ibase_connect("localhost:/data/e_comer.gdb","user","pas");
if (!$db) die ("error connecting to database");
$tr=ibase_trans($db,IBASE_COMMITTED,IBASE_REC_VERSION,IBASE_NOWAIT);
$sql ="INSERT INTO pagos_web(EMPRESA,FACTURA,FECHA,monto)
values($emps,$fact,],'".formato_guarda_fecha($f_emi)."',$monto)";
$result = ibase_query($_SESSION['tr'],$sql);
if (!$result) database_error ("Error al Ingresar el Pago", $_SESSION['tr']);
ibase_commit_ret($_SESSION['tr']);
- ¿que estoy haciendo mal para que se producto este problema?

saludos

jgutti


La franja horaria es GMT +2. Ahora son las 22:36:39.

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