Sistema de Noticias php+mysqli

El index.php

<?php include ("includes/conectar.php");?>
<!doctype html>
<html>
<head>
<meta charset="iso-8859-2">
<title>NOTICIAS :::.</title>
<link href="css/estilo.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="contenedor">
<?php
//include("conexion.php"); // Incluimos nuestro archivo de conexión con la base de datos
$categorias = mysqli_query($conexion,"SELECT * FROM categorias"); // Ejecutamos la consulta
echo '<a href="./">Inicio</a>';
while($columna = mysqli_fetch_assoc($categorias)) // Realizamos un bucle que muestre todas las noticias, utilizando while. 
	{ 
echo '&nbsp;|&nbsp;<a href="?categoria='.$columna['categoria'].'"><strong>'.$columna['categoria'].'</a>';
	} 


?>


<?php
//Obtenemos el grupo de noticias que están en una categoria, mediante el GET
if(isset($_GET['categoria'])) 
		{
	$categoria = mysqli_real_escape_string($conexion,$_GET['categoria']);
	$query = mysqli_query($conexion,"SELECT * FROM noticias WHERE categoria = '".$categoria."' "); // Ejecutamos la consulta
	$row = mysqli_num_rows($query);
		if ($row == 0){
	echo '<div align="center"><strong><h3>Esta Sección no tiene contenido</h3></strong></div>';
		exit;
		}
	$limite = 555; // Número de carácteres a mostrar antes de el "Leer más"
	while($row = $query->fetch_assoc()){ // Realizamos un bucle que muestre todas las noticias, utilizando while.
echo '<div class="separador"></div>';		
echo '<div id="contenedornoti">';
echo '<div class="flotar-de">';
echo '<h2 style="text-align: left;"><span style="font-weight: bold; text-shadow: rgba(23, 23, 23, 0.976563) 0px 0px 12px; font-size: 24px; color: #000000;">'.$row['titulo'].' </span></h2>'; 
echo '<span style="font-family: Arial; font-size: 13px; font-weight: bold; color: rgb(0, 0, 0); text-shadow: rgb(70, 46, 27) 0px 0px 6px;">'.substr($row['contenido'], 0, $limite).'';
echo '&nbsp;[...]<br><br></span>';
echo '<div id="separador"></div>';
echo '<a href="?id='.$row['id'].'"><img src="img/leer_mas.png" /></a></span></div>';
echo '<div class="flotar-iz">';
echo '<a href="uploads/'.$row['imagen'].'" rel="lightbox" >';
echo '<img src="thumb.php?src=uploads/'.$row['imagen'].'" class="foto" /></a></div></div>';
//echo '<img src="uploads/'.$row['foto'].'" class="foto" /></a></div></div>';
echo '<div class="separador"></div>';
	}
} else { 


if(isset($_GET['id'])) { 
if(!empty($_GET['id'])) { // Si el valor de "noticia" no es NULL, continua con el proceso 
$id = mysqli_real_escape_string($conexion,$_GET['id']); 
$query_noticias = mysqli_query($conexion, "SELECT * ,DATE_FORMAT(fecha,'%d-%m-%Y') AS fecha FROM noticias WHERE id = '".$id."'"); // Ejecutamos la consulta 
if(mysqli_num_rows($query_noticias) > 0) // Si existe la noticia, la muestra 
        { 
  while($row = mysqli_fetch_assoc($query_noticias)) // Realizamos un bucle que muestre todas las noticias, utilizando while. 
            { 
echo '<div id="contenedornoti">';
echo '<h1>'.$row['titulo'].'</h1>';
echo '<p>'.$row['fecha'].'&nbsp;/&nbsp;'.$row['categoria'].'</p><br>';
echo '<img src="uploads/'.$row['imagen'].'" />';
//echo nl2br("$row[contenido]");
echo '<p>'.$row['contenido'].'</p>';
echo '<a href="javascript:history.back();">Volver</a>';
include("comentarios.php");
echo '</div>';
echo '</div>';
			}		
		} else {
echo 'La noticia que solicitas, no existe. <br /> <a href="index.php">Volver</a>'; // Si no, muestra un error
		}
	} else {
echo 'Debes seleccionar una noticia. <br /> <a href="index.php">Volver</a>'; // Si GET no recibe ningún valor, muestra un error
	}
} else {


$query_noticias = mysqli_query($conexion, "SELECT *,DATE_FORMAT(fecha,'%d-%m-%Y, %h:%i:%s') AS fecha FROM noticias ORDER BY fecha DESC"); // Ejecutamos la consulta
$limite = 555; // Número de carácteres a mostrar antes de el "Leer más" nl2br
	while($row = mysqli_fetch_assoc($query_noticias)) // Realizamos un bucle que muestre todas las noticias, utilizando while.
	{
echo '<div id="contenedornoti">';
echo '<div class="flotar-de">';
echo '<span style="font-weight: bold; text-shadow: rgba(23, 23, 23, 0.976563) 0px 0px 12px; font-size: 24px; color: #000000;">'.$row['titulo'].'</span><br>';
echo '<p>'.substr($row['contenido'], 0, $limite).'&nbsp;&nbsp; [&nbsp;...&nbsp;]</p><br>';
echo '<a href="?id='.$row['id'].'">Leer más</a>&nbsp;|&nbsp;Publicado el:&nbsp;'.$row['fecha'].'&nbsp;En:&nbsp;'.$row['categoria'].'';
echo '</div>';
echo '<div id="separador"></div>';
echo '<div class="flotar-iz">';
echo '<a href="uploads/'.$row['imagen'].'" rel="lightbox">';
echo '<img src="thumb.php?src=uploads/'.$row['imagen'].'" class="foto" /></a></div>';
//echo '<img src="uploads/'.$row['foto'].'" class="foto" /></a></div>';
echo '</div>';
		}
	}
}
/* cerrar la conexión */
mysqli_close($conexion )
?>


