PDA

View Full Version : [PHP&mysql]Script per sito con articoli


MasterDany
29-01-2008, 15:31
Ciao a tutti ho creato unp script php che permette di scrivere articoli e salvarli in mysql allora per prima cosa ho creato un file.sql con scritto :
Codice:

CREATE TABLE authors (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
surname VARCHAR(100) NOT NULL,

PRIMARY KEY(id)
);

CREATE TABLE articles (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
author_id INT UNSIGNED NOT NULL,
title VARCHAR(100) NOT NULL,
article TEXT NOT NULL,

PRIMARY KEY(id),
KEY(author_id)
);


poi ho creato un file insert.php per inserire gli articoli:
Codice PHP:

?php

$mysql = new mysqli('localhost', 'root', '', 'html_it_articles');
if(!$mysql)
{
die("Errore di connessione al database, impossibile procedere");
}

if(isset($_POST['action']) and $_POST['action'] == 'insert')
{
$mysql->query("INSERT INTO articles VALUES ('', '".$_POST['author']."', '".addslashes($_POST['title'])."', '".addslashes($_POST['article'])."')");
header('Location: index.php');
}

$authors = $mysql->query("SELECT id, CONCAT(surname, ' ', name) AS fullname FROM authors ORDER BY surname ASC");
?>
<html>
<head>
<title>Inserimento articolo</title>
</head>
<body>
<ul>
<li><a href="index.php">Lista articoli</a></li>
<li><a href="insert.php">Inserisci un articolo</a></li>
</ul>
<h3>Inserisci un articolo</h3>
<form action="" method="post">
<input type="hidden" name="action" value="insert" />
<label>Autore:</label> <select name="author">
<?php
while($author = $authors->fetch_assoc())
{
echo "<option value=".$author['id'].">".$author['fullname']."</option>";
}
?>
</select><br />
<label>Titolo:</label> <input type="text" name="title" size="55"/><br />
<label>Text:</label><br />
<textarea name="article" rows="6" cols="60"></textarea><br />
<input type="submit" value="Salva" />
</form>
</body>
</html>

poi ho creato un file show.php e ho inserito per leggere gli articoli:
Codice PHP:

<?php

$mysql = new mysqli('localhost', 'root', '', 'provacast');
if(!$mysql)
{
die("Errore di connessione al database, impossibile procedere");
}

if(!isset($_GET['id']))
{
header('Location: index.php');
}

$article = $mysql->query("
SELECT
AR.id AS id,
AR.title AS title,
AR.article AS content,
CONCAT(AU.surname, ' ', AU.name) AS author
FROM
articles AR,
authors AU
WHERE
AR.author_id = AU.id AND
AR.id = ".$_GET['id'])->fetch_assoc();
?>
<html>
<head>
<title>Articolo (<?php echo $article['id']; ?>)</title>
</head>
<body>
<ul>
<li><a href="index.php">Lista articoli</a></li>
<li><a href="insert.php">Inserisci un articolo</a></li>
</ul>
<h3><?php echo $article['title']; ?></h3>
<i><?php echo $article['author']; ?></i>
<p>
<?php echo $article['content']; ?>
</p>
</body>
</html>

infine ho creato l'index.php per linkare gli articoli in modo che tutti possano vederli:


Codice PHP:
<?php

$limit = 5; // articoli per pagina

$mysql = new mysqli('localhost', 'root', '', 'provacast');
if(!$mysql)
{
die("Errore di connessione al database, impossibile procedere");
}

$result = $mysql->query("SELECT COUNT(*) AS tot FROM articles")->fetch_assoc();

$page = isset($_GET['p']) ? $_GET['p'] : 1;
$totals = $result['tot'];
$totals_pages = ceil($totals / $limit);

$articles = $mysql->query("
SELECT
AR.id AS id,
AR.title AS title,
CONCAT(SUBSTR(AR.article, 1, 200), ' ...') AS content,
CONCAT(AU.surname, ' ', AU.name) AS author
FROM
articles AR,
authors AU
WHERE
AR.author_id = AU.id
ORDER BY id DESC
LIMIT ".(($page - 1) * $limit).",".$limit);
?>
<html>
<head>
<title>Articoli</title>
</head>
<body>
<ul>
<li><a href="index.php">Lista articoli</a></li>
<li><a href="insert.php">Inserisci un articolo</a></li>
</ul>
<p>Articoli totali: <?php echo $totals; ?></p>
<table width="500px">
<?php
while($article = $articles->fetch_assoc())
{
printf('<tr>
<td>%d. <a href="show.php?id=%d">%s</a> (%s) </td>
</tr>
<tr>
<td><p>%s</p></td>
</tr>
<tr>
<td><hr /></td>
</tr>',
$article['id'],
$article['id'],
$article['title'],
$article['author'],
$article['content']
);
}
?>
</table>
<p>Pagina <?php echo $page; ?> di <?php echo $totals_pages; ?> <br />
<?php
if($page - 1 > 0)
{
echo '<a href="?p='.($page - 1).'">&lt; prev</a> | ';
}else
{
echo '&lt; prev | ';
}
if($page + 1 <= $totals_pages)
{
echo '<a href="?p='.($page + 1).'">next &gt;</a>';
}else
{
echo 'next &gt;';
}
?>
</p>
</body>
</html>

Gli articoli li inserisce IN MY SQL PERò NON MI MOSTRA L'ELENCO NELL'INDEX .l'errore pesno che stia sell'index ma non lo trovo...Gli articoli li insrisce perchè nell'index che ho testato in locale 'era scritto articoli totali 2 ma poi non c'è l'elenco degli articoli...secondo voi che ho sbagliato?

MasterDany
04-02-2008, 16:37
vi riporto la query sql:
-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generato il: 04 Feb, 2008 at 05:10 PM
-- Versione MySQL: 5.0.27
-- Versione PHP: 5.2.0
--
-- Database: `provacast`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `articles`
--

CREATE TABLE `articles` (
`id` int(10) unsigned NOT NULL auto_increment,
`author_id` int(10) unsigned NOT NULL,
`title` varchar(100) NOT NULL,
`article` text NOT NULL,
PRIMARY KEY (`id`),
KEY `author_id` (`author_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- Dump dei dati per la tabella `articles`
--

INSERT INTO `articles` (`id`, `author_id`, `title`, `article`) VALUES
(1, 0, 'Daniele', 'sdsadsadf'),
(2, 0, 'dfgfdg', 'dfgdgdfg'),
(3, 0, 'dfgdg', 'dfgdfgdfg'),
(4, 0, 'nbmbm', 'nbmnbmnbmbmnbm'),
(5, 0, 'hgjhjhg', 'hgjhgjgh'),
(6, 0, 'dsfds', 'dsfsdfsdf'),
(7, 0, 'prova', 'dsfsdafsda'),
(8, 0, 'uyiyiyijhkjhk', 'uyfivhgkjhnmjhvkjnmnmnbmbm'),
(9, 0, 'vbgnvb', 'vbnvnvb');

-- --------------------------------------------------------

--
-- Struttura della tabella `authors`
--

CREATE TABLE `authors` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
`surname` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dump dei dati per la tabella `authors`
--


-- --------------------------------------------------------

--
-- Struttura della tabella `news`
--

CREATE TABLE `news` (
`id` int(5) unsigned NOT NULL auto_increment,
`titolo` varchar(255) NOT NULL,
`testo` text NOT NULL,
`data` int(11) default NULL,
`autore` varchar(50) default NULL,
`mail` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Dump dei dati per la tabella `news`
--

Che ho sbagliato?