Foros del Web » Programando para Internet » PHP »

Principiante: que alguien me explique esto O_o

Estas en el tema de Principiante: que alguien me explique esto O_o en el foro de PHP en Foros del Web. Código PHP: <HTML> <HEAD> <TITLE>lectura.php</TITLE> </HEAD> <BODY> <h1><div align="center">Lectura de la tabla</div></h1> <br> <br> <? //Conexion con la base mysql_connect ( "localhost" , "Matias" , "1234" ); //Ejecutamos la sentencia SQL $result = mysql_db_query ( ...
  #1 (permalink)  
Antiguo 22/02/2003, 22:01
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 17 años, 2 meses
Puntos: 3
Principiante: que alguien me explique esto O_o

Código PHP:
<HTML>
<HEAD>
<TITLE>lectura.php</TITLE>
</HEAD>
<BODY>
<h1><div align="center">Lectura de la tabla</div></h1>
<br>
<br>
<?
//Conexion con la base
mysql_connect("localhost","Matias","1234");

//Ejecutamos la sentencia SQL
$result=mysql_db_query("Foro","select * from coment");
?>
<table align="center">
<tr>
<th>Nombre</th>
<th>Teléfono</th>
</tr>
<?
//Mostramos los registros ***ESTA ES LA PARTE QUE NO ENTIENDO***
while ($row=mysql_fetch_array($result))
{
echo 
'<tr><td>'.$row["nombre"].'</td>';
echo 
'<td>'.$row["mensaje"].'</td></tr>';
}
mysql_free_result($result)
?>
</table>

<div align="center">
<a href="insertar.html">Añadir un nuevo registro</a><br>
<a href="actualizar1.php">Actualizar un registro existente</a><br>
<a href="borrar1.php">Borrar un registro</a><br>
</div>

</BODY>
</HTML>
En la parte del while, no entiendo la lógica del asunto, la variable $row no ha sido definida, por lo que su valor es null. La traducción sería:
"mientras $row (que no vale nada) sea igual a mysql_fetch_array($result) (osea el arreglo que contiene el registro completo seleccionado) imprimimos los campos nombre y mensaje..."

qué lógica hay en while ($row=mysql_fetch_array($result))???

gracias de ante

Última edición por Sir Matrix; 22/02/2003 a las 22:04
  #2 (permalink)  
Antiguo 22/02/2003, 22:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues el mysql_fetch_xxxx (sea array, assoc, object, row, etc ... ) devuelve TRUE hasta que no hay registros q leer en ese caso obtiene un FALSE .. El "secreto" xD está en que a cada pasada del bucle (mejor dicho, a cada llamada de la funcion mysql_fetch_xxx) se mueve el puntero interno de la consulta obtenida por mysql_query() y se avanza un registro en ella (hacia adelante obtenido en el "fetch_xxx" el registro q esté el puntero de la tabla) .. por lo tanto toma un valor nuevo dando "true" si hay o "false" si no hay registros q leer ...

Esos detallitos los puedes ver en el manual de PHP .. ahí ves que parametros requiere -Tal- función y que devuelve la función:

Cita:
Fetch a result row as an associative array, a numeric array, or both. (PHP 3, PHP 4 )
array mysql_fetch_array ( resource result [, int result_type ] )

Returns an array that corresponds to the fetched row, or FALSE if there are no more rows.
(este es el ejemplo de fetch_array .. pero es igualmente aplicable al resto de mysql_fetch_xxx)

Un saludo,

Si en algo me equivoco .. me corrigen.
  #3 (permalink)  
Antiguo 23/02/2003, 00:03
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 17 años, 2 meses
Puntos: 3
Muchas gracias cluster! se me ha aclarado bastante, pero aún no entiendo lo de la variable "$row", en:

while ($row=mysql_fetch_array($result))

$row no tiene ningún valor asignado, por lo tanto estamos comparando "null" o "false" con el valor de "mysql_fetch_array($result)" (?). Y al parecer ahí mismo se comparan los valores y se le asigna de alguna forma a $row el registro seleccionado (!??).

Estoy recién empezando con php, (usaba ASP) asi que disculpen si sólo pregunto cabezas de pescao .

