Visualizzazione risultati 1 fino 18 di 18

Discussione: Creare nuove pagine con estensione .php tramite codice

  1. #1
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito Creare nuove pagine con estensione .php tramite codice

    Ciao a tutti, è davvero tanto che non scrivo.

    Vi spiego brevemente il mio problema e spero di trovare aiuto nella vostra sapienza.

    Sto creando un sito in cui dare la possibilità al futuro proprietario (admin) di potersi loggare in un'area privata e inserire le sue news che poi verranno visualizzate sul sito.

    Fin qui non ho avuto grandi problemi, ho realizzato l'area privata e una sezione dove con un editor l'admin inserisce le notizie dove può vederle e gestirle come meglio crede.

    Siccome voglio creare nell'home page una sezione news dove verranno visualizzate appunto le news e dove saranno cliccabili per raggiungere gli articoli desiderati, il problema su cui mi sono bloccato è il seguente:
    Ho un database dove inserisco nell'apposita tabella i dati (id) (titolo) (testo) (immagine)
    Oltre a creare un record per ogni news nel db voglio che php mi generi automaticamente un file con estensione .php per ogni record (quindi per ogni news/articolo inserito) e che venga salvato in un'apposita cartella.
    Inoltre vorrei che nella sezione news dell'home page si generi un link che porti a un'altra pagina che contenga a sua volta un include per per richiamare ogni articolo (es. se clicco sulla news1 sull'home page mi si apre la pagina php che include il file relativo alla news1, se clicco la news2 mi apre la pagina che include la news e così via)

    Avete qualche soluzione?
    Ps. con fopen e fwrite mi si genera un file txt ma io ho bisogno di includere anche le immagini

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Citazione Originalmente inviato da zyro Visualizza messaggio
    Ps. con fopen e fwrite mi si genera un file txt ma io ho bisogno di includere anche le immagini
    Non puoi "includere" le immagini in file php. Al più puoi inserirle tramite l'apposito tag html <img>, linkando file di immagine. L'unico modo per "inglobare" le immagini nei file è utilizzando nell'src il "data:", ad esempio:
    Codice HTML:
    <img src="data:png/gif;base64,abcdefghijklmnopqrstuvz1234567890....." />
    Inoltre, sei sicuro di voler creare un file php per ogni utente? Mi spiego, sicuro che tu non possa fare una pagin PHP "generica" che fa quel che vuoi ad esempio passandogli un parametro GET?

    Ciao!

  3. #3
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Di utente ce ne sarà uno solo, l'admin, non vorrei fosse stato capito male il senso.

    In pratica mi serve che quando l'admin accede al suo pannello di controllo possa inserire le sue varie news (e questo lo fa). Oltre ciò devo fare in modo che in automatico mi generi nella home del sito una breve descrizione di tutte le news con relativo link per accedere a una pagina che presenti la rispettiva news al completo.

    Posso creare sì un'unica pagina, infatti era quello che cercavo di ottenere all'inizio, ma come posso fare in modo che in questa pagina vengano estratti il titolo, la descrizione e l'immagine relativa alle rispettive news?

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Dipende come salvi le news. Hai detto che salvi titolo, testo e immagini, quindi puoi estrarre i dati che vuoi...

    Ciao!

  5. #5
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Sì, nella tabella ci sono id, titolo, testo, data di pubblicazione e immagine

    Diciamo che nella pagina finale posso richiamare tutti questi dati con una query e associarla a un array in modo che possa inserire per esempio $var[titolo], $var[testo] e $var[immagine] dove devono comparire i rispettivi dati.

    Ora, come faccio a creare nella sezione news dell'home page un link personalizzato per ogni news e a dire alla pagina sopra citata quali dati richiamare?

    Mi sono impantanato proprio in questo punto. Grazie per la tua disponibilità

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Hai anche $var[id]. Quindi puoi fare:

    Codice PHP:
    <a href="articolo.php?id=<?= $var['id'] ?>">
    Quindi nella pagina "articolo.php" esegui la query con WHERE id=$_GET['id']

    Ciao!

  7. #7
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Provo e ti faccio sapere, grazie.

    Io mi stavo creando un codice con lo switch nella pagina dell'articolo ma non sapevo come richiamarlo nella url, mi perdo sempre in un bicchier d'acqua.

    E se volessi fare la stessa cosa ma passando il dato titolo come posso fare per evitare errori nel link nel caso nel titolo ci siano degli spazi?

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

  9. #9
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Ciao alemoppo


    Allora, ho provato come dici tu ma ho due problemi da risolvere.

    1) non riesco a visualizzare la pagina articolo.php perché mi da un errore di sintassi

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
    ti posto il codice perché non ho capito se dipende da me o è qualche incompatibilità di versioni SQL con altervista visto che a occhio non trovo errori di sintassi.

    [
    Codice PHP:
    ]<!doctype html>
    <html lang="it">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Articolo</title>
    </head>

    <body>
    <?php
    require_once ("news/config.php");
    //creo una variabile per non incorrere in errori nella query
    $title = $_GET['title'];
    //ora richiamo la query identificando l'indice id
    $sql=("SELECT * FROM news WHERE title= $title") or die (mysql_error());
    $query= mysql_query($sql) or die (mysql_error());
    $row = mysql_fetch_array($query);
    ?>
    <div id="art_img"><img src="<?php echo $row['picture'];?>" /> <!--richiamiamo l'immagine-->
    </div>
    <div id="art_tit"><?php echo $row['title'];?> <!--richiamiamo il titolo della news-->
    </div>
    <div id="art_text"><?php echo $row['text'];?> <!--richiamiamo il testo della news-->
    </div>
    </body>
    </html>
    2) nella pagina news.php se provo a cliccare sul link non passa nel get il titolo
    Il codice è questo, come hai indicato tu
    Codice HTML:
    <a href="articolo.php?id=<?= $sq1['title'] ?>">
    ma nel browser appare questo

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    1. Visto che è una stringa, $title va tra virgolette:
      Codice PHP:
      $sql=("SELECT * FROM news WHERE title= '$title'") or die (mysql_error());
      Tieni presente che or die() non ha molto senso in quanto la or viene invocata solo se la prima parte ritorna un valore simile a false, ma essendo un'assegnazione di una stringa non ritornerà mai false o simile.
    2. $sq1 ovviamente deve essere la variabile prelevata dal database. Visto che utilizzi una stringa, dovrai anche aggiungere la funzione sopra che ti avevo detto, quindi diventerà tipo:
      Codice PHP:
      <a href="articolo.php?id=<?= urlencode($sq1['title']) ?>">
      . Ah, se hai già aperto PHP puoi ovviamente usar la echo. In ogni caso, se non riesci a risolvere, scrivici tutto il codice anche di questa pagina


    Ciao!
    Ultima modifica di alemoppo : 28-03-2014 alle ore 18.16.15

  11. #11
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Grazie, il primo problema l'ho risolto e riesco ad aprire la pagina.

    Ora rimane il secondo, ti posto il codice:

    Codice PHP:
    <!doctype html>
    <html lang="it">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>News</title>
    </head>

    <body>
    <div class="title">Ultime News e Comunicazioni</div>
    <?
    $time
    =time(); // preleviamo dal server il timestamp attuale
    /** selezioniamo i dati dalla nostra tabella news prelevando solo i dati da pubblicare,
    * che abbiano una data di pubblicazione inferiore o uguale alla data odierna
    * che abbiano la data di fine pubblicazione maggiore o uguale alla data odierna oppure uguale a 0 (che indica che non ha scadenza)
    * ordiniamo alla fine per data di pubblicazione ASC o DESC a seconda della scelta da noi effettuata all'atto dell'installazione
    * ed infine estraiamo solo il numero di news che ci interessano.
    */
    $sql= "SELECT * FROM news WHERE publish=1
    AND publish_data<='
    $time'
    AND (unpublish_data>='
    $time' OR unpublish_data=0)
    ORDER BY publish_data "
    .$order."";
    if (
    $limit!="" || $limit!=0) // verifichiamo se abbiamo deciso di vedere tutte le news o solo alcune
    {
    $sql .=" LIMIT 0,".$limit.""; // se abbiamo impostato un limire estraiamo dai risultati della query solo quelle che ci interessano
    }
    $query=@mysql_query($sql) or die (mysql_error());

    ?>
    <div id="contentnews">
    <?
    // cicliamo adesso il risultato della nostra query per visualizzare le nostre news
    while ($row=mysql_fetch_array($query))
    {
    ?><a href="articolo.php?id=<?= urlencode($sq1['title']) ?>">
    <span class="titlenews"><? echo $row['title']; ?></span><br />
    <span class="datanews">Data: <? echo date("d/m/Y", $row['publish_data']); ?></span><br /> <!-- avendo salvato il valore data in timestamp utilizziamo la funzione date per visualizzare la data nel formato italiano -->
    <? echo html_entity_decode($row['text']); // la funzione html_entity_decode serve a ritrasformare le entità HTML create dall'editor in tag ?>
    </a>
    <hr />
    <?
    }
    ?>
    </div>
    </body>
    </html>
    Se clicco sulla prima news mi riporta la url che ti ho scritto sopra, se invece clicco su qualsiasi altra news seguente mi ricarica la pagina

    Edit: ho risolto il problema nella pagina news cambiando la variabile nell'url da $sq1 a $row

    Ora mi apre correttamente la pagina articolo.php ma non c'è nessun contenuto al suo interno nonostante nel database ci siano dei dati per testarlo.
    Ultima modifica di zyro : 28-03-2014 alle ore 19.33.31

  12. #12
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    A mente fresca ho risolto stamattina il problema della non visualizzazione dei dati nella pagina articolo

    Ho sostituito la chiave id con la chiave title, logicamente se voglio richiamare le pagine usando il titolo, non posso dargli come riferimento l'id

    Codice HTML:
    <a href="articolo.php?id=<?= urlencode($row['title']) ?>">
    
    <a href="articolo.php?title=<?= urlencode($row['title']) ?>">
    Faccio i miei dovuti controlli e continuo a manipolare il codice per inserire le altre funzioni. Se ho altri problemi spero di poter chiedere aiuto qui, grazie mille per ora

  13. #13
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Ciao, scusa ancora il disturbo.

    Le pagine girano benissimo sul server, nessun problema, ma mi è sorto un piccolo dubbio riguardo un'altra cosa.

    Ho realizzato in html 2 menù a tendina per permettere all'admin di poter ordinare le news in ordine alfabetico crescente o decrescente o scegliendo se metterle in ordine in base alla data di pubblicazione. Per fare ciò mi sono creato uno switch per assegnare un valore a una variabile che ho inserito nei richiami al database:

    Form dei menù
    Codice HTML:
    <form action="admin.php" method="post" enctype="multipart/form-data" name="ordine" id="ordine">
        <select name="ordinamento" id="ordin" onchange="this.form.submit()">
          <option value="Titolo">Titolo</option>
          <option value="Data pubbl.">Data pubbl.</option>
        </select>
        
        <select name="ordinamento" id="AZ" onchange="this.form.submit()">
          <option value="A-Z">A-Z</option>
          <option value="Z-A">Z-A</option>
        </select>
    </form>
    Switch per estrarre il valore della variabile
    Codice PHP:
    <?
    //Applichiamo la modifica nell'ordine di visualizzazione delle news
    //riprendo i valori dei menù
    $ordin=$_POST['ordin'];
    $AZ=$_POST['AZ'];

    //assegno per sicurezza un valore nullo alla variabile $order
    $order="";

    //e ora applico lo switch per calcolare i vari casi di ordinamento
    switch ($order)
    {
    case (
    $ordin=="Titolo" && $AZ=="A-Z"):
    $order="title ASC";
    break;
    case (
    $ordin=="Titolo" && $AZ=="Z-A"):
    $order="title DESC";
    break;
    case (
    $ordin=="Data pubbl." && $AZ=="A-Z"):
    $order="publish_data ASC";
    break;
    case (
    $ordin=="Data pubbl." && $AZ=="Z-A"):
    $order="publish_data DESC";
    break;
    default:
    $order="publish_data DESC";
    }
    ?>
    Testandolo però mi sono accorto che i menù a tendina si resettano a ogni refresh della pagina e in questo mondo il tutto non può funzionare perché i menù ritornano sempre alle opzioni predefinite.

    Cosa mi puoi consigliare per ovviare questo problema?

  14. #14
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Passalo via GET: invece di usare POST se utilizzi GET ad ogni refresh passerai anche come ordinarlo. Comunque mi sfugge l'uso dello switch: perché non hai usato else ed elseif?
    Cioè:

    Codice PHP:
    $order="";

    switch (
    $order)
    {
    [...
    casi...]
    }
    ovviamente, $order sarà vuoto!

    Io farei una cosa come:
    Codice PHP:
    if($ordin=="Titolo" && $AZ=="A-Z")
    $order="title ASC";
    else if(
    $ordin=="Titolo" && $AZ=="Z-A")
    $order="title DESC";
    else if(
    condizione)
    $order = ...;
    else if(
    condizione)
    $order = ...;
    else if(
    condizione)
    $order = ...;
    else
    $order="publish_data DESC";
    Il tuo codice non è sbagliato, però è molto poco leggibile, perché lo switch solitamente si utilizza in altri modi.

    Ciao!

  15. #15
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    In realtà mi sembrava più elegante con lo switch, ma in effetti quello non cambia molto. Domani provo a passare col GET e controllo.

    E se volessi fare in modo che nel form si impostino proprio i campi desiderati, dici che funzionerà proprio tramite il GET?

  16. #16
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Ciao alemoppo, scusa il disturbo

    la soluzione col GET va benissimo, con un'altra piccola modifica ora funziona benissimo ma, a rischio di proseguire un po' OT rispetto alla prima richiesta, volevo chiedere un tuo consiglio sul come impostare le voci dei menù predefinite in modo che siano quelle selezionate dall'utente.
    Mi spiego con un esempio: se prendiamo il form che ho postato prima con i 2 menù e seleziono per esempio di ordinare le news per data di pubblicazione, l'ordinamento come richiesto avviene ma come scelta predefinita nel menù rimane la voce titolo mentre come logico dovrebbe diventare quella selezionata.

  17. #17
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,685

    Predefinito

    Puoi fare un controllo con PHP: se esiste una scelta selezionata (quindi se esiste il parametro get), scrivi tramite php la stringa relativa al parametro, altrimenti quella di default (ovvero, titolo).

    EDIT: o più semplicemente, se esiste un parametro get scrivi la proprietà "selected" affianco all'option selezionata.
    Codice PHP:
    <form action="admin.php" method="post" enctype="multipart/form-data" name="ordine" id="ordine">
    <select name="ordinamento" id="ordin" onchange="this.form.submit()">
    <option value="Titolo">Titolo</option>
    <option value="Data pubbl." <?= (isset($_GET['ordinamento']) && $_GET['ordinamento']=="Data pubbl.")?'selected':'' ?>>Data pubbl.</option>
    </select>
    Ciao!
    Ultima modifica di alemoppo : 01-04-2014 alle ore 01.26.15

  18. #18
    zyro non è connesso Utente
    Data registrazione
    08-05-2010
    Messaggi
    105

    Predefinito

    Sei un genio, funziona.

    Grazie mille

Regole di scrittura

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