Visualizzazione risultati 1 fino 20 di 20

Discussione: estrarre gli articoli da mysql

  1. #1
    Guest

    Predefinito estrarre gli articoli da mysql

    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

    $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>
    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 perà non me li linka .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'era il linka che mi rimandava al file show.php (per leggere gli articoli in dettagli) può essere perchè ho tralasciato il campo autore?Cioè l'errore è dovuto a me che quando ho scritto l'articolo ho tralasciao il capmo autore?

    EDIT:
    Codice PHP:
    ?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']
    );
    }
    ?>
    secondo me l'errore sta qua o no?
    Ultima modifica di debug : 27-01-2008 alle ore 13.20.09

  2. #2
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Cosa vuol dire che non li linka? Non scrive l'elenco degli articoli o cosa?
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  3. #3
    Guest

    Predefinito

    Anche io ho av lo stesso problema sicuramente lutente casticrew si è basato su questa guida http://php.html.it/guide/lezione/269...egli-articoli/
    praticamente non scrive l'elenco degli articoli..Sono disperato per favore..
    Ultima modifica di dreadnaut : 29-01-2008 alle ore 22.55.55

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da casticrew Visualizza messaggio
    ...
    EDIT:
    Codice PHP:
    ?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']
    );
    }
    ?>
    secondo me l'errore sta qua o no?
    La butto lì: visto che delimiti la stringa da stampare con i single quote (') invece che con i double quote ("), prova a sostituirli (i single quote stampano la stringa così com'è, senza sostituire le variabili). Naturalmente poi dovrai riscrivere anche i double quote interni alla stringa, sostituendoli con la sequenza \" (altrimenti la stringa viene presa per interrotta, con conseguente errore).

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da dementialsite Visualizza messaggio
    Naturalmente poi dovrai riscrivere anche i double quote interni alla stringa, sostituendoli con la sequenza \" (altrimenti la stringa viene presa per interrotta, con conseguente errore).
    Per favore può darmi una mano non ho capito che significa:" Naturalmente poi dovrai riscrivere anche i double quote interni alla stringa, sostituendoli con la sequenza \" (altrimenti la stringa viene presa per interrotta, con conseguente errore)."

    edit:

    ho provato a corregere ma niente! Secondo voi cos'è?
    Ultima modifica di dreadnaut : 29-01-2008 alle ore 22.56.59

  6. #6
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Al posto di:
    Codice PHP:
    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']
    );
    Prova a mettere:
    Codice PHP:
    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']
    );
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  7. #7
    Guest

    Predefinito

    non funziona che posso fare?

  8. #8
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da casticrew Visualizza messaggio
    non funziona che posso fare?
    Un primo passo potrebbe essere analizzare l'output o il codice HTML generato (sul browser: Visualizza > HTML per IE, Visualizza > Sorgente Pagina per Firefox) e confrontarlo con quello predisposto dal "generatore" (la tua pagina PHP): prova a postarlo...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  9. #9
    Guest

    Predefinito

    ecco il sorgente della pagina
    Codice:
    <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: 9</p>
            <table width="500px">
                        </table>
            <p>Pagina 1 di 2 <br />
            &lt; prev | <a href="?p=2">next &gt;</a>        </p>
    
        </body>
    </html>

  10. #10
    Guest

    Predefinito

    stesso ed identico problema per favore....Ho provato acnhe a sostituire assoch con arry ma risulato semprw quello...per favore

  11. #11
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ho provato a controllare il codice sopra e sembra corretto. La tabella non viene stampata perché il ciclo while non viene mai eseguito: prova a controllare se hai scritto bene la query, perché, fallimento di MySQL a parte, l'unica cosa che "non va" può essere quella che restituisce zero risultati.
    Codice:
    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)
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  12. #12
    Guest

    Predefinito

    Sono alle basi di php non so controllare se la queri è giusta ve la posto controllate voi:
    Codice PHP:
    -- 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`
    --

  13. #13
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Se hai postato così come sono struttura e dati, non c'è nessun errore: essendo vuota la tabella author, non c'è nessun record da confrontare nella clausola WHERE... e quindi, nessun risultato da restituire nella query generale.

    Stammi bene...

    P.S. Evita di "sollecitare risposte" attraverso i messaggi privati, grazie...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  14. #14
    Guest

    Predefinito

    scusa puoi spiegarmi meglio??
    Io nel campo autore non ho mai inserio niente perchè non volvevo inserirci niente....

  15. #15
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Non essendoci l'autore il risultato della query è di 0 righe.
    Codice:
    WHERE
            AR.author_id = AU.id
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  16. #16
    Guest

    Predefinito

    per cui devo inserire l'autore per far funzionare lo script?

  17. #17
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Più o meno...
    - da una parte devi inserire qualche autore in quella tabella, così da avere dei riferimenti
    - dall'altra devi impostare i campi author_id in modo che corrispondano a quelli di qualche autore

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  18. #18
    Guest

    Predefinito

    puoi spiegarmi meglio scrivendo qualche stringa?

  19. #19
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Devi inserire nella tabella degli autori l'elenco degli autori e in quella degli articoli l'ID dell'autore che ha scritto ogni articolo.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  20. #20
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da mdweb Visualizza messaggio
    puoi spiegarmi meglio scrivendo qualche stringa?
    Provo a spiegarmi con un esempio simile: supponi di avere una tabella AUTORI con questi dati:
    Codice:
    ID - Cognome - Nome
    -----------------------
    1 - Pirandello - Luigi
    2 - Manzoni - Alessandro
    3 - Verga - Giovanni
    Poi vuoi memorizzare alcune opere scritte da loro, allora creerai una tabella con i titoli delle OPERE e i riferimenti agli autori, in questo modo:
    Codice:
    ID - Titolo - ID_Autore
    -----------------------
    1 - I Promessi Sposi - 2
    2 - Novelle per un anno - 1
    3 - I Malavoglia - 3
    4 - Il Cinque Maggio - 2
    5 - La patente - 1
    6 - La giara - 1
    A questo punto, vuoi estrarre dal tuo database tutti i dati delle tue opere, compresi Nome e Cognome degli autori. Questa sarà la query che eseguirai:
    Codice:
    SELECT OPERE.ID, Titolo, Nome, Cognome
    FROM OPERE, AUTORI
    WHERE AUTORI.ID = ID_Autore
    e questo il risultato:
    Codice:
    OPERE.ID - Titolo - Nome - Cognome
    ----------------------------------------------
    1 - I Promessi Sposi - Alessandro - Manzoni
    2 - Novelle per un anno - Luigi - Pirandello
    3 - I Malavoglia - Giovanni - Verga
    4 - Il Cinque Maggio - Alessandro - Manzoni
    5 - La patente - Luigi - Pirandello
    6 - La giara - Luigi - Pirandello
    Il tuo esempio non è esattamente questo, ma è molto simile... spero di averti chiarito le idee...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •