• User Attivo

    Consigli php

    Salve a tutti,

    Sono un appassionato di php, scrivo php procedurale, non so programmare a oggetti e non so usare framework.

    La mia domanda è: pubblicare pagine web con php procedurale, è obsoleto? Sconsigliabile?

    Grazie a tutti per le risposte
    Buona serata


  • User Attivo

    @enricocarli said:

    La mia domanda è: pubblicare pagine web con php procedurale, è obsoleto? Sconsigliabile?

    No per entrambe, semmai dipende da cosa devi fare.

    Saluti.


  • User Attivo

    Diciamo che per progetti complessi è meglio usare un framework?


  • User Attivo

    @enricocarli said:

    […]per progetti complessi è meglio usare un framework?

    Rientra nelle possibili soluzioni.

    Saluti.


  • Moderatore

    Io ero come te, poi per un sito complesso ho imparato funzioni e classi e non tornerei più indietro.
    E' più rapido e ordinato.


  • User Attivo

    io uso molto le funzioni, diciamo che è meglio usare classi e framework, ma nel frattempo posso pubblicare le mie pagine anche se sono in php procedurale giusto?

    altra domanda, voi come strutturate le vostre applicazioni?

    io faccio così:

    nella root: index.php

    [PHP]
    <?php
    include "inc/config.php";
    include "inc/functions.php";

    if(isset($_GET['app'])){
        if (in_array("views/".$_GET['app'].".php", $views)) {
            if (in_array("app/".$_GET['app'].".php", $app)) {
                include "app/".$_GET['app'].".php";
            }
            include "views/".$_GET['app'].".php";
        } else {
            echo "404";
        }
    } else {
        if($current_url==$base_url){
            if (in_array("app/".$default_view.".php", $app)) {
                include "app/".$default_view.".php";
            }
            include "views/".$default_view.".php";
        } else {
            echo "404";
        }
    }
    

    ?>
    [/PHP]

    in config.php

    [PHP]
    <?php

    header('Content-Type: text/html; charset=utf-8');
    
    $views = glob('views/*.php');
    $app = glob('app/*.php');
    $default_view ="home";
    
    function dbconn($type){   
        switch($type){   
            case "myapp_moto":
                ob_start();
                ini_set('display_errors', 1);
                $db1 = mysql_connect("localhost", "root", "mysql");
                mysql_select_db("myapp_moto", $db1);
            break;   
            case "codeigniter":
                ob_start();
                ini_set('display_errors', 1);
                $db2 = mysql_connect("localhost", "root", "mysql");
                mysql_select_db("codeigniter", $db2);
            break;   
        }
    }
    

    ?>
    [/PHP]

    poi 2 cartelle "app" e "view" nella prima il codice php che estrae dati dal db e mette in un array,
    e nella seconda le view che espongono i dati.

    Secondo voi è una strada corretta? come dovrei fare se volessi usare le classi?

    grazie mille per le risposte
    buona domenica


  • Moderatore

    Io lo trovo un po' laborioso ma se ti trovi bene così...

    Con le classi a prescindere è più efficente chiamare le varie funzioni/oggetti.


  • User Attivo

    Puoi postare un esempio di codice?


  • User Attivo

    @enricocarli said:

    io uso molto le funzioni, diciamo che è meglio usare classi e framework, ma nel frattempo posso pubblicare le mie pagine anche se sono in php procedurale giusto?

    Nessuno te lo vieta.

    @enricocarli said:

    altra domanda, voi come strutturate le vostre applicazioni?

    io faccio così:

    nella root: index.php

    [PHP]
    <?php
    include "inc/config.php";
    include "inc/functions.php";

    if(isset($_GET['app'])){
        if (in_array("views/".$_GET['app'].".php", $views)) {
            if (in_array("app/".$_GET['app'].".php", $app)) {
                include "app/".$_GET['app'].".php";
            }
            include "views/".$_GET['app'].".php";
        } else {
            echo "404";
        }
    } else {
        if($current_url==$base_url){
            if (in_array("app/".$default_view.".php", $app)) {
                include "app/".$default_view.".php";
            }
            include "views/".$default_view.".php";
        } else {
            echo "404";
        }
    }
    

    ?>
    [/PHP]

    in config.php

    [PHP]
    <?php

    header('Content-Type: text/html; charset=utf-8');
    
    $views = glob('views/*.php');
    $app = glob('app/*.php');
    $default_view ="home";
    
    function dbconn($type){   
        switch($type){   
            case "myapp_moto":
                ob_start();
                ini_set('display_errors', 1);
                $db1 = mysql_connect("localhost", "root", "mysql");
                mysql_select_db("myapp_moto", $db1);
            break;   
            case "codeigniter":
                ob_start();
                ini_set('display_errors', 1);
                $db2 = mysql_connect("localhost", "root", "mysql");
                mysql_select_db("codeigniter", $db2);
            break;   
        }
    }
    

    ?>
    [/PHP]

    poi 2 cartelle "app" e "view" nella prima il codice php che estrae dati dal db e mette in un array,
    e nella seconda le view che espongono i dati.

    Secondo voi è una strada corretta? come dovrei fare se volessi usare le classi?

    grazie mille per le risposte
    buona domenica

    Cocordo con l'osservazione fatta da Ivan88 sul codice laborioso.

    A mio avviso il consiglio migliore è quello di studiare a capofitto su più tutorial possibili. Poi con il tempo, l'esperienza e vedere quei codici esemplificativi in aggiunta a quelli che troverai nel corso delle ricerche ti aiuteranno a scrivere codice di più professionali e di migliore comprensione.

    Saluti.


  • User Attivo

    Grazie mille e scusate il ritardo nella risposta; sto sperimentando con php a oggetti; un esempio: vorrei fare un blog che pesca da 2 db; ho scritto queste classi:

    myclass.php
    [PHP]
    <?php
    class Examples{
    private $db;

        public function __construct(){
            $this->db = new mysqli('localhost', 'root', 'hal9000', 'examples');
        }
    
        public function get_actors(){
            $actors = array();
            $query = $this->db->query('SELECT * FROM actor LIMIT 10');
            while ($row = $query->fetch_array(MYSQLI_ASSOC)){
                $actors[] = array(
                    "id" => $row['actor_id'],
                    "fullname" => $row['fullname']
                );
            }
            return $actors;
        }
    
        public function __destruct(){
            mysqli_close($this->db);
        }
    }
    
    class Codeigniter{
        private $db;
    
        public function __construct(){
            $this->db = new mysqli('localhost', 'root', 'hal9000', 'myapp_moto');
        }
    
        public function get_actors(){
            $actors = array();
            $query = $this->db->query('SELECT * FROM articoli LIMIT 10');
            while ($row = $query->fetch_array(MYSQLI_ASSOC)){
                $actors[] = array(
                    "id" => $row['id'],
                    "titolo" => $row['titolo']
                );
            }
            return $actors;
        }
    
        public function __destruct(){
            mysqli_close($this->db);
        }
    }
    
    $attori = new Examples();
    echo "<pre>";
    print_r($attori->get_actors());
    echo "</pre>";
    
    $news = new Codeigniter();
    echo "<pre>";
    print_r($news->get_actors());  
    echo "</pre>";    
    

    ?>
    [/PHP]

    potrei includere la classe in tutte le view, e farmi un metodo per ogni view in base a quello che mi serve? è corretta una cosa del genere secondo voi?

    grazie mille e buon week end


  • User Attivo

    Anzi ancora meglio:

    [PHP]
    <?php
    class Examples{
    private $db;

        public function __construct(){
            $this->db = new mysqli('localhost', 'root', 'hal9000', 'examples');
        }
    
        public function wolly($myquery,$myfields){
            $array_query = array();
            $array_fields = explode(",", $myfields);
            $query = $this->db->query($myquery);
            $i = 0;
            while ($row = $query->fetch_array(MYSQLI_ASSOC)){
                foreach ($array_fields as $field) {
                    $array_query*[$field] = $row[$field];
                }
                $i++;
            }
            return $array_query;
        }
    
        public function __destruct(){
            mysqli_close($this->db);
        }
    }
    
    class Codeigniter{
        private $db;
    
        public function __construct(){
            $this->db = new mysqli('localhost', 'root', 'hal9000', 'myapp_moto');
        }
    
        public function wolly($myquery,$myfields){
            $array_query = array();
            $array_fields = explode(",", $myfields);
            $query = $this->db->query($myquery);
            $i = 0;
            while ($row = $query->fetch_array(MYSQLI_ASSOC)){
                foreach ($array_fields as $field) {
                    $array_query*[$field] = $row[$field];
                }
                $i++;
            }
            return $array_query;
        }
    
        public function __destruct(){
            mysqli_close($this->db);
        }
    }
    
    $attori = new Examples();
    echo "<pre>";
    print_r($attori->wolly('SELECT * FROM actor LIMIT 5','actor_id,fullname,last_update')); 
    echo "</pre>";
    
    $news = new Codeigniter();
    echo "<pre>";
    print_r($news->wolly('SELECT * FROM articoli LIMIT 5','id,titolo,sottotitolo'));  
    echo "</pre>";    
    

    ?>
    [/PHP]

    Così risparmio codice, meglio no?


  • Super User

    Le classi sono una gran cosa per applicazioni complesse... se però si comincia ad usarle anche per scrivere uno stupido guestbook... allora non ci siamo proprio!


  • User Attivo

    Ciao enigma, grazie per la risposta intanto, scusa ma sono un novellino col php; scrivo php procedurale, uso le funzioni ma vorrei passare alla oop, credo sia meglio conoscere come funziona, comunque il codice sopra è un esempio, vorrei solo capire come e quando usare la oop. Grazie mille intanto e buona serata