CRUD - Toepassing in een website

Status
Niet open voor verdere reacties.

INeedtoGoOver

Gebruiker
Lid geworden
8 mrt 2018
Berichten
5
Hallo Allemaal,

Het is zeer belangrijk voor mijn overgang dat ik de volgende opdracht goed maak. Het enige probleem is dat ik en mijn 3 andere vrienden er niks van snappen. We krijgen ook geen uitleg dus we zijn nogal hopeloos. Ik kan op dit forum ook geen sqlite bestanden uploaden dus een ieder die mij wilt helpen zal ik dan een mailtje sturen met de bijbehorende sqlite! Wij hopen dat een van jullie ons kan helpen met deze opdracht! Hij moet voor 15 Maart af, dat is het niveau van onze school/docent...

Alvast bedankt!
 

Bijlagen

  • PO6 - CRUD toepassing ontwikkelen in PHP 5havo.docx
    95,5 KB · Weergaven: 51
De meest bekende toepassing van het gevraagde is een REST-api. Heb je al eens het volgende geprobeerd in google:

"simple php rest api"

Bij een aantal links wordt CRUD ook netjes uitgelegd. Het komt erop neer dat je een standaard interface maakt voor een aantal standaard operaties. Technisch gezien kun je met een 4*4 "stored procedures" in je database en 20 regels PHP per groep een "CRUD" functie maken. Voor pure basisfunctionaliteit. Vervolgens moet je dan nog je front-end de benodigde functies aan laten roepen.

je hebt een functie nodig die een nieuwe entry mogelijk maakt (en bijpassende SQL structuur en/of stored procedure)
je hebt een functie nodig die een bestaande entry aan kan passen (en bijpassende SQL structuur en/of stored procedure)
je hebt een functie nodig die alle bestaande informatie zichtbaar kan maken (en bijpassende SQL structuur en/of stored procedure)
je hebt een functie nodig die een bestaande entry kan verwijderen (en bijpassende SQL structuur en/of stored procedure)

En dat voor 4 tabellen. Dat is in principe alles.
 
Voor Have 5 een pittige opdracht. Of heb je een examenvak Webdesign of Programmeren ofzo?
 
De meest bekende toepassing van het gevraagde is een REST-api. Heb je al eens het volgende geprobeerd in google:

"simple php rest api"

Bij een aantal links wordt CRUD ook netjes uitgelegd. Het komt erop neer dat je een standaard interface maakt voor een aantal standaard operaties. Technisch gezien kun je met een 4*4 "stored procedures" in je database en 20 regels PHP per groep een "CRUD" functie maken. Voor pure basisfunctionaliteit. Vervolgens moet je dan nog je front-end de benodigde functies aan laten roepen.

je hebt een functie nodig die een nieuwe entry mogelijk maakt (en bijpassende SQL structuur en/of stored procedure)
je hebt een functie nodig die een bestaande entry aan kan passen (en bijpassende SQL structuur en/of stored procedure)
je hebt een functie nodig die alle bestaande informatie zichtbaar kan maken (en bijpassende SQL structuur en/of stored procedure)
je hebt een functie nodig die een bestaande entry kan verwijderen (en bijpassende SQL structuur en/of stored procedure)

En dat voor 4 tabellen. Dat is in principe alles.

Hartstikke bedankt voor het reageren! Het enige probleem is dus... we weten niet hoe we zoiets voor elkaar moeten krijgen. We hebben geen bronnen of uitleg om hierop door te halen. Is er misschien een manier waarop je het uit kan leggen/voor kan doen zodat je ons leven makkelijker kan maken? Zou echt geweldig zijn!!!!
 
Begin in ieder geval even met de zoekopdracht die ik al voorstelde.

Je moet het in tweeën splitsen, zoals ik al een beetje aangaf in mijn vorige antwoord. je hebt een interface nodig die 4 dingen moet kunnen, voor 4 onderdelen. Dat deel moet je grotendeels zelf uitwerken. Waar de knoppen staan, de invoervakken, de controle van de juiste invoer e.d.

Een voorbeeld staat al duidelijk in de word-file die je hebt bijgevoegd (plaatje op pag 3). De gekozen oplossing is daar:
- bovenin een header met CRUD: film toevoegen (C) / film wijzigen (U) verwijderen (D) / film overzicht (R)
- onderin de benodigde informatie en vakken voor de actie toevoegen (C)
- waarschijnlijk ook forms voor overzicht (R) etc.
- hier "boven" (onder de 'home' link) verwacht ik een algemeen menu met: "film beheer" "acteur beheer" "regisseur beheer" en "genre beheer" volgens de opdracht (1 ... Het moet allemaal bereikbaar zijn vanuit de menustructuren)

