Poziv metode unutar hyperlinka PHP

Discussion in 'Operativni sistemi, aplikacije i programiranje' started by Kondenzator, Jan 21, 2013.

  1. Kondenzator

    Kondenzator Novi član

    Pozdrav,

    Radim na jednom malom projektu i došao sam do jednog dijela gdje sam "zaribao" i ne mogu nikako da rijesim ovo. Mozda imam pogrešan pristup, ne znam.. Nisam pametan :)

    list.php
    Code:
    <?php
    Class User {
        public $id;
       
        public $first_name;
        public $last_name;
        public $comments;
        
        
     public function __construct($Id,$name, $secondName, $comment){
            $this->id=$Id;
            $this->first_name=$name;
            $this->last_name=$secondName;
            $this->comments=$comment;
        
        }
        
        public function getID(){
            return  $this->id;
        }
        
         public function getFirstName(){
            return $this->first_name;
        }
        
         public function getLastName(){
            return $this->last_name;
        }
        
         public function getComment(){
            return $this->comments;
        }
    
    public function save(){
            
        }
         
        
        public static function getAllUsers(){
            $upit="SELECT * FROM user";
            if($querry_run=mysql_query($upit))
            {
                while($querry_row=mysql_fetch_assoc($querry_run))
                {
                    
                    $niz[]= new User($querry_row['id'],$querry_row['FirstName'],$querry_row['LastName'],$querry_row['Comment']);
                    
                }
                return $niz;
            }
            else
            {
                echo 'Ne moRe';
            }
        }
        
        public function if_delete(){        ->>>>>>> OVDJE JE POTENCIJALNO PROBLEM
            if($_GET['run_func'] == yes) {
            delete();
            }
            
        }
        public function delete(){      ->>>>>>> OVDJE JE POTENCIJALNO PROBLEM
           if (isset($_GET['id']) && is_numeric($_GET['id']))
           {
            $id = $_GET['id'];
            $result = mysql_query("DELETE FROM user WHERE id=$id")
            or die(mysql_error());
           }
        }
    
    
    }
    
    a sada nastavak list.php gdje ce biti hyperlnik preko kojeg zelim da pozovem metod delete()
    Code:
    require 'db.php';
    
    
    $Nestoo =new User(0,'admin','admin','neki admin');
    
    $harko=$Nestoo->getAllUsers();
    $max = sizeof($harko);
    $result = mysql_query("SELECT * FROM user") 
                    or die(mysql_error());  
    
    
    
    
    echo "<table border='1'>
    <tr>
    <th>ID</th>
    <th>First Name</th>
    <th>Last Name</th>
    <th>Comment</th>
    </tr>";
    
    //
    //while($row = mysql_fetch_array( $result )){
      for($i=0;$i<$max;$i++){ 
        echo "<tr>";
        echo "<td>" . $harko[$i]->getID(). "</td>";
        echo "<td>" . $harko[$i]->getFirstName() . "</td>";
        echo "<td>" . $harko[$i]->getLastName() . "</td>";
        echo "<td>" . $harko[$i]->getComment() . "</td>";
        echo "<td>" . '<form action="update-user.php" method="POST" >
                       <input name="custom" type="hidden" value="$harko[$i]->getID()" />
                       <input type="submit" value="Update">
                       </form>'
                       . "</td>";
        echo "<td>" . '<a href="delete.php?id=' . $harko[$i]->getID() . '">Link to First</a>' . "</td>";   ->>> OVDJE JE POTENCIJALNO PROBLEM
    
        echo "</tr>";
    
       }
    // zatvaram tabelu
    echo "</table>";
    
    ?>
    
    Objašnjenje problema:

    U list.php imam ispisanu tabelu koja pored ID,FIRSTNAME,LASTNAME,COMMENT ima polje DELETE za brisanje korisnika.

    Zanima me kako da implementiram da preko linka:
    '<a href="delete.php?id=' . $harko[$i]->getID() . '">Link to First</a>' . "</td>"; ->>> OVDJE JE POTENCIJALNO PROBLEMio

    pozovem metod delete() i da obrišem user-a iz tabele. Da li je pristup pogrešan?

    Napomena: Mora mi sve biti u ovom fajlu dakle nemam dozvolu da pravim dodatni fajl npr. delete.php.

    Nadam se da ste skontali da nisam bio previse konfuzan...
     
  2. maksumics

    maksumics Novi član

    To nije pogrešan pristup, pogrešan pristup bi bio trpati sve u isti fajl. Ako ne želiš izravno pozivati delete.php, možeš to uraditi preko jQuery-a/AJAX-a, da on asihrono to odradi za tebe.
     
  3. selvin

    selvin Moderator

    Prvo druze tema je stara 2 godine, a drugo odgovor ti nema nikakvog smisla. Covjek ima klasu User, i ako hoce da brise tog usera, na objektu tipa User treba pozvati metod delete(), kakav sad crni delete.php?
     
  4. maksumics

    maksumics Novi član

    Nisam vidio da je ovako staro, pa bila je pri vrhu, nisam znao da je forum neaktivan...

    Odgovor mi je na mjestu, ali ova arhitektura njegova nije na mjestu, delete.php kojem se proslijedi id preko query stringa, u delete.php se pozove funkcija delete($id), kojoj se proslijedi taj id. Sa puno stanovišta je bolje riješenje, prvenstveno agilnost i TDD. Naravno to se odradi preko AJAXA, korisnik ništa ne zna, samo klikne delete i to je to, u pozadini se sve odradi. Pogledaj kako će ti sugeristai bilo koji MVC framework da to odradiš...

    Pozdrav!
     
  5. selvin

    selvin Moderator

    Odgovor ti je na mjestu a spominjes MVC i delete.php fajl zajedno? :D

    Kad si se vec javio i digao temu iz mrtvih da ti objasnim.

    Kao prvo, u vise MVC framework-a za PHP sam radio nego sto ih ti znas nabrojati tako da nemam sta gledati sta mi sugerises.

    Kao drugo, proslijedjivanje ID-a preko "query stringa" je totalno pogresno. Vecina MVC frameworka po defaultu zabranjuje brisanje entity-a ako je ID proslijedjen preko GET parametra, iz sigurnosnih razloga naravno, tj. brisanje se vrsi samo preko ID-a kao POST parametra. Ukoliko ima definisan routing na drugi nacin, tj. prakticno da imas REST implementiran na kontrolerima, onda mozda ces i moci izbrisati na taj nacin.

    Kao trece kad vec spominjes MVC, a izgleda ne znas kako to radi, ne postoji delete.php fajl (niti bilo kakav takav fajl sto ti spominjes) u MVC-u vec bi on u svom primjeru (da mu je koristen MVC) radio POST na delete akciju u nekom kontroleru npr. UserController. A ne znam kako da ti padne na pamet MVC i ta sva pogresna logika, jer koliko vidis momak ovdje ima list.php, require 'db.php', dohvata recorde rucno koriste mysql_query itd.

    AJAX, koji spominjes nema nikakve veze sa logikom programiranja tako da ako uradis sa ili bez njega, svejedno ces raditi neki request na taj URL i koristio ga ili ne, svejedno neces moci pozvati neki lijevi metod iz html-a u nekoj klasi koja nije povezana ni sa cim (jer je to zapravo pokusaj gornjeg koda).

    Momak ovdje ima mjesavinu svega i svacega i to sve u list.php fajlu, tu ima User klasu u kojoj kreira user-a preko konstuktora a nema nikakav persistance na njemu odradjen, jer je pokusao nesto sam izvesti. Pa mu se u tom istom fajlu izlistavaju useri i onda pokusava direktno iz tog list.php fajla odjedanput da stvori objekat i izbrise ga, valjda nekako magicno. Pa onda uradi getAllUsers na User entity-u i onda opet ispod toga dohvata ih ponovo preko mysql_query-a u list.php. Pomijesao je milion nekih stvari u jednom jedinom fajlu, od pokusaja objektnog programiranja do nerazumijevanja kreiranja i persistencije objekata, pa do nerazumijevanja funkcionisanja web-a i web request-a i pozivanja metoda na webu kroz linkove. I ti mu onda jos na kraju dodjes i spominjes MVC koji ni sam ne razumijes.
     
  6. maksumics

    maksumics Novi član

    Moja greška je bila što sam se na ovaj forum i registrovao, al dobro, a drugo stvarno nisam trebao dizati temu iz mirtvih...

    Na MVC sam mislio samo kao primjer strukture, ništa drugo.

    MVC radim 4 godine, što ASP.NET, što CakePHP, što Symfony... Nemaš mi šta pričat o GET-u, routingu i ostalom.

    Neću više ovamo ni zalazit, radi dobrosusjedskih odnosa, pozz. :smt006