Un saludo y muchas gracias

pd: el manual de PHP al que te refieres es el que está en www.php.net?
  #4 (permalink)  
Antiguo 23/02/2003, 00:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En un primer instante $row tiene el valor del primer registro q encuente en la consulta realizada (ya te comenté que mysql_fetch_xxxx al llamarse/ejecutarse obtiene el registro si lo puede obtener da TRUE y si no FALSE .. )

A su vez .. el = en PHP es asignación .. mientras q == es comparación (y el === es igual valor y tipo de variable) ...

En el While ($row= ... se está asigunado el valor de llamar a la funcion mysql_fetch_xxxx a $row .. $row debería devolver "Array" si hay un registro disponible .. y FALSE si llegó al final de la consulta el puntero. (esto es como los data_seek .. obtiene el "recor-set" y mueve puntero hacia adelante automatico .. no hay q desplazarlo a mano .. Por lo menos en Mysql)

El manual de PHP oficial está en www.php.net/manual/en (la versión en ingles es la mas completa) .. Te recomiendo q si trabajas en windows te bajes la version CHM del manual (help de windows) ayuda mucho y es muyy util como buscador.

Por lo demas ..este foro PHP te habras dado cuenta q tiene unas FAQ's .. leelas .. en los primeros mensajes hay links hacia manuales, tutoriales de PHP y demas información útil.

Un saludo,
  #5 (permalink)  
Antiguo 23/02/2003, 00:24
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 17 años, 2 meses
Puntos: 3
muchísimas gracias cluster, no sabía lo de las diferencias de "="es y se me armó un lío. No me imaginé que se usara una asignación en la condición del while, de modo que si el valor de $row es "False" termina el bucle (en asp nunca me topé con algo así).

... y sí estuve viendo las Faqs, gracias a ellas conseguí el código que puse arriba, en desarrolloweb.com que tienen un buen manual para principiantes en español. También voy a bajar el manual tipo "help" para windows, seguro que está buenísimo y los seguiré molestando porsupuesto .

Un saludo y muchas gracias por la ayuda
  #6 (permalink)  
Antiguo 23/02/2003, 00:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Hay q ir poco a poco (es mi punto de vista) .. Tomatelo como un curso de programción en el q tu eres tu profesor .. Si ya sabes los conceptos de programación básicos (de ASP los debes de conocer) .. intenta con el manual de PHP oficial en la mano buscar esos conceptos.

Cada "concepto" implicaria un scripcito .. y así poco a poco y prestando atención a la "base" de todo el rollo ahí llegaras a Base de datos.

Se que es muy bonito (y mas si y has progamado en algun otro lenguaje "server-side" com ASP) .. tirarse "al ruedo" con Base de dtos y todo el rollo .. pero así te vendrán dudassss "existenciales" q se las hubieras resuelto con la "base" q has de ir leyendo sobre como trabaja PHP a nivel "variables, operadores .. funciones .. etc" ...

Hay un sitio q te gustará .. y mas si llegas de ASP a PHP xDD:
www.asp-php.net

Ahí encontraras algunas equivalencias de código ASP <-> PHP (es para q no vallas preguntando como se hace el response.write .. o el response.nosecuantos q todo el q llega de ASP a PHP entra preguntando jejeej ..en vez de usar el manual de PHP y vero como se lo hace PHP :PPP)

Un saludo,
  #7 (permalink)  
Antiguo 23/02/2003, 01:20
Avatar de Sir Matrix  
Fecha de Ingreso: octubre-2000
Ubicación: Dentro de mi cabeza. ono?
Mensajes: 1.264
Antigüedad: 17 años, 2 meses
Puntos: 3
exelentes consejos, intentaré seguirlos e ir comprendiendo más de cada detalle, aunque soy medio impaciente y atolondrado a veces y me voy a lo complicado al tiro. Ahí se me arma el caldo de cabeza .

Ya bajé el manual de php en formato chm y está muy claro y bueno, y lo usaré como guía. También vi la web asp-php.net y está buena (muy lindo diseño además), me complica el francés solamente .

Muchas gracias de nuevo
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 13:22.