Dat is de front-end kant.

Aan de back-end moet je het mogelijk maken deze acties uit te voeren. Je hebt daar de database layout nodig en de informatie die je krijgt uit je front-end. zoiets als (geen echte goede PHP natuurlijk :p ):

PHP:
functie create_film_action ($naam,$regisseurs,$acteurs,$genres,$category,$waarschuwingen)
{
    $filmnr = sql(INSERT INTO film $naam,$category)

    foreach ($regisseurs as $regisseur)
    {
         sql(INSERT INTO filmregisseur $filmnr,$$regisseur)
    }

    foreach ($acteurs as $acteur)
    {
         sql(INSERT INTO filmacteur $filmnr,$acteur)
    }

    foreach ($genres as $genre)
    {
         sql(INSERT INTO filmgenre $filmnr,$genre)
    }
    foreach ($waarschuwingen as $waarschuwing)
    {
         sql(INSERT INTO filmwaarschuwing $filmnr,$waarschuwing)
    }
}

uiteraard in pseudocode en de "film functies" zijn verreweg de ingewikkeldste van de benodigde functies. blijft over om de informatie van de front-end aan te leveren aan de back-end en ben je klaar. voorbeeldcode is gebaseerd op de layout van pagina 2 van je word file. lees en typefouten voorbehouden ;)
 
Laatst bewerkt:
Begin in ieder geval even met de zoekopdracht die ik al voorstelde.

Je moet het in tweeën splitsen, zoals ik al een beetje aangaf in mijn vorige antwoord. je hebt een interface nodig die 4 dingen moet kunnen, voor 4 onderdelen. Dat deel moet je grotendeels zelf uitwerken. Waar de knoppen staan, de invoervakken, de controle van de juiste invoer e.d.

Een voorbeeld staat al duidelijk in de word-file die je hebt bijgevoegd (plaatje op pag 3). De gekozen oplossing is daar:
- bovenin een header met CRUD: film toevoegen (C) / film wijzigen (U) verwijderen (D) / film overzicht (R)
- onderin de benodigde informatie en vakken voor de actie toevoegen (C)
- waarschijnlijk ook forms voor overzicht (R) etc.
- hier "boven" (onder de 'home' link) verwacht ik een algemeen menu met: "film beheer" "acteur beheer" "regisseur beheer" en "genre beheer" volgens de opdracht (1 ... Het moet allemaal bereikbaar zijn vanuit de menustructuren)

Dat is de front-end kant.

Aan de back-end moet je het mogelijk maken deze acties uit te voeren. Je hebt daar de database layout nodig en de informatie die je krijgt uit je front-end. zoiets als (geen echte goede PHP natuurlijk :p ):

PHP:
functie create_film_action ($naam,$regisseurs,$acteurs,$genres,$category,$waarschuwingen)
{
    $filmnr = sql(INSERT INTO film $naam,$category)

    foreach ($regisseurs as $regisseur)
    {
         sql(INSERT INTO filmregisseur $filmnr,$$regisseur)
    }

    foreach ($acteurs as $acteur)
    {
         sql(INSERT INTO filmacteur $filmnr,$acteur)
    }

    foreach ($genres as $genre)
    {
         sql(INSERT INTO filmgenre $filmnr,$genre)
    }
    foreach ($waarschuwingen as $waarschuwing)
    {
         sql(INSERT INTO filmwaarschuwing $filmnr,$waarschuwing)
    }
}

uiteraard in pseudocode en de "film functies" zijn verreweg de ingewikkeldste van de benodigde functies. blijft over om de informatie van de front-end aan te leveren aan de back-end en ben je klaar. voorbeeldcode is gebaseerd op de layout van pagina 2 van je word file. lees en typefouten voorbehouden ;)

Hartstikke bedankt! Ik hoop dat ik het voor mekaar krijg! In ieder geval al meer van jou geleerd dan het hele jaar van mn docent haha!
 
Ik heb verder geen oordeel over de aanpak. persoonlijk vind ik de gangbare aanpak die je in veel apps ziet overzichtelijker:

altijd de "R" lijst uitvoeren; een knop "nieuw toevoegen" (C) en bij selectie van een item uit de "R" lijst de knoppen "verwijderen" (D) en "aanpassen" (U) oplichten en dan direct uitvoeren op het gekozen item.

voor opdracht onderdeel 2 kom je waarschijnlijk met "SELECT COUNT() from film" een heel eind (*hint*)
 
