Foros del Web » Programando para Internet » PHP »

Como hacer este while??

Estas en el tema de Como hacer este while?? en el foro de PHP en Foros del Web. Hola amigos: Estoy haciendo un sistema de noticias, con una sola tabla: Código: CREATE TABLE `noticias` ( `noticiasid` int(11) NOT NULL auto_increment, `dtime` datetime default ...
  #1 (permalink)  
Antiguo 06/12/2005, 15:48
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Como hacer este while??

Hola amigos:
Estoy haciendo un sistema de noticias, con una sola tabla:
Código:
CREATE TABLE `noticias` (
  `noticiasid` int(11) NOT NULL auto_increment,
  `dtime` datetime default NULL,
  `categoria` varchar(255) default NULL,
  `titulo` varchar(255) default NULL,
  `text1` text,
  `text2` text,
  `imagen` varchar(50) default NULL,
  PRIMARY KEY  (`noticiasid`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Uno se los archivos del sistema es para editar una noticia, este es el formulario, como van a poder ver las categorias no las muestros con while, sino que las escribi una por una yo, el problema es que necesito que me muestre todas las categorias con un while y aparezca seleccionada la que corresponda. El while me va a servir para poder crear y borrar categorias de forma dinamica y que me aparezcan los cambios en el menu desplegable.....GRACIAS POR SU AYUDA!!!
Código PHP:
<form method="post" action="<?php echo $PHP_SELF ?>" name="formulario">
  <table width='100%' border='0' cellpadding="0" cellspacing="2">
    <tr> 
      <td><a href=admin.php>Admin</a> | <a href="administrar_imagenes.php">Administrar 
        imagenes</a> 
        <hr size="1">
      </td>
    </tr>
  </table>
  <input type="hidden" name="noticiasid" value="<? echo $myrow['noticiasid']?>">
  Categoria: <br>
  <select name="categoria">
    <option selected><? echo $categoria?></option>
    <option>arq_habitacional</option>
    <option>arq_hospitalaria_y_educacional</option>
    <option>arq_industrial</option>
    <option>novedades_institucionales</option>
    <option>obras_de_ing_y_saneamiento</option>
    <option>obras_en_construccion</option>
    <option>proyectos_y_desarrollos</option>
    <option>servicios_de_ingenieria</option>
    <option>servicios_en_desarrollo</option>
  </select>
  <br>
  Titulo: <br>
  <input name="titulo" size="40" maxlength="255" value="<? echo $titulo?>">
<br>
  Texto:<br>
  <textarea name="text1"  rows="7" cols="30"><? echo $text1?></textarea>
  <br>
  Imagen: <br>
  <?
$directorio 
'imagenes' //aqui se coloca el directorio q queremos listar
$dir opendir("$directorio") ; //aqui se abre el directorio
echo "<select name=imagen onChange= showimage()> ";
echo 
"<option selected>$imagen</option>";
while (
$file readdir($dir)) { //aqui es donde leemos el directorio
if ($file != "." && $file != "..") { //esto es para que no nos muestre la salida a "atras"
echo "<option value=$file>$file</option>";
}
}
echo
" </select>";
closedir($dir); //aqui cerramos la carpeta
echo"<br><img src=imagenes/$imagen name=imagen onError=this.onerror='null';this.src='blanco.gif'>"//aqui se mostraran nuestras imagenes seleccionadas
?> <br>
  <!--Para poner ampliada la noticia se debe poner este campo oculto como visible --> 
  <input type="hidden" name="text2">
  <br>
<input type="submit" name="submit" value="Editar">
</form>

Última edición por jam1138; 07/12/2005 a las 05:47
  #2 (permalink)  
Antiguo 06/12/2005, 16:14
 
Fecha de Ingreso: julio-2005
Ubicación: Mexico
Mensajes: 140
Antigüedad: 12 años, 5 meses
Puntos: 0
Hola es algo como esto, disculpa que no escriba el codigo completo pero ahi te va la idea;
Código:
<select>
<?
while ($row = mysql_fetch_assoc($rs)){
  if ($row['cat'] == $categoria) 
   echo '<option value = "'.$row['cat'].'" selected>'.$row[cat].' </option>';
  else
    echo '<option value = "'.$row['cat'].'">'.$row[cat].' </option>';
}
?>
</select>
donde $categoria es el valor que ya cachaste de la noticia ojo : tienes que tener un catalogo de categorias para hacer el While. Cualquier duda Aqui estamos
__________________
SELECT * FROM LA_VIDA
  #3 (permalink)  
Antiguo 06/12/2005, 16:43
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
No me funciono

No se si hice algo mal pero no me muestra nada, puse el codigo para que la ayuda se aplique segun lo que tengo. Aclaro que el while lo necesito hacer con el item categoria que esta en la misma tabla que el titulo, el texto, etc.
Dejo el codigo completo para que vean la sintaxis.
Agradezco su ayuda.
Código PHP:
<?php
include("config.php");

   if(
$submit)
  {
      
$categoria $_POST['categoria'];
      
$titulo $_POST['titulo'];
      
$text1 $_POST['text1'];
      
$text2 $_POST['text2'];
      
$imagen $_POST['imagen'];





         
$result mysql_query("UPDATE noticias SET categoria='$categoria', titulo='$titulo', text1='$text1', text2='$text2', imagen='$imagen' WHERE noticiasid='$noticiasid' ",$connect);

          echo 
"<b>Noticia editada<br>";
          echo 
"<meta http-equiv=Refresh content=0;url=admin.php>";
}
elseif(
$noticiasid)
{

        
$result mysql_query("SELECT * FROM noticias WHERE noticiasid='$noticiasid' ",$connect);
        while(
$myrow mysql_fetch_assoc($result))
             {
                
$categoria $myrow["categoria"];
                
$titulo $myrow["titulo"];
                
$text1 $myrow["text1"];
                
$text2$myrow["text2"];
                
$imagen$myrow["imagen"];
?>
<SCRIPT type="text/javascript">

function showimage() {
if (!document.images)
return
document.images.imagen.src=
'imagenes/' + document.formulario.imagen.options[document.formulario.imagen.selectedIndex].value
}
</SCRIPT>
<form method="post" action="<?php echo $PHP_SELF ?>" name="formulario">
  <table width='100%' border='0' cellpadding="0" cellspacing="2">
    <tr> 
      <td><a href=admin.php>Admin</a> | <a href="administrar_imagenes.php">Administrar 
        imagenes</a> 
        <hr size="1">
      </td>
    </tr>
  </table>
  <input type="hidden" name="noticiasid" value="<? echo $myrow['noticiasid']?>">
  Categoria: <br>
  <select name="categoria">
    <option selected><? echo $categoria?></option>
    <option>arq_habitacional</option>
    <option>arq_hospitalaria_y_educacional</option>
    <option>arq_industrial</option>
    <option>novedades_institucionales</option>
    <option>obras_de_ing_y_saneamiento</option>
    <option>obras_en_construccion</option>
    <option>proyectos_y_desarrollos</option>
    <option>servicios_de_ingenieria</option>
    <option>servicios_en_desarrollo</option>
  </select>
  <br>
  Titulo: <br>
  <input name="titulo" size="40" maxlength="255" value="<? echo $titulo?>">
<br>
  Texto:<br>
  <textarea name="text1"  rows="7" cols="30"><? echo $text1?></textarea>
  <br>
  Imagen: <br>
  <?
$directorio 
'imagenes' //aqui se coloca el directorio q queremos listar
$dir opendir("$directorio") ; //aqui se abre el directorio
echo "<select name=imagen onChange= showimage()> ";
echo 
"<option selected>$imagen</option>";
while (
$file readdir($dir)) { //aqui es donde leemos el directorio
if ($file != "." && $file != "..") { //esto es para que no nos muestre la salida a "atras"
echo "<option value=$file>$file</option>";
}
}
echo
" </select>";
closedir($dir); //aqui cerramos la carpeta
echo"<br><img src=imagenes/$imagen name=imagen onError=this.onerror='null';this.src='blanco.gif'>"//aqui se mostraran nuestras imagenes seleccionadas
?> <br>
  <!--Para poner ampliada la noticia se debe poner este campo oculto como visible --> 
  <input type="hidden" name="text2">
  <br>
<input type="submit" name="submit" value="Editar">
</form>
<?
              
}//end of while loop

  
}//end else
?>

Última edición por jam1138; 07/12/2005 a las 05:48
  #4 (permalink)  
Antiguo 07/12/2005, 06:56
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Que no repita

Perfecto pude hacer lo que necesitaba pero se puede que en el bucle no se repitan los elementos iguales????.

Asi quedo el codigo...
<select name="categoria">
<option selected><? echo $categoria; ?></option>
<?

// Muestro todos los tipos de contactos para armar la lista desplegable
$result = mysql_query("SELECT * FROM noticias order by categoria",$connect);
while($myrow = mysql_fetch_array($result))
{
echo "<option value=$myrow[categoria]>$myrow[categoria]</option>";
}
?>
</select>

En sintesis, con el while como esta veo TODOS los registros de categorias que coinciden con las noticias, y solo necesito categorias pero sin repetir.

Última edición por eximer; 07/12/2005 a las 07:19
  #5 (permalink)  
Antiguo 07/12/2005, 09:19
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 384
Antigüedad: 12 años, 10 meses
Puntos: 0
Pues la instruccion sql que evita las repiticiones es el DISTINCT. En tu codigo quedaria algo asi:

$result = mysql_query("SELECT DISTINCT categoria FROM noticias order by categoria",$connect);

Informate del DISTINCT :)
__________________
m!ketrix
CINE25 - Red Social de Cine
byinspiroh
  #6 (permalink)  
Antiguo 07/12/2005, 09:51
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
miketrix_esp MUCHISIMAS GRACIAS !!! me faltaba ese dato lo que queda lo completo yo...has sido de gran ayuda.
  #7 (permalink)  
Antiguo 07/12/2005, 10:01
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 384
Antigüedad: 12 años, 10 meses
Puntos: 0
Jeje de nada. Me alegro que te hayamos sido de ayuda, para eso estamos ;)
__________________
m!ketrix
CINE25 - Red Social de Cine
byinspiroh
  #8 (permalink)  
Antiguo 07/12/2005, 10:59
 
Fecha de Ingreso: julio-2005
Ubicación: Mexico
Mensajes: 140
Antigüedad: 12 años, 5 meses
Puntos: 0
Te recomiendo hacer un catalogo de categorias, esto es una tabla aparte para las categorias, esto facilita la programacion y evita automaticamente las repeticiones!!
__________________
SELECT * FROM LA_VIDA
  #9 (permalink)  
Antiguo 07/12/2005, 12:33
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Una cosita mas

Ya me muestra todo, y puedo cambiar sin problemas de categorias, pero:
1) Como hago para poder crear una nueva categoria manteniendo la posibilidad de seleccionar una existente.?
2) Cuando creo una categoria que tiene espacios en blanco entre las palabras por ej. "Ultimas novedades" y luego edito me sale "Ultimas"...como resuelvo el tema de los espacios en blanco.?
Gracias
  #10 (permalink)  
