Hem > PHP, Web > PHP & MySQL Del IV

PHP & MySQL Del IV

Vet att jag tidigare pratat om crud och lite annat. Men jag har inte täckt hur man kommer igång att arbeta med sin databas.

Så tanken är följande

  1. I Del I så skapar vi en tabell och stoppar in en rad som vi sedan hämtar (länk)
  2. I Del II bygger vi ett formulär som gör att vi kan fylla en klass t.ex. och skicka till databasen och få svar på det. (länk)
  3. I Del III har vi flera tabeller med många rader, då ska vi lära oss hur man ställer frågor till databasen mot många tabeller samtidigt och vad vi kan göra med det. (länk)
  4. I Del IV kommer vi uppdatera data i databasen (länk)
  5. I Del V kommer vi gå mer på djupet med MySQL-frågor.

Del IV skulle handla om uppdatera poster osv. Men vi börjar med att kolla på vad vi skapat hitills. När man jobbat ett litet tag och inte har planerat precis allt innan kan det hända som har hänt nu. Namnen på filerna är helt i oordning. Med lite tur har ni tänkt på detta redan innan. Vi ska kolla på vad vi har för filer.

  • root
    • index.php
    • laggtillelever.php
    • visaKlass.php
  • root\includes
    • config.php
    • CreateDB.php
    • CreateTable.php
    • CreateEleverTable.php
    • CreateKlass.php
    • displayKlass.php
    • addElev.php