</div>
</body>
</html>
Y el publicar.php

<?php
include ("includes/conectar.php");
?>




<!doctype html>
<html>
<head>
<meta charset="iso-8859-2">
<title>Publicar Noticia :::.</title>
<link href="css/estilo.css" rel="stylesheet" type="text/css">


</head>
<body>
<?php
$query = 'SELECT * FROM categorias';
$result = $conexion->query($query);
?>
<?php


if(isset($_POST['enviando'])){ // Si el boton de "anadir" fué presionado ejecuta el resto del código | $_POST['imagen']
    $titulo = $_POST['titulo']; // Recibimos el valor del <input name="titulo"... 
    $contenido = $_POST['contenido'];   // Recibimos el valor de la <textarea name="titulo"
    $fecha = $_POST['fecha'];
    $imagen = $ruta = $_FILES['imagen']['name'];
        echo $ruta;
   // if(!empty($titulo) && !empty($contenido) && !empty($imagen)  && !empty($fecha)){ // Comprobamos que los valores recibidos no son NULL 
    {
            if(is_uploaded_file($_FILES['imagen']['tmp_name'])) { // verifica haya sido cargado el archivo
$ruta= "uploads/".$_FILES['imagen']['name']; // Se guardaría dentro de "fotos" con el nombre original
// $ruta= "carpeta/nuevo_nombre.jpg"; si también se quiere renombrar
move_uploaded_file($_FILES['imagen']['tmp_name'], $ruta);
     if(move_uploaded_file($_FILES['imagen']['tmp_name'], $_FILES['imagen']['name'])) { // se coloca en su lugar final
echo "<b>Upload exitoso!. Datos:</b><br>";
echo "Nombre: <i><a href=\"".$_FILES['imagen']['name']."\">".$_FILES['imagen']['name']."</a></i><br>";
echo "Tipo MIME: <i>".$_FILES['imagen']['type']."</i><br>";
echo "Peso: <i>".$_FILES['imagen']['size']." bytes</i><br>";
echo '<br /><br /><a href="'.$_SERVER['PHP_SELF'].'">Refrescar p&aacute;gina</a><br /><br /></div>';
echo "<br><hr><br>";
        }
// }
        mysqli_query($conexion, "INSERT INTO noticias(id,titulo,contenido,categoria,imagen,fecha,ip)
        VALUES ('', '$_POST[titulo]', '$_POST[contenido]', '$_POST[categoria]', '$imagen', NOW(), '$_SERVER[REMOTE_ADDR]')");
        echo '<div align="center"<font color="green"><strong>Noticia generada con exito</strong></font></div><br>';
        echo '<a href="'.$_SERVER['PHP_SELF'].'">Refrescar p&aacute;gina</a>';
    
        }}}
//echo "</font>";
//    }


?>
<div id="contenedor">
<form action="" method="post" enctype="multipart/form-data" >
  Titulo:<br>
  <input name="titulo" size="100"><br><br>


  Contenido: <br> <textarea name="contenido" rows="15" cols="100"></textarea><br><br>


  Categoria: 
  <br>
<select name="categoria" id="categoria">
<?php echo '<option value="">Escoger de la Lista</option>';?>
<?php while ( $row = $result->fetch_array() ) { ?>
<option value=" <?php echo $row['categoria'] ?> " >
<?php echo $row['categoria']; ?>
</option>
<?php } ?>        
</select>
<br>
<br>
<br><input name="imagen" type="file" required id="imagen" class="button" />
<br>
<br>
<br>
<input name="enviando" type="submit" value="Publicar noticia">
<input type="reset" name="reset" id="reset" value="Restablecer">
</form>
</div>
</body>
</html>
El documento estilos.css

@charset "iso-8859-2";
/* CSS Document */




h1
{
	color: #000000;
	text-align: left;
	text-shadow: 1px 1px 2px #CCCCCC;
	font: bold 36px Baskerville, "Palatino Linotype", Palatino, "Century Schoolbook L", "Times New Roman", serif;
}
h2
{
	color: #003366;
	text-align: left;
	text-shadow: 1px 1px 2px #CCCCCC;
	font: bold 20px "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", Verdana, sans-serif;
}
h3
{
	color: #003366;
	font: bold 18px Arial;
	text-align: left;
	text-shadow: 1px 2px 4px #999999;
}
h4
{
	color: #003366;
	font: bold normal 16px Arial;
	text-align: left;
	text-shadow: 1px 2px 4px #666666;
}
p
{
	color: #000000;
	font-variant: normal;
	font-size: 14px;
	text-align: left;
	text-shadow: -2px 2px 5px #333333;
	text-indent: 18px;
}
/* Begin Additional CSS Styles */
#paginacion
{
	margin: 40px auto 25px;
	clear: both;
	color: #000000;
	padding-left: auto;
	padding-right: auto;
	text-shadow: 1px 1px 3px #CCCCCC;
}
.foto{
	background: #ccc;
	border: 5px solid white;
	position: relative;
	box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
	-moz-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
	-webkit-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
	padding-bottom: 0px;
	width: 140px;
	height: 140px;
	margin: 10px 5px 9px 0px;
}
.foto2{
	background: #ccc;
	border: 5px solid white;
	position: relative;
	box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
	-moz-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
	-webkit-box-shadow: 1px 4px 16px rgba(0, 0, 0, 0.80);
	width: auto;
	height: auto;
	margin: 5px auto 10px;
	bottom: 10px;
	top: 5px;
}
.recuadrofoto
	{
	border-collapse: separate;
	border: 5px solid #FFFFFF;
	background-color: #FFFFFF;
	-webkit-box-shadow: 1px 1px 3px 4px #CCCCCC;
	box-shadow: 1px 1px 3px 4px #CCCCCC;
	margin-bottom: 50px;
	border-radius: 5px;
	margin-right: auto;
	width: auto;
	height: auto;
	margin-left: auto;
	clear: none;
	float: none;
	display: table;
	}
#contenedornoti{
	width: 90%;
	text-align: justify;
	display: table;
	margin: 15px auto;
	height: auto;
	float: none;
	clear: both;
	border-collapse: separate;
	background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 0% , rgba(233,235,255,1.00)),color-stop( 100% , rgba(255,255,255,1.00)));
	background-image: -webkit-linear-gradient(270deg,rgba(233,235,255,1.00) 0%,rgba(255,255,255,1.00) 100%);
	background-image: linear-gradient(180deg,rgba(233,235,255,1.00) 0%,rgba(255,255,255,1.00) 100%);
	padding: 25px;
	border: thin dotted #003366;
	border-radius: 7px;
}
#contenedor{
	width: 70%;
	text-align: justify;
	display: table;
	margin: 15px auto;
	height: auto;
	float: none;
	clear: both;
	border-collapse: separate;
	border: thin solid #003366;
	border-radius: 9px;
	background-color: #FFFFFF;
	padding: 20px 30px 30px;
}
#contenedor3{
	width: 95%;
	text-align: justify;
	display: table;
	margin: 15px auto;
	height: auto;
	float: none;
	clear: both;
	border-collapse: separate;
	border: thin solid #CCCCCC;
	border-radius: 9px;
	background-color: #FFFFFF;
	padding: 20px 30px 30px;
}


