Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Lista de checkboxes (https://www.clubdelphi.com/foros/showthread.php?t=33387)

[Gunman] 05-07-2006 17:50:56

Lista de checkboxes
 
Buenos dias, señores.
He hecho un documento PHP que me muestra una lista con todas las noticias que tengo en un servidor mysql. Bueno, al lado del nombre de cada noticia aparece un checkbox para seleccionar la noticia si se desea eliminar o editar. Aquí muestro el código que crea la lista:
Código PHP:

          $result=mysql_query("SELECT * FROM `news`");
          
$numrows=mysql_num_rows($result);
          
          
$news = array();
          for(
$i=0$i<$numrows$i++){
            
$id mysql_result($result$i"id");
            
$news array_pad($news$i+1"nw".$id);
            echo 
"<input name='".$news[$i]."' type='checkbox' id='".$news[$i]."' value='checkbox'> ";
            echo 
mysql_result($result$i"title")."<br>";
          } 

Explico el código del for que es el más lioso. Había pensado que cada checkbox se lamase 'nwID'. Por ejemplo, para la noticia con el ID 1 su checkbox se llamaría 'nw1', para la noticia 2: 'nw2' y así sucesivamente con todos los check boxes. Esto funciona perfectamente. Ahora viene mi duda...
Cómo puedo comprobar desde otro documento PHP que checkboxes hay seleccionados? yo había pensado de declarar una variable de tipo array global. ($news), que alberga el nombre de todos los checkboxes, después en el otro php recorrer todos los ítems de la variable $news i comprobar si estan activados. Pero... (y siempre hay un pero). No tengo ni cochina idea de como hacerlo.
Gracias.

D-MO 05-07-2006 19:01:19

No se si me equivoco, pero el valor que envian los checkbox son booleanos, de ser asi, esto podria funcionar:
Código PHP:

$tn=5;//total de noticias
for($i=0;$i<$tn;$i++){
  if(
$_POST["nw$i"]==true){
     ...
codigo...
  }


Saludos.

[Gunman] 05-07-2006 19:22:31

No se pk, pero cuando elimino más de un registro me da error.

D-MO 05-07-2006 19:25:24

Cita:

Empezado por [Gunman]
No se pk, pero cuando elimino más de un registro me da error.

¿Que error?, ¿Como los eliminas?, ¿Cual es el código?

Saludos.

[Gunman] 05-07-2006 20:23:39

Ya está listo...
Aquí pongo el código, por si se puede mejorar:
Código PHP:

if(isset($DeleteNews)){
        
$result=mysql_query("SELECT * FROM `news`");
        
$numrows=mysql_num_rows($result);
        
$i 0;
        
$t 0;        
        
$max $numrows;
        while(
$i<$numrows && $t<$max){
            
$id mysql_result($result$i"id");
            if(
$_POST["nw$id"]==true){
                
$result mysql_query("DELETE FROM `news` WHERE `id` = ".$id);
                if(
$result==1){
                  echo 
"<br>Notícia [".$id."] eliminada!";
                }else echo 
"<br>Error al eliminar la notícia!"
                
$result=mysql_query("SELECT * FROM `news`");
                
$numrows=mysql_num_rows($result);                
                
$i $i-1;                
            }
            
$i $i+1;
            
$t $t+1;
        }
    } 


D-MO 05-07-2006 21:59:33

Perfecto, lo único que creo conveniente agregarle sería que indicara que noticias no fueron eliminadas, se que ya muestra este mensaje:"<br>Error al eliminar la notícia!", pero no indica el id de la noticia que no se pudo eliminar, lo cual podría hacerso con algo asi:"<br>Error al eliminar la notícia $id!"

Edicion:
Aún no he entendido el porque de la siguiente consulta:
Código PHP:

$result=mysql_query("SELECT * FROM `news`"); 

Saludos.

dec 05-07-2006 22:12:57

Hola,

Otro apunte al código que muestras, Gunman, sería el hecho de que no hay necesidad de solicitar todos los campos de todos los registros (SELECT * FROM) si únicamente vas a utilizar el campo "ID". ¿Para qué requerir entonces el resto de campos? Sobre todo cuando puedes hacerlo así: "SELECT ID FROM...".

Algo similar ocurre con la consulta posterior. Si necesitas saber el número de noticias ("news") puedes hacer una consulta tal que así: "SELECT COUNT(*) FROM news", sin necesidad de traer ningún registro, puesto que sólo necesitas saber el número de los mismos y no nada más. ;)

[Gunman] 06-07-2006 01:25:00

Cita:

Empezado por dec
Hola,

Otro apunte al código que muestras, Gunman, sería el hecho de que no hay necesidad de solicitar todos los campos de todos los registros (SELECT * FROM) si únicamente vas a utilizar el campo "ID". ¿Para qué requerir entonces el resto de campos? Sobre todo cuando puedes hacerlo así: "SELECT ID FROM...".

Algo similar ocurre con la consulta posterior. Si necesitas saber el número de noticias ("news") puedes hacer una consulta tal que así: "SELECT COUNT(*) FROM news", sin necesidad de traer ningún registro, puesto que sólo necesitas saber el número de los mismos y no nada más. ;)

Bueno, yo es que no se mucho de PHP y voy un poco a lo bestia. gracias por el apunte. así optimizo my scrip.

kayetano 06-07-2006 09:30:02

Hola

Perdonar por llegar tarde, el tema de los checks es mucho mas facil de lo que estáis haciendo, mexplico:

puedes crear la lista de checks de la siguiente forma:
Código PHP:

$query=mysql_query("SELECT * FROM `news`");
while ( 
$result mysql_fetch_array$query ) ) {
...
   echo 
"<intpu type='checkbox' value=1 name='nw["$result['id'] ."]'>"
....


Solo pongo la parte del check y un bucle mas mejor, como puedes ver paso paso del "for" y del "mysql_result".

Ahora cuando mandes el formulario se genera un array con llamado "nw[]" que como indice lleva el identificador de tu noticia, ahora solo queda recorrerlo:
Código PHP:

foreach ( $_POST["rw"] AS $k => $v ) { // $k es el indice y $v el valor que siempre será 1
......


Como solo se envían los checks que se han marcado no hace falta que pongas ningún tipo de "if"

dec 06-07-2006 13:59:27

Hola,

Cita:

Empezado por Gunman
Bueno, yo es que no se mucho de PHP y voy un poco a lo bestia. gracias por el apunte. así optimizo my scrip.

Fíjate, Gunman, que lo que he referido no tiene que ver con PHP, sino con MySQL. Incluso diría que con SQL, así, en general.


La franja horaria es GMT +2. Ahora son las 08:52:50.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi