Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8

    [PHP] Usare un array che si incrementa in più pagine con una sessione

    Ciao a tutti,
    cercherò di spiegare in modo semplice il mio problema...

    sto facendo un sito con altervista per un ufficio (sono in stage con la scuola) e ho creato una pagina in cui si inseriranno degli articoli, però siccome il personale dell'ufficio non riuscirebbe poi a gestire manualmente l'inserimento, volevo inserire in un'area riservata (questa l'ho fatta) un form in cui potranno inserire i dati dell'articolo che poi si visualizzeranno in una pagina.

    quindi riassumendo il fatto è che io vorrei che i dati inseriti in un form, si trasportino (inseriti in un array) in un altro file in cui verranno registrati in un altro array, e poi facendo un banale ciclo vorrei visualizzare i dati...
    questo riesco a farlo ma il problema è che se torno una seconda volta nel form e inserisco dei nuovi dati poi nella pagina in cui si visualizzeranno ci saranno soltanto quelli inseriti l'ultima volta e quindi non mi aggiunge questi dati a quelli già passati.
    Così un amministratore passando nell'area riservata per inserire un nuovo articolo mediante il form, perderebbe il vecchio articolo già inserito la volta scorsa...

    So che sarebbe molto più facile utilizzare i database, ma ci ho già provato un po' e penso di non avere abbastanza conoscenze... quindi ho provato a farlo con session...

    nella pagina in cui registro la sessione ho inserito questo codice:
    Codice PHP:
    <?php
    if(isset($_POST["inserisci"]))
    {  
    $titolo=$_POST["titolo"];
      
    $immagine=$_POST["immagine"];
      
    $testo=$_POST["testo"];

     if(
    $titolo<>"")
     {

      if(
    $testo<>"")
      {
          
    session_start();
       
    $articolo=array("titolo"=>$titolo,"immagine"=>$immagine,"testo"=>$testo);
       
    $_SESSION["articolo"]=$articolo;

    echo 
    "articolo inserito";

      }
      else
      { 
        echo 
    "Non sono stati inseriti alcuni campi!";
      }

     }
    else
    {

         echo 
    "Non sono stati inseriti alcuni campi!";
    }

    }

    ?>
    invece nella pagina in cui vorrei visualizzare gli articoli (news.php) ho inserito questo codice:
    Codice PHP:
    <?php
    session_start
    ();
    $articoli=array();
    if(isset(
    $_SESSION['articolo'])) 

     
    $articolo=$_SESSION['articolo']; 
    }

    $articoli[count($articoli)]=$articolo;
    foreach(
    $articoli as $dati=>$info)
    {
     foreach(
    $info as $chiave=>$valore)
     {
     echo 
    $valore;
     }
    }

    ?>

    Grazie mille in anticipo!!

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    se vuoi fare una cosa persistente serve un database, oppure (sconsiglio vivamente) un file dove salvare i dati

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    ok, intanto grazie per la risposta^^
    Il sito è per la polizia municipale del mio comune, e gli articoli che vorrebbero inserire non sono molti... magari ne inseriranno 1 o massimo 2 al mese, è per questo che ho provato usando soltanto le sessioni e gli array...

    comunque con quelle poche conoscenze che ho sui database e con l'aiuto delle guide di php.html.it, ho provato a usare il db anche se ho riscontrato qualche errore...

    la pagina in cui ho inserito le funzioni che userò nelle altre pagine, ha questo codice:
    Codice PHP:
    <?php
    // connessione a MySQL tramite mysql_connect() 
    $connessionemysql_connect("localhost","xxxxxxxxx","xxxxxxxxx"); 


     class 
    MysqlClass {  
     
    // parametri per la connessione al database 
      
    private $nomehost "localhost";      
      private 
    $nomeuser "xxxxxxxxx";            
      private 
    $password "xxxxxxxxx";            
       
    // controllo sulle connessioni attive   
      
    private $attiva false;     
    // funzione per la connessione a MySQL 
      
    public function connetti()   
    {    if(!
    $this->attiva)    {     $connessione mysql_connect($this->nomehost,$this->nomeuser,$this->password);        }else{         return true;        }     } }        


    // funzione per la chiusura della connessione public
     
    function disconnetti() 
    {        
     if(
    $this->attiva)     
        {             
        if(
    mysql_close())   
                  {       
                   
    $this->attiva false;     
                   return 
    true;                 
                  }else
                     {        
                     return 
    false;     
                      }       
      } 
     }


    //funzione per l'inserimento dei dati in tabella  
     
    public function inserisci($t,$v,$r null)   
         {          
    if(isset(
    $this->attiva))        
       {   
         
    $istruzione 'INSERT INTO '.$t
                if(
    $r != null
                {             
                      
    $istruzione .= ' ('.$r.')'
                }        
           for(
    $i 0$i count($v); $i++)  
               {                
                 if(
    is_string($v[$i])) 
                    {                
                         
    $v[$i] = '"'.$v[$i].'"';   
                    }         
               }          
       
    $v implode(',',$v);     
        
    $istruzione .= ' VALUES ('.$v.')';   
       
    $query mysql_query($istruzione) or die (mysql_error());      
         }else
    {                 return 
    false;            
     }       
      } 

    ?>

    nella pagina in cui voglio inserire i dati del form nel db, ho inserito il seguente codice:
    Codice PHP:
    // valorizzazione delle variabili con i parametri dal form 
    if(isset($_POST['inserisci'])){   
      if(isset(
    $_POST['titolo'])){   
      
    $titolo addslashes(filter_var($_POST['titolo'], FILTER_SANITIZE_STRING));  
     }   
    if(isset(
    $_POST['immagine']))
    {    
     
    $immagineaddslashes(filter_var($_POST['immagine'], FILTER_SANITIZE_STRING));  
     } 
      if(isset(
    $_POST['testo']))
    {   
      
    $testo addslashes(filter_var($_POST['testo'], FILTER_SANITIZE_STRING));  
     }     

    // inclusione del file della classe 
    include "funzioni_mysql.php";
     
    // istanza della classe 
    $data = new MysqlClass(); 
    // chiamata alla funzione di connessione
     
    $data->connetti();   
         
    $t "post"# nome della tabella 
             
    $v = array ($titolo,$testo,$immagine,date("Y-m-d")); # valori da inserire 
                 
    $r =  "titolo_post,testo_post,immagine_post,data_post"# campi da popolare      
    // chiamata alla funzione per l'inserimento dei dati 
        
    $data->inserisci($t,$v,$r);    
         echo 
    "Articolo inserito con successo.";    
     
    // disconnessione  
       
    $data->disconnetti(); 
          }else{
    echo 
    "<p align='center'>Inserisci un nuovo articolo:

    <form name='form1' action='"
    .$_SERVER['PHP_SELF']."' method='post'>
    Inserisci il titolo: <input type='text' name='titolo' id='titolo'> 

    Inserisci l'URL dell'immagine se disponibile:
    <input type='text' name='immagine' id='immagine'>

     Inserisci il testo: <textarea name='testo' rows='8' cols='5'></textarea> 
    <input type='submit' name='inserisci' value='Inserisci'></form></p>"
    ;

    poi non ho inserito il codice per visualizzare i valori del database perchè già nell'inserimento dei dati nel database mi da il seguente errore:

    Parse error: syntax error, unexpected T_PUBLIC in /membri/ayoub93/funzioni_mysql.php on line 36
    cioè il codice che ho postato sulle funzioni nella riga in cui creo la funzione per l'inserimento dei dati in tabella, però non riesco a capire da cosa è causato...
    Ultima modifica di Alhazred; 19-03-2017 a 18:19

  4. #4
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    Le funzioni inserisci() e disconnetti() vanno all'interno della classe MysqlClass che invece stai chiudendo prima, questo dovrebbe essere il codice corretto.
    Codice PHP:
    // connessione a MySQL tramite mysql_connect() 
    $connessionemysql_connect("localhost","ayoub93","internaziona"); 


    class 
    MysqlClass {  
        
    // parametri per la connessione al database 
        
    private $nomehost "localhost";      
        private 
    $nomeuser "xxxxxxxxx";            
        private 
    $password "xxxxxxxxx";            
        
    // controllo sulle connessioni attive   
        
    private $attiva false;     
        
    // funzione per la connessione a MySQL 
        
    public function connetti()   {
        
            if(!
    $this->attiva) {
                
    $connessione mysql_connect($this->nomehost,$this->nomeuser,$this->password);
            }
            else{
                return 
    true;        
            }     
        } 
          
        
    // funzione per la chiusura della connessione public
        
    function disconnetti() {        
            if(
    $this->attiva){             
                if(
    mysql_close()){       
                    
    $this->attiva false;     
                    return 
    true;                 
                }else{        
                    return 
    false;     
                }       
            } 
        }


    //funzione per l'inserimento dei dati in tabella  
        
    public function inserisci($t,$v,$r null){          
            if(isset(
    $this->attiva)){   
                 
    $istruzione 'INSERT INTO '.$t
                
                 if(
    $r != null){             
                    
    $istruzione .= ' ('.$r.')'
                }        
                for(
    $i 0$i count($v); $i++){                
                    if(
    is_string($v[$i])){                
                         
    $v[$i] = '"'.$v[$i].'"';   
                    }         
                }          
                   
    $v implode(',',$v);     
                
    $istruzione .= ' VALUES ('.$v.')';   
                
    $query mysql_query($istruzione) or die (mysql_error());      
             }else{
                 return 
    false;
             }       
        }  

    come già detto da bstefano79 sei costretto a usare un DB perchè i dati che registri in sessione valgono solo per il browser che ha aperto la sessione e cessano di esistere non appena si chiude il la finestra del browser .... quindi non hai scelta o DB oppure file di testo .... e vedo che hai fatto quella giusta: DB

    Ultima modifica di Alhazred; 19-03-2017 a 18:18

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    grazie mille, non ne sarei più uscito fuori soltanto per due parentesi!xD
    ora riesco a inserire correttamente i dati nel form, quindi ho creato il codice per visualizzare gli articoli, ma mi da l'errore:
    Fatal error: Call to undefined method MysqlClass::query() in /membri/ayoub93/news.php on line 64
    il codice è il seguente (ho inserito solo il codice che rientra nell'uso del db,la linea 64 è quella in cui uso la query nella variabile $post_sql) :
    Codice PHP:
    <?php
    // inclusione del file di classe 
    include "funzioni_mysql.php";
     
    // istanza della classe
     
    $data = new MysqlClass(); 
    // chiamata alla funzione di connessione 
    $data->connetti(); 
    // query per l'estrazione dei record 
    $post_sql $data->query("SELECT * FROM post WHERE id_post = $id_post"); 
    // controllo sulla presenza in tabella del record corrispondente dell'id richiesto 
    if(mysql_num_rows($post_sql) > 0)
    {   
    // estrazione dei record  
       
    $post_obj $data->estrai($post_sql); 
        
    $id_post $post_obj->id_post;  
       
    $titolo_post stripslashes($post_obj->titolo_post);   
          
    $testo_post stripslashes($post_obj->testo_post); 
        
    $immagine_post stripslashes($post_obj->immagine_post);
         
    $data_post $post_obj->data_post;            
      
    // visualizzazione dei dati     
    echo "<h1>".$titolo_post."</h1>\n"
        echo  
    "[img]"$immagine_post "[/img]</img>\n"
            echo  
    "
    \n"
    ;   
      echo  
    "Pubblicato il [b]" $data->format_data($data_post) . "[/b]\n"
            echo  
    "
    \n"
    ;     
        echo 
    "

    "
    .$testo_post."</p>\n";   
           echo 
    " :: <a href=\"commenti.php?id_post=$id_post\">Inserisci un commento</a>\n"
            echo  
    "
    \n"

    }else{   
    // notifica in assenza di record 
      
    echo "Non esiste alcun post per questo id."

    // chiusura della connessione a MySQL 
    $data->disconnetti(); 
    ?>
    il codice di funzioni_sql.php è sempre uguale tranne l'inserimento della funzione "estrai".

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    grazie lo stesso, anche se questo problema l'ho risolto mancava la funzione query() che ho inserito...
    ora però mi da il seguente errore:
    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
    che però non riesco a capire quale sia la linea citata e neppure l'errore...
    il codice è il seguente(penso sia corretto):
    Codice PHP:
    <?php
    // inclusione del file di classe 
    include ("funzioni_mysql.php");
     
    // istanza della classe
     
    $data = new MysqlClass(); 
    // chiamata alla funzione di connessione 
    $data->connetti(); 
    // query per l'estrazione dei record 
    $post_sql $data->query("SELECT * FROM post WHERE id_post = $id_post"); 
    // controllo sulla presenza in tabella del record corrispondente dell'id richiesto 
    if(mysql_num_rows($post_sql) > 0)
    {   
    // estrazione dei record  
       
    $post_obj $data->estrai($post_sql); 
        
    $id_post $post_obj->id_post;  
       
    $titolo_post stripslashes($post_obj->titolo_post);   
          
    $testo_post stripslashes($post_obj->testo_post); 
        
    $immagine_post stripslashes($post_obj->immagine_post);
         
    $data_post $post_obj->data_post;            
      
    // visualizzazione dei dati     
    echo "<h1>".$titolo_post."</h1>\n"
        echo  
    "[img]"$immagine_post "[/img]</img>\n"
            echo  
    "
    \n"
    ;   
      echo  
    "Pubblicato il [b]" $data->format_data($data_post) . "[/b]\n"
            echo  
    "
    \n"
    ;     
        echo 
    "

    "
    .$testo_post."</p>\n";   
           echo 
    " :: <a href=\"commenti.php?id_post=$id_post\">Inserisci un commento</a>\n"
            echo  
    "
    \n"

    }else{   
    // notifica in assenza di record 
      
    echo "Non esiste alcun post per questo id."

    // chiusura della connessione a MySQL 
    $data->disconnetti(); 
    ?>
    Volevo chiedere un'altra cosa se fosse possibile...
    vorrei dividere la mia pagina in cui visualizzo l'articolo (che ha il codice soprastante), in più "pagine", una per ogni articolo e magari anche un indice in cui si può scegliere a che pagina si vuole andare (1-2-3-4-5).

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    Non riesco a togliere questo errore...
    ho provato a modificare un po' il codice per riuscire a fare gli indici per la pagina ma anche in questo caso mi da un errore:

    Fatal error: Method name must be a string in /membri/ayoub93/news.php on line 88
    cioè la seguente riga:
    Codice PHP:
     $post_sql=$data->$query("SELECT * FROM post LIMIT ".$limit_down.",".$limit_up." "); 
    il codice php intero è questo:
    Codice PHP:
    <?php
    // inclusione del file di classe 
    include ("funzioni_mysql.php");
     
    // istanza della classe
     
    $data = new MysqlClass(); 
    // chiamata alla funzione di connessione 
    $data->connetti(); 

    $num=1;
    if (isset(
    $_GET['news'])) 
    {
     
    $pagina=$_GET['news'];
    }
    else
    {
     
    $pagina=1;
    }

    //limite basso
    if ($pagina==1
    {
     
    $limite_down=0;
    }
    else
    {
     
    $limite_down=($pagina-1)*$num;
    }

    //limite alto
    $limit_up=$limit_down+($mun-1);

    // query per l'estrazione dei record 
    $post_sql=$data->$query("SELECT * FROM post LIMIT ".$limit_down.",".$limit_up." "); 

    // controllo sulla presenza in tabella del record corrispondente dell'id richiesto 
    if(mysql_num_rows($post_sql) > 0)
    {   
    // estrazione dei record  
       
    $post_obj $data->estrai($post_sql); 
        
    $id_post $post_obj->id_post;  
       
    $titolo_post stripslashes($post_obj->titolo_post);   
          
    $testo_post stripslashes($post_obj->testo_post); 
        
    $immagine_post stripslashes($post_obj->immagine_post);
         
    $data_post $post_obj->data_post;            
      
    // visualizzazione dei dati     
    echo "<h1>".$titolo_post."</h1>\n"
        echo  
    "[img]"$immagine_post "[/img]</img>\n"
            echo  
    "
    \n"
    ;   
      echo  
    "Pubblicato il [b]" $data->format_data($data_post) . "[/b]\n"
            echo  
    "
    \n"
    ;     
        echo 
    "

    "
    .$testo_post."</p>\n";   
           echo 
    " :: <a href=\"commenti.php?id_post=$id_post\">Inserisci un commento</a>\n"
            echo  
    "
    \n"

            echo  
    "<a href='news?pagina=$pagina+1'><a href='news?pagina=$pagina-1'>";

          
    }else{   
    // notifica in assenza di record 
      
    echo "Non esiste alcun post per questo id."

    // chiusura della connessione a MySQL 
    $data->disconnetti(); 
    ?>
    Grazie mille in anticipo!

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    8
    up

    Ho provato a consultare in modo più approfondito le guide di php.html.it ma nulla...
    da quello che ho capito dall'errore, dice che il metodo della query deve essere per forza una stringa, quindi non potrei utilizzare delle variabili all'interno di essa come ho già fatto...
    senza usare le variabili come si può visualizzare dei determinati valori??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.