Antiguo 07/12/2005, 13:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
2) Cuando creo una categoria que tiene espacios en blanco entre las palabras por ej. "Ultimas novedades" y luego edito me sale "Ultimas"...como resuelvo el tema de los espacios en blanco.?
Gracias

Te has dejado comillas en casi todo el código HTML que generas. Debes respetarlas.

echo "<option value=\"$myrow[categoria]\">$myrow[categoria]</option>";

Por lo demás, es recomendable que en lugar de dar un "value" a ese "option" como el mismo nombre de la categoría que presentas en esa opción para seleccionar, que uses el "ID" de ese registro de categoría. Para eso, tendrás que tener una tabla anexa llamada "categoria" y de ahí a tu tabla de noticias sólo quedará el ID_categoria:

noticias
id_noticia
id_categoria
titulo_noticia
etc...

categorias
id_categoria
nombre_categoria

De esta forma .. normalizas tu Base de datos un paso más ... Te evitas hacer un "DISTINCT" para ver que "categorías" escribistes .. (te "salva" que fuerzas en el código los nombres de las mismas .. pero NO es lo óptimo, así no podras hacer fácimente grupos .. ni menos intentar ver la forma de tener categorías y sub-categorías si corresponde a N niveles de profundidad).

Un saludo,
  #11 (permalink)  
Antiguo 07/12/2005, 14:34
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Cluster

Tienes toda la razón con lo de forzar el sistema, lo que pasa es que voy problando y hasta donde lo necesito funciona, de todas formas veo que ya 2 personas me recomendaron esto de las dos tablas, asi que gracias...veo hasta donde llego con esto y empiezo con el otro.
Gracias nuevamente.
  #12 (permalink)  
Antiguo 07/12/2005, 14:46
 
Fecha de Ingreso: diciembre-2004
Mensajes: 103
Antigüedad: 13 años
Puntos: 0
Gracias

Cluster, funciono perfecto lo del punto 2 que consulte. Muchas gracias.
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 07:13.