Vad är det då för soppa jag menar? CreateTable skapar en tabell i en databas. CreateKlass.php lägger till en post i databasen. laggtillelever kallar på addelev. displayKlass.php hör ihop med index.php. Dessutom så har visaKlass.php inget med displayKlass.php att göra. Vi har fått en jättesoppa och när man arbetat ett tag med projektet så kommer det bli väldigt förvirrande. Laggtillelever.php påpekar dessutom elever i plural. Jag gör om mitt enligt följande. Kom ihåg att ändra i filerna som kallar på varandra.

  • root
    • index.php
    • nyelev.php
    • visaklass.php
  • root\includes
    • config.php
    • CreateDB.php
    • CreateTable.php
    • CreateEleverTable.php
    • nyklass.php
    • visaklasser.php
    • nyelev.php

    Vi bryr oss inte om Create-filerna. Dom är ju bara engångs-filer. Vi har nu namn på svenska som är mer enhetliga och som beskriver vad filen gör. Är kanske inte perfekt, men bättre.

    Så efter att ha bytt namn och uppdaterat i filerna så dom pekar rätt så ska vi nu börja med att uppdatera lite elever. Vi börjar med att lägga till ett fält i databasen. Skapa en fil som heter ModifyElever (vi följer namnstandard för engångs-filerna ;) ).

    Vi kom ju på att det är bra att ha med om eleven är pojke eller flicka av någon anledning.

    Den ser ut enligt följande:

    <?php
    include ‘config.php’;
    mysql_select_db($db_name,$link);
    $sqlModifyTable  = "ALTER TABLE `elever` ADD `elev_kon` ENUM( ‘pojke’, ‘flicka’ ) NULL AFTER `elev_far` ";
    $result = mysql_query($sqlModifyTable,$link);
    echo $result;
    ?>

    Vad vi också kan utläsa här är att elev_kon är en enum. Den kan alltså bara anta 2 olika värden. 1 och 0. men här översätts det till pojke/flicka. Hade vi satt den till NOT NULL hade plötsligt vår nyelev.php inte fungerat längre. Vilket är både dumt och bra. Man måste ha allting helt klart på en gång om man sätter not null. Sätter man null kan det ju slinka igenom saker som i man måste gå igenom och uppdatera senare. Men man kan skapa fältet där uppe och införa saker lite långsammare. Med not null blir det tvång eftersom det kan vara massa saker som inte fungerar efter.

    Iaf. Nu har vi ett “kön” så nu får vi ju gå in och uppdatera våra elever.

  • Vi skapar en uppdatera.php och lägger i includes och en som vi lägger direkt i roten. Så öppnar vi den i rot-katalogen. Den ska innehålla gräns-snitt och lite till. Vi matar den så att vi hämtar elevens unika id via uppdateraelev.php?eid=”värde”. Så letar vi upp eleven i databasen. Och lägger ut informationen som vi sedan skickar i ett formulär. Senare kanske ni har ett crud, eller väljer att använda samma fil med olika parametrar från formuläret för insert, update, delete och select. Men nu håller vi isär allt för tydlighetens skull.

    <?php
    include ‘includes/config.php’;
    $eid = $_GET['eid'];

    if($eid != null)
    {
        mysql_select_db($db_name, $link);
        $sqlSelectElev = "select * from elever where elev_id=$eid limit 1";
        $result = mysql_query($sqlSelectElev, $link);
        $rows = mysql_fetch_array($result);
        $numRows = mysql_num_rows($result);

    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title></title>
        </head>
        <body>
            <a href="index.php">Klassöversikt</a><br/>
    <?php if($numRows>0){ extract($rows); ?>
            <form method="post" action="includes/uppdateraelev.php">
                <input type="hidden" name="elev_id" value="<?php echo $eid; ?>"/>
                <input type="hidden" name="kid" value="<?php echo $klass_id; ?>"/>
                <input type="text" name="elev_fnamn" value="<?php echo $elev_fnamn; ?>"/><br>
                <input type="text" name="elev_enamn" value="<?php echo $elev_enamn; ?>"/><br>
                <input type="text" name="elev_far" value="<?php echo $elev_far; ?>"/><br>
                <label>Pojke<input type="radio" name="elev_kon" value="pojke" <?php if($elev_kon == ‘pojke’){ echo "checked";} ?>/></label>
                <label>Flicka<input type="radio" name="elev_kon" value="flicka" <?php if($elev_kon == ‘flicka’){ echo "checked";} ?>/></label><br>
                <input type="submit" value="Uppdatera elev"/><input type="reset"  value="Rensa"/>
            </form>
            <?php } else { ?><h1>Elev ej funnen</h1><?php } ?>
        </body>
    </html>

    Såhär ser vårt gränssnitt ut. Som sedan kallar på uppdatera elev. Här matar vi ut informationen i ett formulär. Vi hanterar också en radio-grupp här för vår enum elev_kon.

    Så nu kollar vi på uppdateraelev.php som ligger i includes. Den ska se ut enligt följande:

    <?php
    include ‘config.php’;
    //isset är ett bra kommando att kunna. Is Set. Kollar om en parameter finns.
    if(isset ($_POST))
    {
        extract($_POST);
        mysql_select_db($db_name, $link);
        $sqlUpdate = "update elever set elev_fnamn=’$elev_fnamn’,elev_enamn=’$elev_enamn’,elev_far=$elev_far,elev_kon=’$elev_kon’ where elev_id=$elev_id";
        $result = mysql_query($sqlUpdate,$link) or die(mysql_error());
        if($result == 0)
            $message = "<h1>N&aring;got gick fel…</h1>";
        if($result == 1)
            $message = "<h1>Elev uppdaterad</h1>";

        $message .= "<p><a href=’../visaklass.php?kid=$kid’>Visa klass</a></p>";
    }
        $message .= "<p><a href=’../index.php’>G&aring; tillbaka</a></p>";
        echo $message;
    ?>

    Så om du nu hoppar in på index.php och klickar runt så inser vi att vi fasiken inte kommer till våran nya fina uppdateraelev.php. Så vi får justera visaklass en aning (den i roten).
    Vi ersätter

    $data .= "<tr>";
    //nu matar vi ut namn som är ett "konstgjort" fält som består av förnamn och efternamn med ett mellanrum emellan. Gjort med concat
    $data .= "<td>$namn</td>";
    $data .= "</tr>";

    Med:

    $data .= "<tr>";
    //nu matar vi ut namn som är ett "konstgjort" fält som består av förnamn och efternamn med ett mellanrum emellan. Gjort med concat
    $data .= "<td>$namn – <a href=’uppdateraelev.php?eid=$elev_id’>Uppdatera elevinformation</a></td>";
    $data .= "</tr>";

    Nu tittar vi ju bara på elevernas namn här. Men outputen är ju inte så viktig utan hur den kommer dit i detta fall.

    Nu stegar vi oss igenom vad vi gjort. Börjar med index.php

    image

    Klickar på visa elever på klas 4c eller vilken klass du nu har elever i.

    Får något sånthär

    image

    Vi klickar på uppdatera elevinformation på Ollette Olsson

    Ändrar till Olle som är en pojke

    image

    Klickar på uppdatera elev. Så får vi

    image

    Vi klickar på Visa klass och det går nu en olle o klassen

    image

    Del IV done and done. Vi har kollat lite på namn på filer. Uppdaterat lite data och kors-tänk för vad man ska tänka på när man skapar fält osv. Bifogar filerna och en export av databasen i en ZIP-fil

    Download File – DEL IV
    Categories: PHP, Web Taggar:
    1. Inga kommentarer än.
    1. Inga trackbacks än.