.flotar-iz {
	float: left;
	margin: 15px 15px 20px auto;
	padding-top: 35px;
	padding-left: 40px;
}
.flotar-de {
	float: right;
	width: 74%;
	margin-bottom: 15px;
	margin-right: 15px;
	margin-top: 40px;
}
.separador
{
	width: 100%;
	height: 25px;
	margin: 25px auto;
}
.franjacomentarios
{
	width: 90%;
	height: auto;
	background-color: #CCCCCC;
	border-radius: 7px;
	color: #000000;
	font: bold 13px Arial;
	text-align: left;
	text-shadow: 1px 1px 2px #CCCCCC;
	padding: 20px;
}


/*****************************************
body
{
	background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 0% , rgba(161,161,161,1.00)),color-stop( 100% , rgba(195,195,195,1.00)));
	background-image: -webkit-linear-gradient(270deg,rgba(161,161,161,1.00) 0%,rgba(195,195,195,1.00) 100%);
	background-image: linear-gradient(180deg,rgba(161,161,161,1.00) 0%,rgba(195,195,195,1.00) 100%);
	background-repeat: repeat-y;
	background-attachment: fixed;
}
/****************************************
.registrarse{
	width: 20%;
	text-align: justify;
	display: table;
	float: none;
	clear: both;
	border-collapse: separate;
	border: thin solid #003366;
	border-radius: 9px;
	background-color: #FFFFFF;
	margin: 150px auto 15px;
	padding: 40px;
}
}


em {
    font-style:none;
    font-weight:bold;
}


a:link,a:visited,a:active {
    padding:5px;
    text-decoration:none;
    font-size:16px;
}


a:hover{
    color:white;
    background-color:#246DB5;
}


.content {
    text-align:left;
}


.content {
    background-color:white;
    width:400px;
    padding:20px;
    border:1px solid #CFCFCF;
    -moz-border-radius: 15px;
    -webkit-border-radius: 15px;
}


.messages {
    color:#246DB5;
}
***********************************/
.fecha
{
	color: #000000;
	font-family: Arial;
	font-weight: bold;
	text-align: left;
	text-indent: 15px;
}
.comentarios
{
	width: 70%;
	height: auto;
	margin-left: auto;
	margin-right: auto;
	padding: 35px;
	color: #000000;
	font: bold normal 13px Arial;
	text-align: left;
	text-shadow: 1px 2px 4px #666666;
	border-collapse: separate;
	border: thin dotted #CCCCCC;
	border-radius: 9px;
	background-color: #F4E39F;
	margin-bottom: 25px;
}
.formucomentarios
{
	width: 70%;
	height: auto;
	margin-left: auto;
	margin-right: auto;
	padding: 35px;
	color: #000000;
	font: bold normal 13px Arial;
	text-align: left;
	text-shadow: 1px 2px 4px #666666;
	border-collapse: separate;
	border: thin dotted #CCCCCC;
	border-radius: 9px;
	margin-bottom: 25px;
}
.nombre
{
	color: #003366;
	font: bold normal 16px Arial;
	text-align: left;
	text-shadow: 1px 2px 4px #666666;
}body
{
	color: #000000;
	font: normal 13px Arial;
	text-align: left;
	text-decoration: none;
	text-shadow: -1px 2px 4px #666666;
	background-image: -webkit-gradient(linear, 50.00% 0.00%, 50.00% 100.00%, color-stop( 21.76% , rgba(0,92,255,1.00)),color-stop( 100% , rgba(212,224,255,1.00)));
	background-image: -webkit-linear-gradient(270deg,rgba(0,92,255,1.00) 21.76%,rgba(212,224,255,1.00) 100%);
	background-image: linear-gradient(180deg,rgba(0,92,255,1.00) 21.76%,rgba(212,224,255,1.00) 100%);
	background-repeat: repeat;
	background-attachment: fixed;
}
Por si a alguien no le quedó claro, la base de datos noticias.sql tiene esta estructura:

--
-- Estructura de tabla para la tabla `categorias`
--




CREATE TABLE IF NOT EXISTS `categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `categoria` varchar(190) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ;




--
-- Estructura de tabla para la tabla `noticias`
--




CREATE TABLE IF NOT EXISTS `noticias` (
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `titulo` text NOT NULL,
  `contenido` text NOT NULL,
  `categoria` varchar(40) NOT NULL,
  `imagen` varchar(200) NOT NULL,
  `fecha` datetime NOT NULL,
  `ip` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=15 ;
Ahora sí :).

Revisé todo y está funcionando bien :P. Modifica, en el archivo conectar.php, la línea

error_reporting( 0 );

por

error_reporting( E_ALL );

Esto es para mostrar los errores que existen. Además debes prevenir la inyección SQL utilizando mysqli_real_escape u otras formas.
skaparate escribió:Ahora sí :).

Revisé todo y está funcionando bien :P. Modifica, en el archivo conectar.php, la línea

error_reporting( 0 );

por

error_reporting( E_ALL );

Esto es para mostrar los errores que existen. Además debes prevenir la inyección SQL utilizando mysqli_real_escape u otras formas.


OK, revisa, he corregido y modifiqué mi post de más arriba, sobre el index.php

Lo curioso es que me sigue dando problemas cuando clico las categorías, en el sentido que me sale la información publicada bajo una de ellas, pero no pasa nada con las otras. De veras no entiendo nada :mad:
Encontré tu problema: tu script es demasiado específico.

Cuando uno hace clic sobre "Deportes", se ejecuta esta consulta:

SELECT * FROM noticias WHERE categoria = 'Deportes'

Lo cual está bien. El problema es que en la base de datos, la categoría se llama _Deportes_, donde cada _ es un espacio, entonces MySQL está comparando una categoría llamada Deportes sin espacios, con una llamada _Deportes_ (nuevamente, reemplazando los _ por un espacio), por lo que no hay coincidencias. La solución es eliminar los espacios innecesarios al momento de crear una categoría y/o noticia (y también eliminar los espacios de los registros actuales).

Otra cosa que debes mejorar es la relación entre las tablas. La forma correcta debería ser así:

CREATE TABLE noticia (
  id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  /* otros datos */
);

CREATE TABLE categoria (
  id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,
  nombre ...
);

CREATE TABLE categoria_noticia (
  noticia_id INTEGER NOT NULL,
  categoria_id INTEGER NOT NULL
  PRIMARY KEY (noticia_id, categoria_id),
  FOREIGN KEY (noticia_id) REFERENCES noticia (id),
  FOREGIN KEY (categoria_id) REFERENCES categoria (id)
);

/* Este modelo sólo es válido si se piensa que una noticia puede tener más de una categoría y una categoría puede estar presente en más de una noticia. */

Esta forma es más compleja, pero es la forma correcta de hacerlo (no permite duplicados y permite la ampliación del sistema en el futuro). Aprende sobre el modelo de datos relacional para que entiendas lo que digo :).
Hola, amigo, Skaparate

Vale, he aplicado los cambios. Eso de los espacios, claro, increíble cómo un detalle como ése genea todo un problema. Los espacios están creo en el formulario. Algo a revisar.

Y lo de las bases de datos, sí, todavía estoy en pañales en mis conocimientos. Solo que no se cuál sería el uso de esa tabla categoría_noticia. Sorry por mi ignorancia, tengo mucho que aprender, todavía! [:)]
Yo sé que parece inútil, pero la verdad es que disminuye mucho la cantidad de datos guardados y por ende el tamaño de la base de datos.

El tener una tercera tabla para enlazar otras tablas se utiliza para impedir que se dupliquen los datos. Todo tiene sentido cuando se aprende a normalizar una base de datos.

El ejemplo más común es el de un usuario y su información de contacto. Hay dos formas de hacerlo:

Una tabla para todo

CREATE TABLE usuario (
  id PRIMARY KEY,
  nombre,
  apellido_paterno,
  apellido_materno,
  id_tributario,
  email,
  telefono,
  /* otros campos */
);

Lo anterior funciona sin problemas. Pero, ¿qué pasa cuando un usuario posee más de un email y/o teléfono? Tendría que duplicar la información del usuario tantas veces como emails y/o teléfonos tenga! Suponiendo que el usuario tuviera los emails [correo eliminado] y [correo eliminado], y los teléfonos 1234567 (teléfono fijo) y 12345678 (móvil), entonces tendría algo así:



id
nombre
apellido_paterno
apellido_materno
id_tributario
email
telefono


1
Pedro
Aguirre
Cerda
1-9
[correo eliminado]
1234567


2
Pedro
Aguirre
Cerda
1-9
[correo eliminado]
12345678



Esto no parece mal al comienzo, pero a medida de que tu base de datos crece, tener muchos registros repetidos será un problema.

Una mejor forma de hacerlo es esta:

CREATE TABLE usuario (
  id PRIMARY KEY,
  nombre,
  apellido_paterno,
  apellido_materno,
  id_tributario,
  /* otros campos */
);

CREATE TABLE info_contacto_usuario (
  id PRIMARY KEY,
  tipo,
  valor,
  usuario_id FOREIGN KEY REFERENCES usuario (id)
);

De esta forma podríamos tener algo así:

usuario


id
nombre
apellido_paterno
apellido_materno
id_tributario


1
Pedro
Aguirre
Cerda
1-9



info_contacto_usuario


id
tipo
valor
usuario_id


1
Teléfono Móvil
12345678
1


2
Teléfono Fijo
1234567
1


1
Email
[correo eliminado]
1


1
Email
[correo eliminado]
1



De esta forma se disminuyen los duplicados y la información es más precisa.
Comprendo, estimado Skaparate. Bueno, lo ya dicho, tengo mucho que seguir aprendiendo.

A todo esto, quiero pedirte ayuda con este formulario, mediante el cual estoy tratando de actualizar el registro, o sea, una noticia, por ejemplo, con un título inadecuado y una foto que no era la apropiada, cosas así. Pero a cada rato me arroja problemas y llevo horas haciendo cambios y buscando soluciones y nada, siempre me sale el mensaje:

Notice: indefined index:foto ..... etc y me indica la línea 21 que es ésta:

$foto = mysqli_real_escape_string($conexion,$_POST['foto']);

De veras el asunto me tiene bien mosqueado, algo debo estar haciendo muy mal para que me joda tanto ...:mad:

Este es mi formulario:

<?php
$query = 'SELECT * FROM categorias';
$result = $conexion->query($query);
?>
<?php

if(isset($_POST['modificar'])){ // Si el boton de "anadir" fué presionado ejecuta el resto del código | $_POST['imagen']

//chequeo que lleguen todas los datos
if (!empty ($_POST['modificar'])){
     //creo las variables
    $id = mysqli_real_escape_string($conexion,$_POST['id']);
    $titulo = mysqli_real_escape_string($conexion,$_POST['titulo']); // Recibimos el valor del <input name="titulo"... 
    $texto = mysqli_real_escape_string($conexion,$_POST['texto']);   // Recibimos el valor de la <textarea name="titulo"
    $categoria = mysqli_real_escape_string($conexion,$_POST['categoria']);
    $fecha = mysqli_real_escape_string($conexion,$_POST['fecha']);}
    $foto =  mysqli_real_escape_string($conexion,$_POST['foto']);
    $foto = $ruta = $_FILES['foto']['name'];
    echo $ruta; 
    {
    if(is_uploaded_file($_FILES['foto']['tmp_name'])) { // verifica haya sido cargado el archivo
    $ruta= "../uploads/".$_FILES['foto']['name']; // Se guardaría dentro de "fotos" con el nombre original
    move_uploaded_file($_FILES['foto']['tmp_name'], $ruta);
    if(move_uploaded_file($_FILES['foto']['tmp_name'], $_FILES['foto']['name'])) { // se coloca en su lugar final
    echo "<b>Upload exitoso!. Datos:</b><br>";
    echo "Nombre: <i><a href=\"".$_FILES['foto']['name']."\">".$_FILES['foto']['name']."</a></i><br>";
    echo "Tipo MIME: <i>".$_FILES['foto']['type']."</i><br>";
    echo "Peso: <i>".$_FILES['foto']['size']." bytes</i><br>";
    echo '<br /><br /><a href="'.$_SERVER['PHP_SELF'].'">Refrescar p&aacute;gina</a><br /><br /></div>';
    echo "<br><hr><br>";
    }

//modifico los datos  
   $sql= mysqli_query ($conexion,"UPDATE noticias SET id='$id',titulo='$titulo',texto='$texto',categoria='$categoria',foto='$foto',fecha='$fecha' WHERE id='$id'") ;
    
  //si esta todo OK muestro el mensaje
  
  echo "<script>";
  echo "alert ('los datos fueron modificados');";
  echo "window.location.replace('index.php');";
  echo "</script>";
                }
            }
        }

if(isset($_GET['id'])) 
{ 
    $id =  mysqli_real_escape_string($conexion,$_GET['id']); // Recibimos el id de la noticia por medio de GET 
    $query_NoticiaCompleta = mysqli_query($conexion,"SELECT * FROM noticias WHERE id = '".$id."' "); // Ejecutamos la consulta
    $row = mysqli_fetch_assoc($query_NoticiaCompleta);
}
?>

<!doctype html>
<html>
<head>
<meta charset="iso-8859-2">
<title>Publicar Noticia :::.</title>
<link href="css/estilo.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="plugins/ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="kcfinder/ckfinder.js"></script>
<script type="text/javascript">
window.onload = function()
{
 editor = CKEDITOR.replace('texto');
 CKFinder.SetupCKEditor( editor, 'kcfinder' );
}
</script>
</head>
<body>

<div id="contenidos">
<form action="" method="post" enctype="multipart/form-data" >
  Titulo:<br>
  <input name="titulo" value="<?php echo ''.$row['titulo'].'';?>" size="100"><br><br>


  Contenido: <br> <textarea name="texto" rows="15" cols="100" id="texto"><?php echo ''.$row['texto'].'';?></textarea><br><br>


  Categoria: 
  <br>
<select name="categoria" id="categoria">
<?php echo '<option value="">Escoger de la Lista</option>';?>
<?php while ($row=$result->fetch_array()) { ?>
<option value="<?php echo $row['categoria'] ?>" >
<?php echo $row['categoria']; ?>
</option>
<?php } ?>        
</select>
<br>
<br>
<br><input name="foto" type="file" id="foto" class="button" />
<br>
<br>
<br>
<input type="hidden" name="id" value="<?php echo ''.$_POST['id'].'';?>" />
<input name="fecha" type="hidden" value="<?=date("Y-m-d"); ?> <?=date("h:i:s");?>" />
<input type="submit" name="modificar" value="Modificar noticia" />
<input type="reset" name="reset" id="reset" value="Restablecer">
</form>
</div>
Lo que hice fue sacar todo lo relativo a subir fotos, todo, entero y así y todo el formulario no me actualiza la base de datos :mad:

Estoy a punto de tirar la toalla!
Jajaja, no te desesperes que a todos nos pasa :).

Cuando pasan estas cosas, lo primero que debes hacer es revisar lo que estas recibiendo en el servidor.

Para mostrar arreglos, usa esto:

print_r( $arreglo );
// Ejemplo: print_r( $_POST );

También es buena idea utilizar una variable para construir las consultas SQL:

$sql_query = "SELECT * FROM tabla WHERE columna = '$valor'";
echo "<div>DEBUG: $sql_query</div>";

Modifica tu script para que muestre lo que está haciendo y podrás encontrar el problema.
No hay caso, como te decía, saqué todo lo relativo a las fotos y el formulario no actualiza nada. De veras no entiendo qué estoy haciendo mal.
Revisa el registro de errores de PHP. ¿Estas trabajando con Xampp o algo así?
No encontré nada anómalo, pero puedo haber pasado por alto cuestiones vitales.
OK!!! Ya conseguí que el formulario actualice el registro :)

Vamos a ahora a por lo de las fotos!
¡Y OK, solucionado todo! Gracias, amigo Skaparate por inspirarme y darme ánimos!! [:)]
Canté victoria antes de tiempo con lo del upload de las fotos!! jajajajajjaa

Me está dando guerra esta línea (la N° 79):
if(move_uploaded_file(isset($_FILES['foto']['tmp_name'], $_FILES['foto']['name']))) {

Me sale este warning:

Warning: move_uploaded_file() expects exactly 2 parameters, 1 given in C:\xampp\htdocs\SISTEMAS-de-NOTICIAS\noticias18\admin\modificar_noticia.php on line 79

Claramente, necesito el otro método que señalaste. A estudiar se a dicho!! jajajajaja :D

Paciencia! :rolleyes:
Debes diferenciar entre una advertencia y un error:

- Advertencia: permite la ejecución del script sin problemas, pero puede causar resultados inesperados.
- Error: no permite la ejecución del script.

En este caso, la advertencia dice que La función move_uploaded_file espera 2 parámetros, pero sólo se entregó 1. Hay un error lógico en esta línea, así que te recomiendo que la leas con detalle y te expliques a ti mismo qué hace cada función.

Intenta encontrarlo por tu cuenta.
skaparate escribió:Debes diferenciar entre una advertencia y un error:

- Advertencia: permite la ejecución del script sin problemas, pero puede causar resultados inesperados.
- Error: no permite la ejecución del script.

En este caso, la advertencia dice que La función move_uploaded_file espera 2 parámetros, pero sólo se entregó 1. Hay un error lógico en esta línea, así que te recomiendo que la leas con detalle y te expliques a ti mismo qué hace cada función.

Intenta encontrarlo por tu cuenta.

OK, ya entendí. Claro, faltaba el isset, declarar la variable, en el otro parámetro. Era como obvio! jajajaja

Saludos, amigo Skaparate!