[ Foro de SQL (y MySQL) ]

Una web para organizar mi documentacion

27-Oct-2007 00:45
Cog Swapero
2 Respuestas

Ieee Nacho, te acuerdas de mi??
Mira, esta misma he empezado una web para organizarme toda mi documentacion... Un día consigo configurar la tarjeta de sonido en Linux y cuando actualizo la distribucion vuelvo a quedarme sin sonido ¿Donde encontré las instrucciones para reconfigurarla? vete tu a saber...

En esta web quiero meterme mis propios manuales para uso personal... En fin...

www.wikihost.es

A ver, la base de datos que he creado:

CREATE TABLE IF NOT EXISTS `articulo` (
`id_articulo` int(5) NOT NULL auto_increment,
`titulo` varchar(255) default NULL,
`contenido` mediumtext,
`id_categoria` int(5) NOT NULL default '0',
PRIMARY KEY (`id_articulo`,`id_categoria`),
KEY `FK_id_categoria` (`id_categoria`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `categoria` (
`id_categoria` int(5) NOT NULL auto_increment,
`nombre` varchar(255) default NULL,
PRIMARY KEY (`id_categoria`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;


Y mi primer problema lo tengo a la hora de crear un artículo

Este es el código para crear un artículo:


<?php include("../conecta.php"); ?>

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">

<div align="center">
<label> Categoria
<select name="categoria">
<?php
$result = mysql_query("SELECT * FROM categoria order by id_categoria",$db);
$filas = mysql_num_rows ($result);
for ($i = 0; $i < $filas; $i++) {
$id_categoria = mysql_result ($result, $i, "id_categoria");
$nombre = mysql_result ($result, $i, "nombre");
echo ("<option value=$id_categoria > $nombre");
}
?>
</select>
</label>
</div>

<br />

<div align="center">
<label>T&iacute;tulo<br />
<input name="titulo" type="text" value="" size="60" />
</label>
</div>

<br />

<div align="center">
<label>Art&iacute;culo<br />
<textarea name="articulo" cols="80" rows="20"></textarea>
</label>


<p>
<label>
<input type="submit" name="Submit" value="Enviar" />
</label>
</p>
</div>

</form>

<?php
if ($_POST)
{
$articulo=$_POST['articulo'];
$titulo=$_POST['titulo'];
$categoria=$_POST['categoria'];

$sql = "INSERT INTO articulo (titulo, contenido, id_categoria) VALUES('$titluo, $articulo, $categoria')";
$result = mysql_query($sql);
if ($result)
printf("<p>Articulo introducido correctamente.</p>\n<a href=\"../index.php\">Volver</a></p>");
else
printf("<p>Error introduciendo articulo.</p>\n<a href=\"nuevo.php\">Repetir</a></p>");
}
?>

Me da error al introducir el artículo... y me parece que es problema a la hora de insertar la categoria que en una foreign_key, que estoy cogiendo el nombre de la categoría, en vez de la id de la categoría... Pero es que no se como hacerlo...

El apartado de crear una nueva categoría bien, pero lo de crear el artículo dentro de la categoría me lleva loco...

Una ayudita a un novato pliz!!!!
Graciassss!!!!

30-Oct-2007 21:02
Cog Swapero

Ya lo solucioné poniendo

$sql = "INSERT INTO articulo (titulo, contenido, id_categoria) VALUES('$titluo', '$articulo', '$categoria')";

Me faltaban comillas :)
Un saludo!!


30-Oct-2007 22:32
Nacho Cabanes (+83)

Claro, los campos que no sea estrictamente numéricos necesitarán comillas.

(Cuidado: tienes $titluo en vez de $titulo, puedes estar insertando valores vacíos).

Aun así, un truco para descubrir ese tipo de problemas: Ya que has hecho

$sql = "INSERT INTO articulo (titulo, contenido, id_categoria) VALUES('$titulo', '$articulo', '$categoria')";

Puedes comprobar su sintaxis haciendo que te la muestre en pantalla, antes de hacer el query:

echo "Consulta: " . $sql . "<br>";

Si parece todo correcto... pero no funciona, y tienes instalada alguna herramienta de administración como PhpMyAdmin, copia y pega tu consulta en la pestaña "SQL" de MyAdmin, y pruébala desde allí: los mensajes de error de MyAdmin son mucho más detallados que los que obtienes directamente en la página web, te indica dónde está el problema (con frases como "before VALUES(...") y podrás hacer pruebas para corregirlo allí mismo.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)