dus je zal ook een database connectie nodig hebben.
PHP:
    private function connect($host,$dbname,$usr,$pwd){
       $conn = 'mysql:host='.$host.';dbname='.$dbname;
        //odbc_connect($conn,$usr,$pwd) or die(odbc_errormsg() );
        try{
            $this->_dbConn = new \PDO($conn, $usr, $pwd,self::getoptions());
            //$this->_dbConn->exec('SET GLOBAL general_log_file = "/log/mysql.log";');
            //$this->_dbConn->exec("SET GLOBAL general_log = 'ON';");
            return  $this->_dbConn;
        }catch(Exception $ex){
            return false;
        }
    }
$db = connect(...,...,...,...);


volgende ziet de aanroep er zo uiçt
PHP:
$DB = \DBConn::GET();
$dbStmt = $this->DB->prepare($sql));
$dbStmt->execute($param);
if($row = $dbStmt->fetch(\PDO::FETCH_ASSOC)){
  if($images==true){
        $row...

}
iets ingewikkelder met een classes als je dit al zag...
dit is een volledige singleton connection waar ik het deel van de connectie uitplukte
PHP:
<?php

//namespace autosystem;
class DBConn{
    static private $_obj = null;
    private $_dbConn = null;
    static protected $_DBprefix = '';
    static protected $_CharSet;
    static public $_Collate ;
    static public $connected ;
    private $config ;
    public function __construct($issuper = false,$isadmin = false) {
        $url='/failed';
        $this->config = './includes'..DIRECTORY_SEPARATOR.'Db.ini.php';
        if(file_exists($this->config)&& is_readable($this->config)){
            try{
                if($config = parse_ini_file($this->config)){//@SEE if charset not exist WHITE SCREEN OF DEAD
                    self::$_CharSet = $config['CHARSET'];
                    self::$_Collate = $config['COLLATE'];
                    self::$connected =$this->connect($config['HOST'],$config['DATABASE'],$config['USER'],$config['PASSWORD']);     
                }
                if(!self::$connected){die('no connection remove configfile');}
            }catch(Exception $ex){
                die('YOU KILLING ME ? CONNECTION FAILED!o i am sorry i dont work today maybe later, if admin has seen this fault.');
            }
        }else{
            die(' <!--FATALE FOUT... '.' DATABASE CONFIG-->');
        }
    }
    /**
     * DBConn::GET()
     * @return connection
     */
    static public function GET(){
        if(!(self::$_obj instanceof self)){
            self::$_obj=new self();
        }
        return self::$_obj->_dbConn;
    }
    private function connect($host,$dbname,$usr,$pwd){
       $conn = 'mysql:host='.$host.';dbname='.$dbname;
        //odbc_connect($conn,$usr,$pwd) or die(odbc_errormsg() );
        try{
            $this->_dbConn = new \PDO($conn, $usr, $pwd,self::getoptions());
            //$this->_dbConn->exec('SET GLOBAL general_log_file = "/log/mysql.log";');
            //$this->_dbConn->exec("SET GLOBAL general_log = 'ON';");
            return  $this->_dbConn;
        }catch(Exception $ex){
            return false;
        }
    }
    /**
     * DBConn::getoptions()
     * @return array()
     */
    private function getoptions(){
        return array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \''.self::$_CharSet.'\'',\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION);
    }
    static public function PREFIX(){
        return self::$_DBprefix;
    }
    static public function getTableNameFor($key){
        return self::PREFIX().$key;
    }
    static public function getCHARSET(){
        return self::$_CharSet;
    }
    static public function getCOLLATE(){
        return self::$_Collate;
    }
    /**
     * DBConn::__processlist()
     * @param bool $kill
     * @return
     */
    public function __processlist($kill = false){
        $query = 'SHOW PROCESSLIST -- ' . uniqid('pdo_mysql_close ', 1);
        $list  = $connection->query($query)->fetchAll(\PDO::FETCH_ASSOC);
        foreach ($list as $thread) {
            if ($thread['Info'] === $query) {
                if($kill == true){
                    return $connection->query('KILL ' . $thread['Id']);
                }else{
                    return false;
                }
            }
        }
        return false;
    }
} 
?>
 
De database is echter SQLITE volgens de briefing. Dan vallen stored precedures buiten de mogelijkheden en ook een aantal van connection methods. Verder niets mis met het voorbeeld.
 
Iedereen bedankt voor de hulp! Moet hem morgen inleveren en we gaan voor de 3 helaas. Het is ons niet gelukt... Volgend jaar beter
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan