Abril 24, 2018, 10:34:10 am

Autor Tema: [ + ] Manual de PHP... Todo lo que Nececitas para aprenderlo  (Leído 66901 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #15 en: Febrero 10, 2008, 10:03:07 am »
Lectura de un archivo de texto.

Para la lectura de un archivo de texto contamos con la función fgets. Además debemos habrir el archivo para lectura.

Para mostrar por pantalla el contenido del archivo "datos.txt" creado en el punto anterior tenemos el siguiente programa:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
  $ar
=fopen("datos.txt","r") or
    die(
"No se pudo abrir el archivo");
  while (!
feof($ar))
  {
    
$linea=fgets($ar);
    
$lineasalto=nl2br($linea);
    echo 
$lineasalto;
  }
  
fclose($ar);
  
?>

</body>
</html>


Lo primero que debemos identificar es la forma de apertura del archivo:

  $ar=fopen("datos.txt","r") or
  die("No se pudo abrir el archivo");

El segundo parámetro de fopen es "r" es decir read (apertura para lectura), si el archivo no existe por ejemplo se ejecuta la función die que finaliza el programa mostrando el string correspondiente.
La función feof retorna true si se ha llegado al final del archivo en caso contrario retorna false. Para que se impriman todas las líneas del archivo se plantea una estructura repetitiva que se ejecuta mientras no se llegue al final de archivo:

  while (!feof($ar))

Dentro de la estructura repetitiva leemos una línea completa del archivo de texto con la función fgets:

  $linea=fgets($ar);

La variable $linea contiene una línea completa del archivo de texto, inclusive el salto de línea (\n)
Como el navegador no hace un salto de línea con este caracter, debemos convertir dicho caracter a la marca <br> propia de HTML. La función que realiza esta actividad se llama nl2br (new line to br)
El resultado se almacena en una nueva variable que es la que realmente imprimimos:

  $lineasalto=nl2br($linea);
  echo $lineasalto;
« Última modificación: Febrero 10, 2008, 10:35:45 am por carlmycol »
Pregúntate: ¿Qué estás dispuesto a sacrificar por alcanzar tus objetivos?

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #16 en: Febrero 10, 2008, 10:04:39 am »
Vectores (asociativos)

Este tipo de vectores no es común a otros lenguajes, pero en PHP son de uso indispensable en distintas situaciones (ya lo empleamos cuando recuperamos información de un formulario accediendo al vector $_REQUEST que crea PHP en forma automática, cuando accedamos a datos de una base de datos también lo emplearemos etc.)
Un vector asociativo permite acceder a un elemento del vector por medio de un subíndice de tipo string.

Inicialmente uno piensa que esto nos complica las cosas, como veremos más adelante la realidad nos demuestra lo contrario.
Como ejemplo, consideremos que deseamos guardar en un vector el DNI, nombre y dirección de una persona. Empleando un vector con subíndice entero la solución sería:

Código: You are not allowed to view links. Register or Login
<?php
$registro
[]="20456322";
$registro[]="Martinez Pablo";
$registro[]="Colon 134";
?>

De esta forma debemos recordar que cuando deseamos mostrar el nombre de la persona debemos acceder al subíndice 1. Esto es sencillo si tenemos un vector con tres elementos, pero que sucede si debemos almacenar 20 datos relacionados en un vector?

Un vector asociativo se define de la siguiente forma:

Código: You are not allowed to view links. Register or Login
<?php
$registro
['dni']="20456322";
$registro['nombre']="Martinez Pablo";
$registro['direccion']="Colon 134";
echo 
$registro['nombre'];
?>

Ahora vemos que para imprimir el nombre de la persona no debemos recordar una posición dentro de un vector sino un nombre de clave. Esto se hace indispensable cuando administramos un conjunto de datos grandes.
En un vector asociativo toda componente está asociada a una clave.

Otras formas de crear un vector asociativo:

Código: You are not allowed to view links. Register or Login
<?php
$registro
=array('dni'=>'20456322',
                
'nombre'=>'Martinez Pablo',
                
'direccion'=>'Colon 134');
echo 
$registro['dni'];
?>
« Última modificación: Febrero 10, 2008, 10:36:16 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #17 en: Febrero 10, 2008, 10:05:16 am »
Funciones en PHP

La sintaxis para la definición de una función en PHP es:

function [nombre de la función]([parámetros])
{
[algoritmo]
}

Implementaremos una función que muestre un mensaje centrado en patalla, y la llamaremos posteriormente dos veces:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
function mensajecentrado($men)
{
  echo 
"<table width=\"100%\" border=\"1\">";
  echo 
"<tr><td align=\"center\">";
  echo 
$men;
  echo 
"</tr></td>";
  echo 
"</table>";
}

mensajecentrado("Primer recuadro");
echo 
"<br>";
mensajecentrado("Segundo recuadro");
?>

</body>
</html>
 

Para mostrar el texto centrado en un recuadro utilizamos la marca table de HTML. Definimos las propiedades border con 1, para que sea visible y el ancho de 100% para que ocupe todo el navegador. La tabla tiene una fila a la que definimos con la marca tr (table row) y un solo dato en esa fila mediante la marca td (table data).
Para que el texto dentro de la tabla salga centrado, inicializamos la propiedad align de la marca td.
Si vemos la función, notamos que lo más trabajoso es definir todas las marcas HTML para crear la tabla. Es importante notar que en PHP para introducir las dobles comillas dentro de un string debemos antecederle el caractér ' \'; para introducir el caracter ' \' debemos tipear \\.
Las llamadas a la función las hacemos por medio de su nombre y pasándole el único parámetro que requiere:

mensajecentrado("Primer recuadro");
echo "<br>";
mensajecentrado("Segundo recuadro");

Las funciones nos permiten tener un programa más ordenado y facilitan la reutilización del código. Más adelante veremos como hacer archivos con rutinas comunes a muchas páginas.


Una función puede retornar un dato, supongamos que necesitamos una función que nos retorne el promedio de dos valores, el código sería:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>

<?php
function retornarpromedio($valor1,$valor2)
{
  
$pro=$valor1/$valor2;
  return 
$pro;
}

$v1=100;
$v2=50;
$p=retornarpromedio($v1,$v2);
echo 
$p;
?>


</body>
</html>


Cuando una función retorna un dato debemos emplear la palabra clave return seguida del valor que devuelve.
En la llamada a la función el valor retornado se almacena generalmente en una variable:

$p=retornarpromedio($v1,$v2);

Si queremos que retorne más de un dato debemos emplear parámetros por referencia.
Supongamos que necesitamos ahora que una función nos retorne el cuadrado y cubo de un número:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
function cuadradocubo($valor,&$cuad,&$cub)
{
  
$cuad=$valor*$valor;
  
$cub=$valor*$valor*$valor;
}
cuadradocubo(2,$c1,$c2);
echo 
"El cuadrado de 2 es:".$c1."<br>";
echo 
"El cubo de 2 es:".$c2;
?>

</body>
</html>


Es decir, cuando le antecedemos el caractér ampersand al parámetro, es por referencia. El objetivo es asignarle cierto valor al parámetro y posteriormente el dato quedará almacenado en la variable que le pasamos a la función.

function cuadradocubo($valor,&$cuad,&$cub)
{
  $cuad=$valor*$valor;
  $cub=$valor*$valor*$valor;
}

El parámetro $cuad se almacena en la variable $c1 y el parámetro $cub se almacena en $c2. Es la forma más adecuada de modificar variables dentro de una función.
« Última modificación: Febrero 10, 2008, 10:37:08 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #18 en: Febrero 10, 2008, 10:07:33 am »
Base de datos (MySQL)

Uno de los empleos principales de PHP es el acceso a una base de datos en el servidor. Las operaciones básicas se hacen empleando como lenguaje el SQL.
PHP implementa distintas funciones según la base de datos a emplear. Existen funciones actualmente para acceder a las siguientes servidores de bases de datos:
- MySQL
- Microsoft SQL Server
- Oracle
- PostgreSQL
- SysBase
- FrontBase
- Informix
- InterBase
- Ingres
- mSQL
- dBase
- SQLlite
El más empleado en la actualidad en la web es el gestor de base de datos MySQL (debido que cuando se lo emplea sin fines de lucro se puede emplear el software en forma gratuita).

Yo, en este servidor, he creado una base de datos llamada phpfacil (por razones de seguridad no he permitido la creación de nuevas bases de datos, luego usted podrá instalar en su equipo el mysql y dispondrá de todos los permisos para la creación de bases de datos).

Nombre de la base de datos: phpfacil

También he creado una tabla llamada: alumnos
La estructura de la misma es:

Código: You are not allowed to view links. Register or Login
CREATE TABLE alumnos (
  codigo int(11) NOT NULL auto_increment,
  nombre varchar(40) default NULL,
  mail varchar(50) default NULL,
  codigocurso int(11) default NULL,
PRIMARY KEY (`codigo`)

La tabla almacenará datos de alumnos que desarrollarán cursos de programación en PHP, ASP y JSP.
El código del alumno es de tipo numérico (int) y al indicar que es auto_increment se generará automáticamente por el gestor de base de datos.
Los campos nombre y mail son de tipo varchar (podemos almacenar cualquier caracter) y por últmo el campo codigocurso representa el curso a tomar por el alumno (1=PHP, 2=ASP y 3=JSP)
El campo clave de esta tabla es el código de alumno (es decir no podemos tener dos alumnos con el mismo código, no así el nombre del alumno que puede eventualmente repetirse)
« Última modificación: Febrero 10, 2008, 10:37:44 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #19 en: Febrero 10, 2008, 10:10:40 am »
INSERT (Alta de registros en una tabla)

Luego de crear una base de datos y sus tablas (como dijimos, en este servidor vamos a trabajar con una base de datos ya creada: phpfacil, que contiene la tabla alumnos), veremos como agregar registros.

Para añadir datos en la tabla empleamos el comando SQL llamado insert.
Necesitamos dos páginas para este proceso, una será el formulario de carga de datos y la siguiente será la que efectúe la inserción en la tabla.

Formulario de carga de datos:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<h1>Alta de Alumnos</h1>
<form action="pagina2.php" method="post">
Ingrese nombre:
<input type="text" name="nombre"><br>
Ingrese mail:
<input type="text" name="mail"><br>
Seleccione el curso:
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>
<br>
<input type="submit" value="Registrar">
</form>
</body>
</html>

El formulario es bastante similar a los que venimos desarrollando en puntos anteriores, tal vez lo distinto es cómo emplearemos el control "select" del curso a desarrollar:

Código: You are not allowed to view links. Register or Login
<select name="codigocurso">
<option value="1">PHP</option>
<option value="2">ASP</option>
<option value="3">JSP</option>
</select>

Cada opción tiene su respectivo valor (en este caso los números 1,2 y 3) y los textos a mostrar PHP, ASP y JSP. El dato que se envía a la otra página es el código de curso (esto debido a que definimos la propiedad value).

Ahora veremos como realizar la registración de los datos cargados en el formulario, en la tabla alumnos de la base de datos phpfacil:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80"
  or die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la seleccion de la base de datos");
mysql_query("insert into alumnos(nombre,mail,codigocurso) values 
   ('
$_REQUEST[nombre]','$_REQUEST[mail]',$_REQUEST[codigocurso])"
   
$conexion) or die("Problemas en el select".mysql_error());
mysql_close($conexion);
echo 
"El alumno fue dado de alta.";
?>

</body>
</html>
 

Veamos los pasos para efectuar el alta en la tabla alumnos:

$conexion=mysql_connect("localhost","root","z80")
  or die("Problemas en la conexion");

La función mysql_connect se conecta a una base de datos de tipo MySql, el primer parámetro es la dirección donde se encuentra el gestor de base de datos (en este caso en el mismo servidor por lo que indicamos esto con "localhost), el segundo parámetro es el nombre de usuario de la base de datos ("root" en nuestro caso, que es el usuario por defecto que crea MySql para el administrador) y por último la clave del usuario (cuando yo instalé MySql definí como clave la cadena "z80").
En caso de hacer algún error en la llamada a la función la misma retorna false por lo que se ejecuta la instrucción seguida del operador or, en nuestro caso llamamos a la función die que detiene la ejecución del programa y muestra el mensaje por pantalla.

Paso seguido se selecciona una base de datos (ya que el gestor de base de datos puede administrar varias bases de datos):

mysql_select_db("phpfacil",$conexion) or
  die("Problemas en la seleccion de la base de datos");

A esta función le indicamos como primer parámetro el nombre de la base de datos con la que trabajaremos y como segundo parámetro la referencia que retornó la función mysql_connect.

El paso más importante es la codificación del comando SQL insert:

mysql_query("insert into alumnos(nombre,mail,codigocurso) values
   ('$_REQUEST[nombre]','$_REQUEST[mail]',$_REQUEST[codigocurso])",
   $conexion) or die("Problemas en el select".mysql_error());

La sintaxis del comando insert es bastante sencilla, indicamos el nombre de la tabla y los campos de la tabla a cargar. Luego debemos indicar en el mismo orden los valores a cargar en cada campo (dichos valores los rescatamos del formulario anterior).
Los campos de tipo varchar SQL requiere que encerremos entre comillas simples, esto sucede para el nombre y el mail; en cambio, para el codigocurso esto no debe ser así.
Otra cosa a tener en cuenta es que los subíndices de los vectores asociativos no deben ir entre simples comillas ya que se encuentran dentro de un string, sino se producirá un error.
En caso que MySql detecte un error, retorna false esta función, por lo que se ejecuta la instrucción posterior al or, es decir la función die que mostrará el error generado por MySql llamando a la función mysql_error().
Por último cerramos la conexion con la base de datos y mostramos un mensaje indicando que la carga se efectuó en forma correcta.
Tener en cuenta que el campo código se generó en forma automática.[/size][/quote]
« Última modificación: Febrero 10, 2008, 10:38:31 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #20 en: Febrero 10, 2008, 10:11:59 am »
Listado (selección de registros de una tabla)

Ahora veremos como recuperar los datos almacenados en la tabla alumnos de la base de datos phpfacil.
El programa que muestra los registros en una página es:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80"
  or  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion
  or  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select codigo,nombre, mail, codigocurso
                       from alumnos"
,$conexion) or
  die(
"Problemas en el select:".mysql_error());
while (
$reg=mysql_fetch_array($registros))
{
  echo 
"Codigo:".$reg['codigo']."<br>";
  echo 
"Nombre:".$reg['nombre']."<br>";
  echo 
"Mail:".$reg['mail']."<br>";
  echo 
"Curso:";
  switch (
$reg['codigocurso']) {
    case 
1:echo "PHP";
           break;
    case 
2:echo "ASP";
           break;
    case 
3:echo "JSP";
           break;
  }
  echo 
"<br>";
  echo 
"<hr>";
}
mysql_close($conexion);
?>

</body>
</html>

La primer parte es similar a lo visto hasta ahora, es decir nos conectamos a la base de datos y seleccionamos la base de datos phpfacil.
El comando SQL que nos permite recuperar datos de tablas se llama SELECT. Indicamos los campos a rescatar de la tabla y luego de la palabra clave from indicamos el nombre de la tabla:

Código: You are not allowed to view links. Register or Login
$registros=mysql_query("select codigo,nombre, mail, codigocurso
                       from alumnos",$conexion) or
  die("Problemas en el select:".mysql_error());

En caso de haber codificado incorrectamente, el comando SQL select la función mysql_query retorna false, por lo que se ejecuta el comando siguiente al operador or, es decir la función die.
Si el comando SQL es correcto, en la variable $registros se almacena una referencia a los datos rescatados de la tabla alumnos. Ahora debemos ir mostrando registro a registro los datos extraidos:

Código: You are not allowed to view links. Register or Login
while ($reg=mysql_fetch_array($registros))
Para rescatar registro a registro los datos obtenidos por el select debemos llamar a la función mysql_fetch_array. Esta función retorna un vector asociativo con los datos del registro rescatado, o false en caso de no haber más registros. Es decir que si retorna un registro se almacena en el vector $reg y la condición del while se valida como verdadero y pasa a ejecutarse el bloque del while:

Código: You are not allowed to view links. Register or Login
{
  echo "Codigo:".$reg['codigo']."<br>";
  echo "Nombre:".$reg['nombre']."<br>";
  echo "Mail:".$reg['mail']."<br>";
  echo "Curso:";
  switch ($reg['codigocurso']) {
    case 1:echo "PHP";
           break;
    case 2:echo "ASP";
           break;
    case 3:echo "JSP";
           break;
  }
  echo "<br>";
  echo "<hr>";
}

El bloque del while muestra el contenido del registro rescatado por la función mysql_fetch_array. Como vemos, para rescatar cada campo accedemos mediante el vector asociativo $reg indicando como subíndice un campo indicado en el select:$reg['codigo']
Cada vez que llamamos a la función mysql_fetch_array nos retorna el siguiente registro. Cuando debemos mostrar el curso mediante la instrucción switch, analizamos si tiene un 1,2 ó 3 y procedemos a mostrar el nombre del curso.
Para separar cada alumno en la página HTML llamamos disponemos la marca
Código: You are not allowed to view links. Register or Login
"<hr>"
Fin Segunda Parte
« Última modificación: Febrero 10, 2008, 10:39:09 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #21 en: Febrero 10, 2008, 10:14:20 am »
Inicio Tercera Parte

Consulta (selección de registros de una tabla)

El proceso de consulta de datos de una tabla es similar al del listado, la diferencia es que se muestra sólo aquel que cumple la condición por la que buscamos.
Haremos un programa que nos permita consultar los datos de un alumno ingresando su mail para su búsqueda. Tengamos en cuenta que no puede haber dos alumnos con el mismo mail, por lo que la consulta nos puede arrojar uno o ningún registro.
Debemos codificar un formulario para el ingreso del mail a consultar:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese el mail del alumno a consultar:
<input type="text" name="mail">
<br>
<input type="submit" value="buscar">
</form>
</body>
</html>
 

Por otro lado tenemos el archivo "pagina2.php" que se encarga de buscar el mail ingresado en el formulario:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or 
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select codigo,nombre, codigocurso
                       from alumnos where mail='
$_REQUEST[mail]'",$conexion) or
  die(
"Problemas en el select:".mysql_error());
if (
$reg=mysql_fetch_array($registros))
{
  echo 
"Nombre:".$reg['nombre']."<br>";
  echo 
"Curso:";
  switch (
$reg['codigocurso']) {
     case 
1:echo "PHP";
            break;
     case 
2:echo "ASP";
            break;
     case 
3:echo "JSP";
            break;
  }
}
else
{
  echo 
"No existe un alumno con ese mail.";
}
mysql_close($conexion);
?>

</body>
</html>

Lo más importante está en el comando select:

$registros=mysql_query("select codigo,nombre, codigocurso
                       from alumnos where mail='$_REQUEST[mail]'",$conexion) or
  die("Problemas en el select:".mysql_error());

Acá es donde con la clausula where seleccionamos sólo el registro que cumple con la condición que el mail sea igual al que ingresamos.
Como sólo puede haber un registro que cumpla la condición, llamamos a la función mysql_fetch_array en un if:

if ($reg=mysql_fetch_array($registros))

En caso de retornar un vector asociativo la condición del if se verifica como verdadera y pasa a mostrar los datos, en caso de retornar false se ejecuta el else.
« Última modificación: Febrero 10, 2008, 10:39:48 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #22 en: Febrero 10, 2008, 10:22:06 am »
DELETE (Baja de un registro en una tabla)

El objetivo de este punto es el borrado de un registro de una tabla. Para ello, implementaremos un algoritmo que solicite ingresar el mail de un alumno y posteriormente efectue su borrado.
La primera página es idéntica a la consulta, ya que debemos implementar un formulario que solicite la carga del mail del alumno:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese el mail del alumno a borrar:
<input type="text" name="mail">
<br>
<input type="submit" value="buscar">
</form>
</body>
</html>

Por otro lado tenemos el archivo "pagina2.php" que se encarga de buscar el mail ingresado en el formulario y en caso que exista se procede a borrarlo:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select codigo from alumnos
                       where mail='
$_REQUEST[mail]'",$conexion) or
  die(
"Problemas en el select:".mysql_error());
if (
$reg=mysql_fetch_array($registros))
{
  
mysql_query("delete from alumnos where mail='$_REQUEST[mail]'",$conexion) or
    die(
"Problemas en el select:".mysql_error());
  echo 
"Se efectuó el borrado del alumno con dicho mail.";
}
else
{
  echo 
"No existe un alumno con ese mail.";
}
mysql_close($conexion);
?>

</body>
</html>

En esta segunda página efectuamos dos llamadas a la función mysql_query, una para consultar si existe el mail ingresado y otra para efectuar el borrado del registro respectivo.
« Última modificación: Febrero 10, 2008, 10:40:24 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #23 en: Febrero 10, 2008, 10:23:29 am »
DELETE (Baja de todos los registros de una tabla)

Para borrar todos los registros de una tabla debemos llamar al comando delete de SQL sin disponer la cláusula where:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
mysql_query("delete from alumnos",$conexion) or
  die(
"Problemas en el select:".mysql_error());
echo 
"Se efectuó el borrado de todos los alumnos.";
mysql_close($conexion);
?>

</body>
</html>

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #24 en: Febrero 10, 2008, 10:50:19 am »
UPDATE (Modificación de un registro de una tabla)

De las actividades con tablas esta es la más larga. Vamos a resolverlo implementando tres páginas, la primera un formulario de consulta del mail de un alumno, la segunda otro formulario que nos permita cargar su mail modificado y la última registrará el cambio en la tabla.
El formulario de consulta del mail del alumno es similar a problemas anteriores:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese el mail del alumno:
<input type="text" name="mail"><br>
<input type="submit" value="buscar">
</form>
</body>
</html>


La segunda página es la más interesante y con conceptos nuevos:
Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select * from alumnos
                       where mail='
$_REQUEST[mail]'",$conexion) or
  die(
"Problemas en el select:".mysql_error());
if (
$reg=mysql_fetch_array($registros))
{
?>

  <form action="pagina3.php" method="post">
  Ingrese nuevo mail:
  <input type="text" name="mailnuevo" value="<?php echo $reg['mail'?>">
  <br>
  <input type="hidden" name="mailviejo" value="<?php 
  
echo $reg['mail'?>
">
  <input type="submit" value="Modificar">
  </form>
<?php
}
else
  echo 
"No existe alumno con dicho mail";
?>

</body>
</html>

Lo primero que podemos observar es que si el if se verifica verdadero se ejecuta un bloque que contiene código HTML:

Código: You are not allowed to view links. Register or Login
if ($reg=mysql_fetch_array($registros))
{
?>
  <form action="pagina3.php" method="post">
  Ingrese nuevo mail:
  <input type="text" name="mailnuevo" value="<?php 
echo $reg['mail'?>
">
  <br>
  <input type="hidden" name="mailviejo" value="<?php echo $reg['mail'?>">
  <input type="submit" value="Modificar">
  </form>
<?php
}

Es decir que podemos disponer bloques de PHP dispersos dentro de la página.
Otro concepto importante es como enviar el mail del primer formulario a la tercer página, esto se logra con los controles de tipo "hidden", este tipo de control no se visualiza en el formulario pero se envía al presionar el botón submit.
Si queremos que el control text se inicialize con el mail ingresado en el formulario anterior debemos cargar la propiedad value con dicho valor:

  <input type="text" name="mailnuevo" value="<?php echo $reg['mail'] ?>">

Por último la pagina3.php es la que efectúa la modificación de la tabla propiamente dicha. Con el mail ingresado en la pagina1.php, el mail modificado en la pagina2.php se efectúa el update.
Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("update alumnos
                         set mail='
$_REQUEST[mailnuevo]
                         where mail='
$_REQUEST[mailviejo]'",$conexion) or
  die(
"Problemas en el select:".mysql_error());
  echo 
"El mail fue modificado con exito";
?>

</body>
</html>

Tengamos en cuenta que el segundo formulario nos envía dos datos: $_REQUEST[mailnuevo] y $_REQUEST[mailviejo].

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #25 en: Febrero 10, 2008, 10:51:48 am »
INSERT (y consulta de otra tabla)

Ahora vamos a ver como resolver el problema del alta de un alumno seleccionando el curso de la tabla "cursos".
Es decir, el formulario de carga de datos no es HTML puro ya que debemos cargar el control "select" con los datos de la tabla cursos.
El código por lo tanto queda de la siguiente forma:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese nombre:
<input type="text" name="nombre"><br>
Ingrese mail:
<input type="text" name="mail"><br>
Seleccione el curso:
<select name="codigocurso">
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select codigo,nombrecur from cursos",$conexion) or
  die(
"Problemas en el select:".mysql_error());
while (
$reg=mysql_fetch_array($registros))
{
  echo 
"<option value=\"$reg[codigo]\">$reg[nombrecur]</option>";
}
?>

</select>
<br>
<input type="submit" value="Registrar">
</form>
</body>
</html> 

El algoritmo es similar a cuando trabajamos con una tabla, pero el control "select" lo cargamos con los datos de la tabla "cursos":

while ($reg=mysql_fetch_array($registros))
{
  echo "<option value=\"$reg[codigo]\">$reg[nombrecur]</option>";
}

Dentro del while generamos todas las opciones que contiene el "select" imprimiendo el campo nombrecur y asociando el campo codigo a la propiedad value(que es en definitiva el código que necesitamos rescatar en la otra página)

La página que efectúa el insert es exactamente la misma que vimos anteriormente:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la seleccion de la base de datos");
mysql_query("insert into alumnos(nombre,mail,codigocurso) values 
            ('
$_REQUEST[nombre]', '$_REQUEST[mail]',
             
$_REQUEST[codigocurso])"$conexion) or
  die(
"Problemas en el select".mysql_error());
mysql_close($conexion);
echo 
"El alumno fue dado de alta.";
?>

</body>
</html>

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #26 en: Febrero 10, 2008, 10:53:16 am »
Listado (selección de registros de varias tablas - INNER JOIN)

Ahora veremos como imprimir todos los alumnos inscriptos a los cursos junto al nombre del curso donde está inscripto. Los datos se encuentran en las tablas "alumnos" y "cursos".
Debemos aparear el código de curso de la tabla "alumnos" con el código de la tabla "cursos". El código del programa que hace esto es el siguiente:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select alu.codigo as codigo,nombre,mail,codigocurso, 
                         nombrecur 
                       from alumnos as alu
                       inner join cursos as cur on cur.codigo=alu.codigocurso"

                    
$conexion) or
  die(
"Problemas en el select:".mysql_error());
while (
$reg=mysql_fetch_array($registros))
{
  echo 
"Codigo:".$reg['codigo']."<br>";
  echo 
"Nombre:".$reg['nombre']."<br>";
  echo 
"Mail:".$reg['mail']."<br>";
  echo 
"Curso:".$reg['nombrecur']."<br>";
  echo 
"<hr>";
}
mysql_close($conexion);
?>

</body>
</html>

Hay varias cosas nuevas cuya sintaxis necesitamos analizar, la primera es como hacer el apareo con la tabla cursos:

   inner join cursos as cur on cur.codigo=alu.codigocurso",

Luego de las palabras claves inner join, indicamos la tabla que necesitamos aparear, podemos crear un alias de una palabra mediante la palabra clave as. En el resto de la consulta, en vez de indicar el nombre de la tabla, hacemos referencia al alias(generalmente un nombre más corto).
Seguidamente de la palabra clave on, indicamos los campos por los que apareamos las tablas, en nuestro caso el codigo de la tabla cursos con el codigocur de la tabla alumnos.
Otro punto a tener en cuenta es indicar en el select qué campos debemos rescatar de las tablas, es decir, indicarle a qué tabla pertenece en el caso que tengan el mismo nombre:

$registros=mysql_query("select alu.codigo as codigo,nombre,mail,codigocurso,
                         nombrecur
                       from alumnos as alu

En este caso rescatamos el código del alumno (y no el código de curso). Debemos crear un alias si dos tablas tienen el mismo nombre de campo para evitar confusión; como ocurre aquí con el campo codigo de las tablas alumnos y cursos. También creamos un alias para la tabla alumnos. Cuando rescatamos los datos y los mostramos en la página, hacemos referencia al alias del campo:

Código: You are not allowed to view links. Register or Login
while ($reg=mysql_fetch_array($registros))
{
  echo "Codigo:".$reg['codigo']."<br>";
  echo "Nombre:".$reg['nombre']."<br>";
  echo "Mail:".$reg['mail']."<br>";
  echo "Curso:".$reg['nombrecur']."<br>";
  echo "<hr>";
}

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #27 en: Febrero 10, 2008, 10:54:33 am »
Función count de SQL.

Cuando necesitamos saber la cantidad de registros que cumplen una condición podemos utilizar la función count, por ejemplo si deseamos conocer la cantidad de alumnos que hay en la tabla "alumnos" la codificación será la siguiente:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select count(*) as cantidad 
                         from alumnos"
,$conexion) or
  die(
"Problemas en el select:".mysql_error());
$reg=mysql_fetch_array($registros);
echo 
"La cantidad de alumnos inscriptos son :".$reg['cantidad'];
?>

</body>
</html>
 

En la sentencia select en vez de indicar los campos de la tabla, colocamos la llamada a la función count pasando como parámetro un asterisco y creando un alias para su posterior recuperación e impresión del dato:

$registros=mysql_query("select count(*) as cantidad
                         from alumnos",$conexion)

El select no tiene cláusula where ya que debemos contar todos los alumnos y no los de algún curso en particular.
La llamada a la función mysql_fetch_array se hace sin estructura condicional o repetitiva ya que sabemos que nos retornará un único registro (en realidad, un registro que tiene una sola columna llamada cantidad, en caso de estar vacía la tabla alumnos, se almacena cero en el alias cantidad):

$reg=mysql_fetch_array($registros);
« Última modificación: Febrero 10, 2008, 10:56:20 am por carlmycol »

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #28 en: Febrero 10, 2008, 10:58:07 am »
UPDATE (Modificación de un registro trabajando con dos tablas)

Ahora complicaremos un poco la modificación de un registro consultando dos tablas. Supongamos que un alumno desea cambiarse de curso, es decir, se inscribió en uno y quiere borrarse de ese e inscribirse en otro diferente. Debemos mostrar en un "select" el curso actual en el que está inscripto y los otros cursos disponibles en la tabla "cursos". Para resolver este problema tenemos que plantear tres páginas, una donde ingresemos el mail del alumno, la segunda donde se pueda cambiar el curso y por última una que permita modificar la tabla "alumnos" con el nuevo curso seleccionado.

La primer página de ingreso del mail es:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<form action="pagina2.php" method="post">
Ingrese el mail del alumno:
<input type="text" name="mail"><br>
<input type="submit" value="buscar">
</form>
</body>
</html> 

La segunda página y la más importante en cuanto a novedades es la siguiente:

Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select * from alumnos
                       where mail='
$_REQUEST[mail]'",$conexion) or
  die(
"Problemas en el select:".mysql_error());
if (
$regalu=mysql_fetch_array($registros))
{
?>

<form action="pagina3.php" method="post">
<input type="hidden" name="mailviejo" value="<?php 
  
echo $regalu['mail'?>
">
<select name="codigocurso">
<?php
  $registros
=mysql_query("select * from cursos",$conexion) or
    die(
"Problemas en el select:".mysql_error());
  while (
$reg=mysql_fetch_array($registros))
  {
  if (
$regalu['codigocurso']==$reg['codigo'])
    echo 
"<option value=\"$reg[codigo]\" selected>$reg[nombrecur]</option>";
  else
    echo 
"<option value=\"$reg[codigo]\">$reg[nombrecur]</option>";
  }
?>

</select>
<br>
<input type="submit" value="Modificar">
</form>
<?php
}
else
  echo 
"No existe alumno con dicho mail";
?>

</body>
</html>

La primera consulta de la tabla alumnos es para verificar si existe un alumno con el mail ingresado por teclado:

Código: You are not allowed to view links. Register or Login
$registros=mysql_query("select * from alumnos
                       where mail='$_REQUEST[mail]'",$conexion) or
  die("Problemas en el select:".mysql_error());
if ($regalu=mysql_fetch_array($registros))
{

En caso de existir un alumno con dicho mail, el if se verifica verdadero y pasamos a poblar el control select con los distintos cursos que contiene la tabla "cursos":
Código: You are not allowed to view links. Register or Login
  $registros=mysql_query("select * from cursos",$conexion) or
    die("Problemas en el select:".mysql_error());
  while ($reg=mysql_fetch_array($registros))
  {
  if ($regalu['codigocurso']==$reg['codigo'])
    echo "<option value=\"$reg[codigo]\" selected>$reg[nombrecur]</option>";
  else
    echo "<option value=\"$reg[codigo]\">$reg[nombrecur]</option>";
  }
?>
</select>

Para que aparezca seleccionado el curso actual debemos inicializar lo marca option con el texto selected. Es decir que el if dentro del while se verifica verdadero una solo vez.

Por último la tercer página procede a registrar el cambio en la tabla "alumnos":

Código: You are not allowed to view links. Register or Login
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("update alumnos
                       set codigocurso=
$_REQUEST[codigocurso]
                       where mail='
$_REQUEST[mailviejo]'",$conexion) or
  die(
"Problemas en el select:".mysql_error());
echo 
"El curso fue modificado con exito";
?>

</body>
</html>

Desconectado carlmycol

  • Yo vivo en CPH
  • ***
  • Mensajes: 1357
  • Sexo: Masculino
    • Ver Perfil
Re: Manual de PHP... Todo lo que Nececitas para aprenderlo By Carlmycol
« Respuesta #29 en: Febrero 10, 2008, 10:59:48 am »
Cláusula Group By de SQL.

Entre las muchas posibilidades que nos brinda SQL, una es agrupar registros y obtener información resumida de tablas.
En nuestro problema, un listado interesante sería mostrar la cantidad de alumnos inscriptos por curso. Para resolver de una manera sencilla esta situación, SQL nos permite agrupar los registros de la tabla "alumnos" por la columna "codigocurso" y contar la cantidad de registros que hay por cada código de curso igual.
El programa que nos permite resolver este problema es el siguiente:
Código: You are not allowed to view links. Register or Login
<html>
<head>
<title>Problema</title>
</head>
<body>
<?php
$conexion
=mysql_connect("localhost","root","z80") or
  die(
"Problemas en la conexion");
mysql_select_db("phpfacil",$conexion) or
  die(
"Problemas en la selección de la base de datos");
$registros=mysql_query("select count(alu.codigo) as cantidad, 
                         nombrecur from alumnos as alu
                       inner join cursos as cur on cur.codigo=alu.codigocurso
                       group by alu.codigocurso"
$conexion) or
  die(
"Problemas en el select:".mysql_error());
while (
$reg=mysql_fetch_array($registros))
{
  echo 
"Nombre del curso:".$reg['nombrecur']."<br>";
  echo 
"Cantidad de inscriptos:".$reg['cantidad']."<br>";
  echo 
"<hr>";
}
mysql_close($conexion);
?>

</body>
</html>
Hay varias partes importantes en este código; primero, en el select indicamos que cuente la cantidad de registros de la tabla "alumnos":

"select count(alu.codigo) as cantidad,
                         nombrecur from alumnos as alu

Pero, como veremos más adelante, en 'cantidad' no se almacena la cantidad total de registros de la tabla "alumnos" debido a que más adelante empleamos la cláusula group by.
Como necesitamos rescatar el nombre del curso hacemos el apareo con la tabla "cursos":

   inner join cursos as cur on cur.codigo=alu.codigocurso

Por último en la sentencia select de SQL disponemos la cláusula group by:

   group by alu.codigocurso"

Con esta cláusula se hace un corte de control por cada grupo de registros que tienen el mismo código de curso almacenado.
Luego mostramos el nombre de curso con la cantidad de inscriptos para dicho curso:

Código: You are not allowed to view links. Register or Login
while ($reg=mysql_fetch_array($registros))
{
  echo "Nombre del curso:".$reg['nombrecur']."<br>";
  echo "Cantidad de inscriptos:".$reg['cantidad']."<br>";
  echo "<hr>";
}


xx
manual de reparacion y liberacion de celulares..todo para que ustedes aprendan

Iniciado por rivpab

0 Respuestas
2646 Vistas
Último mensaje Julio 06, 2008, 06:00:36 pm
por rivpab
exclamation
MANUAL: Segundo manual de "Todo con la IP" By RaKi0N

Iniciado por RaKi0N

9 Respuestas
2626 Vistas
Último mensaje Agosto 02, 2007, 12:22:22 pm
por RaKi0N
exclamation
MANUAL: Todo sobre Brutus... By RaKi0N

Iniciado por RaKi0N

19 Respuestas
16143 Vistas
Último mensaje Mayo 22, 2008, 12:39:01 pm
por pixma
thumbup
[Manual] Proteger todo tipo de archivos

Iniciado por messerschmitt

4 Respuestas
1553 Vistas
Último mensaje Marzo 24, 2009, 09:55:43 am
por c4x30x
xx
Manual : bat , sfx , troyano,excusa, todo oculto.

Iniciado por Artificiero

8 Respuestas
3512 Vistas
Último mensaje ſeptiembre 25, 2007, 10:29:25 am
por WebStar
xx
Diseñar para lo más probable y no para todo lo posible

Iniciado por shevchenko

0 Respuestas
1041 Vistas
Último mensaje Abril 09, 2009, 10:57:19 am
por shevchenko
xx
saludo a todo solo queria saber como saco els erver d un troyano manual

Iniciado por ___hdp___

1 Respuestas
1182 Vistas
Último mensaje Noviembre 16, 2009, 07:56:09 pm
por TokioDrift
resuelto
De Aldebaran_Taurus ..... Nyx para todo CPH

Iniciado por Nyx

7 Respuestas
1686 Vistas
Último mensaje Diciembre 31, 2009, 05:25:53 pm
por HolyKnight
angry
AYUDA PARA EDITAR TODO EN UNO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Iniciado por makydark

3 Respuestas
2017 Vistas
Último mensaje Octubre 23, 2007, 11:53:59 am
por makydark
xx
Todo para aprender Batch

Iniciado por hzury

0 Respuestas
2928 Vistas
Último mensaje ſeptiembre 07, 2008, 07:21:28 pm
por hzury