Foros del Web » Programando para Internet » PHP »

Se me pierden las variables. AUXILIO :'(

Estas en el tema de Se me pierden las variables. AUXILIO :'( en el foro de PHP en Foros del Web. tengo un gran problemón. He desarrollado un backend para modificar mi sitio web. Usé todas las variables $_GET y $_POST, aunque mi php.ini estaba en ...
  #1 (permalink)  
Antiguo 23/06/2005, 19:18
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 14 años
Puntos: 2
Se me pierden las variables. AUXILIO :'(

tengo un gran problemón.
He desarrollado un backend para modificar mi sitio web.
Usé todas las variables $_GET y $_POST, aunque mi php.ini estaba en con register_globals = on, para evitarme problemas.
Todo funciona de maravillas, pero no cuando pongo las globals en off. El script modificador de tablas no funciona, no sé que tenga.
Lo peor es que según el script "Se insertó el registro a las mil maravillas"

A ver si alguien me puede ayudar antes de que me dedique a la jardinería:
por las dudas pregunto, hay algún analizador para este caso?

moraleja: nunca utilicen register_globals = on << es lo peor que les puede pasar. todo andará de maravillas hasta que suban el sitio al servidor web

Archivo de ejemplo de una tabla:
Código PHP:
<?
$db_tabla 
"otros";
$db_tabla_campo_unico "otr_tit";
$db_tabla_campos_nombre = array("Id""Título""Bajada""URL");
$db_tabla_campos = array("id_otr""otr_tit""otr_baj""otr_url");
$db_formu_campos_tipo = array("id""text""textarea""text");
$db_tabla_campos_mostrar = array("1""1""0""0");
// No editar ----------------------------------------------------------------------------------------
$db_tabla_campos_cantidad count($db_tabla_campos);
?>
Script para modificar Tabla:
Código PHP:
<? if (isset($_GET['sec']) && is_numeric($_GET['id'])) {
    require(
"cfg.".$_GET['sec'].".php");
    require(
"lib.modificar.php");
    require(
"libreria.php");
    require(
"db.php");
}
else {
    echo 
"borracho de mierda, elegí una sección y un id";
    exit;
}
if (
$_GET['accion'] != "modificar") {
        
$sql "select * from ".$db_tabla." where ".$db_tabla_campos[0]." = '".$_GET['id']."'";
        
$result mysql_query($sql) or die("Error: <b>$sql</b><br>"mysql_error());
        if (
$row mysql_fetch_row($result)) { ?>
<form method="POST" action="?sec=<? echo $_GET['sec']; ?>&id=<? echo $_GET['id']; ?>&accion=modificar">
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">

<? for ($i 0$i $db_tabla_campos_cantidad$i++) {
    echo 
$db_formu_campos_tipo[$i]($db_tabla_campos_nombre[$i], $db_tabla_campos[$i], $row[$i]);
?>
<td colspan="3" align="center">
<input type="submit" name="Submit" value="Modificar">
</td>
</table>
</form>
<?
        
}
        else {
            echo 
"borracho hijo de puta, el id que metiste no existe!";
            exit;
        }
}
else {
    for (
$i 0$i $db_tabla_campos_cantidad$i++) {
        switch(
$db_formu_campos_tipo[$i]) {
            case 
"tinytext":
                $
$db_tabla_campos[$i] = enc_txt($_POST[$db_tabla_campos[$i]]);
                break;
            case 
"text":
                $
$db_tabla_campos[$i] = enc_txt_html($_POST[$db_tabla_campos[$i]]);
                break;
            case 
"textarea":
                $
$db_tabla_campos[$i] = enc_txt_html_ico($_POST[$db_tabla_campos[$i]]);
                break;
            case 
"fecha":
                $
$db_tabla_campos[$i] = $_POST['fec_ano']."-".$_POST['fec_mes']."-".$_POST['fec_dia']." ".$_POST['fec_hor'].":".$_POST['fec_min'];
                break;
        }
    }
    
$sql "select ".$db_tabla_campos[0]." from ".$db_tabla." where ".$db_tabla_campo_unico." = '".$$db_tabla_campo_unico."'";
    
$result mysql_query($sql);
    if (
$row mysql_fetch_assoc($result)) {
        if (
$row[$db_tabla_campos[0]] == $_POST[$db_tabla_campos[0]]) {
                    for (
$i 1$i $db_tabla_campos_cantidad 1$i++) {
                        
$campos_y_variables .= $db_tabla_campos[$i]."='".$$db_tabla_campos[$i]."', ";
                    }
                    
$sql "update ".$db_tabla." set ".$campos_y_variables.$db_tabla_campos[$db_tabla_campos_cantidad 1]."='".$$db_tabla_campos[$db_tabla_campos_cantidad 1]."' where ".$db_tabla_campos[0]." = '".$$db_tabla_campos[0]."'";
                    
$result mysql_query($sql) or die("Error: <b>$sql</b><br>"mysql_error());
                    echo 
"El registro <b>".$$db_tabla_campo_unico."</b> se modific&oacute; correctamente.<br><a href=\"listar.php?sec=".$db_tabla."\">continuar</a>";
        }
        else {
            echo 
"Ya existe un registro cuyo t&iacute;tulo es <b>".$$db_tabla_campo_unico."</b>.<br><a href=\"javascript:history.back()\">cambiar</a>";
        }
    }
    else {
        for (
$i 1$i $db_tabla_campos_cantidad 1$i++) {
            
$campos_y_variables .= $db_tabla_campos[$i]."='".$$db_tabla_campos[$i]."', ";
        }
        
$sql "update ".$db_tabla." set ".$campos_y_variables.$db_tabla_campos[$db_tabla_campos_cantidad 1]."='".$$db_tabla_campos[$db_tabla_campos_cantidad 1]."' where ".$db_tabla_campos[0]." = '".$$db_tabla_campos[0]."'";
        
$result mysql_query($sql) or die("Error: <b>$sql</b><br>"mysql_error());
        echo 
"El registro <b>".$$db_tabla_campo_unico."</b> se modific&oacute; correctamente.<br><a href=\"listar.php?sec=".$db_tabla."\">continuar</a>";
    }    
}
mysql_close($db_con); ?>
mis saludos
  #2 (permalink)  
Antiguo 23/06/2005, 22:18
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Saludos! . Viendo tu código me llamó la atención esto:
Código PHP:
<form method="POST" action="?sec=<? echo $_GET['sec']; ?>&id=<? echo $_GET['id']; ?>&accion=modificar">
Ve que eso está mal planteado... ¿cómo mandar valores po URL (que intentas poner en el action) si el method es POST??... la simpleza de la contradicción en eso... pero aúnque mandes por GET es erroneo... el formulario enviará (debe de) solo lo que contiene. Entonces, la forma adecuada es imprimir esos valores que quieres pasar por URL en campos ocultos y emplear un solo method...

Espero sea tu solución (debería)... hazlo saber si tienes problema con modificar esto. Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 23/06/2005, 22:28
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 14 años, 4 meses
Puntos: 21
Opino los mismo que jam1138

en action indica la pagina de destino, puede ser tambien
action="<?php echo $PHP_SELF;?>">
__________________
gerardo
  #4 (permalink)  
Antiguo 23/06/2005, 22:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
De hecho debe de ser action="<?=$_SERVER['PHP_SELF'] ?>" pero no es tanto ese el problema... el problema es que se le quiere poner algo como action="pagina.php?variable=algo" ...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 23/06/2005, 22:51
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 14 años
Puntos: 2
al fin!

gracias..
Lo que comentás, Jam1138 no es problema.. sé que es redundante mandar esa variable ya que se adjunta en un campo hidden generado por un for..

pero igual acabo de encontrar el problema
sólo hay que reemplazar
Código PHP:
$sql "update ".$db_tabla." set ".$campos_y_variables.$db_tabla_campos[$db_tabla_campos_cantidad 1]."='".$$db_tabla_campos[$db_tabla_campos_cantidad 1]."' where ".$db_tabla_campos[0]." = '".$$db_tabla_campos[0]."'"
POR
Código PHP:
$sql "update ".$db_tabla." set ".$campos_y_variables.$db_tabla_campos[$db_tabla_campos_cantidad 1]."='".$$db_tabla_campos[$db_tabla_campos_cantidad 1]."' where ".$db_tabla_campos[0]." = '".$_POST[$db_tabla_campos[0]]."'"


cuando termine de afinarlo lo publico en las FAQs ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.