Foros del Web » Programando para Internet » PHP »

Variable que se limpia

Estas en el tema de Variable que se limpia en el foro de PHP en Foros del Web. Hola! tengo un código y hay algo medio raro: Primero: tengo un formulario donde el text box tiene un valor que proviene de una base ...
  #1 (permalink)  
Antiguo 06/09/2002, 08:09
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 16 años, 2 meses
Puntos: 59
Variable que se limpia

Hola! tengo un código y hay algo medio raro:

Primero: tengo un formulario donde el text box tiene un valor que proviene de una base de datos, nombre del textbox: $img1. cool.

Al 'submitir' el formulario hago un query a la base de datos, por que? porque si el usuario borra el contenido del textbox ($img1 = "") hay que ejecutar algunas cosillas en la base de datos. Acá el código de dicho query:
Código:
$query_select = "select img1,thumb1,img2,thumb2,img3,thumb3,img4,thumb4 from post where ID = " . $id . "";
					$result_select = mysql_query($query_select, $link);
					$num_posts = mysql_num_rows($result_select);
					while ($row = mysql_fetch_array($result_select)) {
					if (($img1 = "") && (file_exists("/inlander/sites/parejasliberales-com/web/htdocs/guest/".$row[0].""))) {
					unlink ("/inlander/sites/parejasliberales-com/web/htdocs/guest/".$row[0]."");
					unlink ("/inlander/sites/parejasliberales-com/web/htdocs/guest/".$row[1]."");
}					}
Eso quiere decir que si la variable $img1 = "" borra un par de archivos.
Bien, el problema viene cuando la variable $img1 NO ES distinta de "" ($img1 = hola)
Que pasá aquí? Pues que al llegar al condicional anterior (
Código:
if (($img1 = "") && (file_exists("/inlander/sites/parejasliberales-com/web/htdocs/guest/".$row[0]."")))
) la variable se devuelve vacía!!!
y la necesito para otras cosillas más abajo!! alguien tiene idea de porque se resetea? ya comprobé y es en exactamente al terminar el condicional cuando se 'resetea' y es raro, porque el condicional NO se ejecuta, ya que la variable es != ""

No entiendo.

<div style="color:#000;font-family:Verdana;font-size:10px;">Wakkos<br><a href="http://www.artreves.com/wakk/clickcount/clic.php3?url=www.artreves.com/wakk/index.php" style="font-size:9px;color:#e1470b;">follow the white rabbit</a></div>
  #2 (permalink)  
Antiguo 06/09/2002, 08:20
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Re: Variable que se limpia

$img1=&quot;&quot; -&gt; asigna &quot;&quot; a $img1
$img1==&quot;&quot; -&gt; compara &quot;&quot; con El contenido de $img1

Este es un ejemplo tipico de error al escribir, igual que olvidarse un ; etc.

Para detectarlo mas facil puedes usar &quot;&quot;==$img1 para la comparacion. Si se te olvida un =, PHP te dara un error en esa linea diciendo que no se puede asignar un valor a una constante o algo asi.

Por cierto, tu error tambien puede ser provocado si tienes conocimientos de programacion en lenguajes como Pascal, Delphi y VisualBasic en los que dentro del if el igual compara y no asigna.


Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 06/09/2002, 08:32
Avatar de Wakkos
Colaborador
 
Fecha de Ingreso: octubre-2001
Ubicación: (cerca)
Mensajes: 1.795
Antigüedad: 16 años, 2 meses
Puntos: 59
Re: Variable que se limpia

Pero como es posible que PHP asigne cuando comparo???? eso me parece mal, muy mal!

De todas maneras, lo arregle con
Código:
if ((empty($img2)) &amp;&amp; (file_exists(&quot;/inlander/sites/parejasliberales-com/web/htdocs/guest/&quot;.$row[2].&quot;&quot;)))
<div style="color:#000;font-family:Verdana;font-size:10px;">Wakkos<br><a href="http://www.artreves.com/wakk/clickcount/clic.php3?url=www.artreves.com/wakk/index.php" style="font-size:9px;color:#e1470b;">follow the white rabbit</a></div>
  #4 (permalink)  
Antiguo 06/09/2002, 08:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Re: Variable que se limpia

Porque los que diseñaron PHP se inspiraron en el mejor lenguaje de todos: el C ;)

Ademas, si no asignara dentro de las instrucciones condicionales, la archiconocida estructura while ($row=mysql_fetch_array()) { ... } no funcionaria. Ya ves.


Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 06/09/2002, 11:46
Nok
 
Fecha de Ingreso: abril-2001
Mensajes: 302
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Variable que se limpia

Buenas, a ver vamos a aclarar un poco las cosas porque me parece que esta medio confuso y la idea no es solucionar el problema de otra manera sino que entender porque las cosas suceden de una forma en la que no esperamos.
En PHP al igual que en C y otros lenguajes, el operador de asignacion es diferente al de comparacion. En PHP la asignacion se realiza mediante el operador igual (&quot;=&quot;) y la comparacion mediante el operador doble igual (&quot;==&quot;).
Ahora, algo particular de este tipo de Sintaxis es que la operacion asignar (=) devuelve un valor implicitamente, es decir (a=10) asigna a la variable &quot;a&quot; el valor 10, pero ademas devuelve el valor que asignaste o sea 10.
Es por eso que es posible hacer cosas de este tipo:
$a = $b = 10;
// asigno a $b el valor 10, y asigno a $a el valor de la asignancion, o sea 10.

En tu caso, al hacer ($img1 = &quot;&quot;) estas asignado &quot;&quot; a $img1 y el valor analizado por el if es &quot;&quot;, que es false.

En otros lenguajes, Pascal por ej. estos operadores son := (asignacion) y = (comparacion), pero en este lenguaje no te devuelve este valor (creo). En cambio el ASP o VB, no hay diferencia entre asignar y comparar, por lo que es un poco confuso, y eso repercute tambien en el analisis lexico del compilador o interprete, que como siempre MS va contra la corriente. Esto lo digo porque lamentablemente tengo que lidiar todos los dias contra VB por cuestiones laborales. pero en los ratos libres disfruto usando PHP

Bueno, espero haber sido claro en mi explicacion.

Saludos

<img name="Firma" src="http://www.jpw.com.ar/FirmaNok.gif" border="0" usemap="#Mapa"><map name="Mapa"><area shape="rect" coords="0,43,174,60" href="http://www.jpw.com.ar/noktemplate"></map>
  #6 (permalink)  
Antiguo 06/09/2002, 12:03
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años
Puntos: 68
Re: Variable que se limpia

A la excelente explicación de nuestro amigo Nok, solo queda agregar 1 sola cosa.

Los operando de comparación, son dos en realidad. Los mismos son

'==' Igualdad
'===' Identidad

En que se diferencian? Bueno, a veces lo mejor son los ejemplos. Todos sabemos que en lenguajes como PHP o C, cualquier valor numérico distinto de 0 es tomado como TRUE y el 0 o el String vacío son tomados como FALSE.
Bueno, entonces tenemos que :

if(0 == false) echo &quot;0 y false son 'iguales'&quot;;
Siempre evalúa verdadero.

Pero NO SON idénticos. Esto es, equivalen a un FALSO binario, pero NO SON un false binario. La identidad especificamente indica que dos valores SON IGUALES y que además SON del mismo TIPO.
Teniendo en cuenta esto :

if(0 === false) echo &quot;0 y false son IDENTICOS&quot;;
Siempre evaluá a falso, porque no lo son.

Bueno, tan solo quería aclarar este punto que muchas veces no se tiene en cuenta.
Saludos.
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 11:45.