Tengo una web funcionando Ok con PHP 4.3.3 y Postgres 7.3.4 (lo sé, antediluvianos
)
Estoy migrando a PHP 5.2.0 y Postgres 8.1.11.
Una vez volcada la BBDD, el front-end se visualiza bien, pero en el backoffice, los script de edición y creación de registros -páginas web- están fallando. Parece que se deba a un problema con comillas simples y dobles ( ' y " ). Lo más curioso es que me da un error parecido, incluso si creo registros que no contienen comillas:
Código PHP:
pg_query() [function.pg-query]: query failed: error: syntax error at or near "\" at character
¿Existe alguna solución sencilla? No soy programador, sólo un "aporrea teclas avanzado"
Copio la parte del script que da problemas:
Código PHP:
<?php
//iniciamos sesión
require 'libreria.php';
require 'cabecera.php';
// cabecera común de página
$conid=$HTTP_POST_VARS['conid'];
// echo "<pre>";
// print_r($HTTP_POST_VARS);
// echo "</pre>";
// array idiomas START
$sql="SELECT idiid, descr FROM idiomas ORDER BY idiid;";
$res=pg_query($conn, $sql);
$numidi=pg_numrows($res);
if ($res && $numidi>0) {
$tidi=array();
for ($i=0; $i < $numidi; $i++) {
$r = pg_fetch_row($res, $i);
$tidi[$i]=array($r[0] , $r[1]);
}
}
// array idiomas END
// inicializamos variables
$crear =false;
$modificar=false;
$guardar =false;
$borrar =false;
// seleccionamos la opción
$boton=$HTTP_POST_VARS['submit'];
if ($boton == 'Modificar') { $modificar=true;}
elseif ($boton == 'Guardar') { $guardar =true;}
elseif ($boton == 'Crear') { $crear =true;}
elseif ($boton == 'Borrar') { $borrar =true;}
if ($borrar){
$sql="DELETE FROM contenidos WHERE conid=$conid;";
$res=pg_query($conn,$sql);
}elseif($guardar){
$huboerror=0;
// iniciamos la transacción
pg_query("BEGIN WORK");
$descr =$HTTP_POST_VARS['descr'];
$secid =$HTTP_POST_VARS['secid'];
$conor =(int)$HTTP_POST_VARS['conor'];
$plaid =(int)$HTTP_POST_VARS['plaid'];
$sql="UPDATE contenidos SET secid=$secid, descr='$descr', conor=$conor, plaid=$plaid WHERE conid=$conid;";
$res=pg_query($conn,$sql);
if (!$res) {
echo pg_errormessage($conn);
echo ' Error - en la primera sentencia';
pg_query($conn,'ROLLBACK');
$huboerror=1;
exit;
} else {
$postdata=array();
foreach($HTTP_POST_VARS['tipag'] as $idiid => $valor){ $postdata[$idiid]['tipag']=$valor;}
foreach($HTTP_POST_VARS['titxt'] as $idiid => $valor){ $postdata[$idiid]['titxt']=$valor;}
foreach($HTTP_POST_VARS['texto'] as $idiid => $valor){ $postdata[$idiid]['texto']=$valor;}
foreach($HTTP_POST_VARS['titiz'] as $idiid => $valor){ $postdata[$idiid]['titiz']=$valor;}
foreach($HTTP_POST_VARS['titdr'] as $idiid => $valor){ $postdata[$idiid]['titdr']=$valor;}
foreach($postdata as $idiid => $misvalores){
$tipag=$misvalores['tipag'];
$titxt=$misvalores['titxt'];
$texto=$misvalores['texto'];
$titiz=$misvalores['titiz'];
$titdr=$misvalores['titdr'];
$sql="UPDATE conidiomas SET ";
$sql.=" tipag='$tipag', ";
$sql.=" titxt='$titxt', ";
$sql.=" texto='$texto', ";
$sql.=" titiz='$titiz', ";
$sql.=" titdr='$titdr' ";
$sql.="WHERE conid=$conid AND idiid=$idiid;";
$res=pg_query($conn,$sql);
if (!$res) {
echo pg_errormessage($conn);
echo ' Error - en la sengunda sentencia';
pg_query($conn,'ROLLBACK');
$huboerror=true;
exit;
}
}
if (!$huboerror) {
pg_query($conn,'COMMIT');
}
}
$modificar=true;
}elseif ($crear){
$huboerror=false;
// iniciamos la transacción
pg_query("BEGIN WORK");
$res=pg_query($conn, "SELECT nextval('public.contenidos_conid_seq');");
if ($res) $num = pg_num_rows($res);
if (!$res || $num<1 || $num>1) {
$huboerror=1;
exit;
} else {
$r = pg_fetch_row($res, 0);
// nos guardamos el id que depués usaremos para guardar el registro
$conid = $r[0];
}
$descr =$HTTP_POST_VARS['descr'];
$secid =$HTTP_POST_VARS['secid'];
$conor =(int)$HTTP_POST_VARS['conor'];
$plaid =(int)$HTTP_POST_VARS['plaid'];
$sql="INSERT INTO contenidos (conid,secid,descr,conor, plaid) ";
$sql.="VALUES ($conid, $secid, '$descr', $conor, $plaid);";
$res=pg_query($conn,$sql);
// check for errors
if (!$res) {
echo pg_errormessage($conn);
echo ' Error - en la primera sentencia';
pg_query($conn,'ROLLBACK');
$huboerror=true;
exit;
} else {
$postdata=array();
foreach($HTTP_POST_VARS['tipag'] as $idiid => $valor){ $postdata[$idiid]['tipag']=$valor;}
foreach($HTTP_POST_VARS['titxt'] as $idiid => $valor){ $postdata[$idiid]['titxt']=$valor;}
foreach($HTTP_POST_VARS['texto'] as $idiid => $valor){ $postdata[$idiid]['texto']=$valor;}
foreach($HTTP_POST_VARS['titiz'] as $idiid => $valor){ $postdata[$idiid]['titiz']=$valor;}
foreach($HTTP_POST_VARS['titdr'] as $idiid => $valor){ $postdata[$idiid]['titdr']=$valor;}
foreach($postdata as $idiid => $misvalores){
$tipag=$misvalores['tipag'];
$titxt=$misvalores['titxt'];
$texto=$misvalores['texto'];
$titiz=$misvalores['titiz'];
$titdr=$misvalores['titdr'];
$sql="INSERT INTO conidiomas (conid,idiid,tipag,titxt,texto,titiz,titdr)";
$sql.="VALUES ($conid, $idiid, '$tipag', '$titxt', '$texto', '$titiz', '$titdr');";
$res=pg_query($conn,$sql);
if (!$res) {
echo pg_errormessage($conn);
echo ' Error - en la sengunda sentencia';
pg_query($conn,'ROLLBACK');
$huboerror=true;
exit;
}
}
if (!$huboerror) {
pg_query($conn,'COMMIT');
}
}
$modificar=true;
}
$valores=array();
if($conid>0){
$sql=" SELECT co.conid, ci.idiid, ci.tipag, ci.titxt, ci.texto, ci.titiz, ci.titdr, co.conor, co.descr, co.secid, co.plaid FROM conidiomas as ci, contenidos as co WHERE co.conid=$conid AND ci.conid=co.conid ORDER BY ci.idiid;";
$res=pg_query($conn, $sql);
$num=pg_numrows($res);
if ($res && $num>0) {
for ($i=0; $i < $num; $i++) {
$r = pg_fetch_row($res, $i);
$conid=$r[0];
$idiid=$r[1];
$tipag=$r[2];
$titxt=$r[3];
$texto=$r[4];
$titiz=$r[5];
$titdr=$r[6];
$conor=$r[7];
$descr=$r[8];
$secid=$r[9];
$plaid=$r[10];
$valores['conid']=$conid;
$valores['descr']=$descr;
$valores['tipag'][$idiid]=$tipag;
$valores['titxt'][$idiid]=$titxt;
$valores['texto'][$idiid]=$texto;
$valores['titiz'][$idiid]=$titiz;
$valores['titdr'][$idiid]=$titdr;
}
}
}
?>
Cualquier ayuda será bienvenida.