Avatar billede Malle93 Nybegynder
11. januar 2011 - 09:07 Der er 17 kommentarer

PHP koder til database virker ikke!

Det her er sidste dag, jeg har til at lave forberedelser til min grundforløbsprøve indenfor web-integrator. Det er meningen jeg skal lave en kalender, men uden at den ligner en. Det skal være muligt at oprette events i den. Så det jeg har gjort, er at oprette simple tekstfelter i min php fil som hedder det tilsvarende i databasen. Jeg kan godt skrive inde fra databasen og så bliver det vist på siden, men jeg kan ikke skrive på min side og så det går ind i databasen. Den vil ikke give mig lov til at oprette eller redigere arrangementer, men jeg kan godt slette. Jeg har bøvlet med de her koder i 3 dage men jeg har set mig blind og jeg kan simpelthen ikke finde fejlen, håber i kan hjælpe. Her er koden:


<?php

if (isset($_POST['login']))
{
    if(($_POST['username']!=null) && ($_POST['password'] != null))
    {
       
        $result = mysql_query("SELECT * FROM admin");
        while($row = mysql_fetch_array($result))
        {
            if (($_POST['username'] == $row['username']) && ($_POST['password'] == $row['password']))
            {
                $_SESSION['user'] = 1;

                $_SESSION['a_id'] = $row['a_id'];
                $_SESSION['username'] = $row['username'];
            }
        }
   
    }
}


if($_SESSION['user'] == 1)  // hvis brugeren er logget ind
{
   
    //echo "Velkommen ".$_SESSION['user']['login']."! ";
    echo "Velkommen ".$_SESSION['username']."! ";
   
    echo '<a href="?logout=ja">Logout</a>';
    echo "<br /><br />";

   
    if (isset($_GET['delete']))
    {
        mysql_query('DELETE FROM kalender WHERE id='.$_GET['delete'].';');
        echo "Arrangementet er slettet";
    }
   
    if (isset($_POST['dag'], $_POST['dato'], $_POST['tid'], $_POST['sted'], $_POST['beskrivelse'], $_POST['id']))
    {
        mysql_query("UPDATE kalender SET dag='".$_POST['dag']."', dato='".$_POST['dato']."', tid='".$_POST['tid']."', sted='".$_POST['sted']."', beskrivelse='".$_POST['beskrivelse']."', WHERE id=".$_GET['edit'].";");
        echo "Nyheden er opdateret";
    }
   
    elseif (isset($_POST['dag'], $_POST['dato'], $_POST['tid'], $_POST['sted'], $_POST['beskrivelse']))
    {
        mysql_query("INSERT INTO kalender SET dag='".$_POST['dag']."', dato='".$_POST['dato']."', tid='".$_POST['tid']."', sted='".$_POST['sted']."', beskrivelse='".$_POST['beskrivelse'].";");
    }
   
   
    if (isset($_GET['edit']))
    {
   
        $result = mysql_query("SELECT * FROM kalender WHERE id=".$_GET['edit'].";");
        $row    = mysql_fetch_assoc($result)
       
?>
        <h2>Rediger et arrangement</h2>
        <form action="<?php echo $current_page ?>" method="post">
            <input type="hidden" name="ID" value="<?php echo $row['id'] ?>" />
            Dag: <br /> <input type="text" name="dag" value="<?php echo $row['dag'] ?>" /><br />
            Dato: <br /><input type="text" name="dato" value="<?php echo $row['dato'] ?>" /><br />
            Tid: <br /><input type="text" name="tid" value="<?php echo $row['tid'] ?>" /><br />
            Sted: <br /><input type="text" name="sted" value="<?php echo $row['sted'] ?>" /><br />
            Beskrivelse: <br /> <textarea name="beskrivelse" cols="30" rows="10"><?php echo $row['beskrivelse'] ?>
Avatar billede repox Seniormester
11. januar 2011 - 09:12 #1
Får du nogen fejlmeddelelser?
Avatar billede Malle93 Nybegynder
11. januar 2011 - 09:14 #2
Nej, der sker intet. Jeg taster det ind, trykker gem og så opdaterer den lige og så er tekstfelterne tomme igen men der er ikke sket noget.
Avatar billede repox Seniormester
11. januar 2011 - 09:24 #3
Det er altså også noget pudseløjerligt kode - skal det hele foregå i en og samme fil? Og har I ikke fået information om SQL injections?
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:25 #4
Kommer du nogensinde IND i din if?

if (isset($_POST['dag'], $_POST['dato'], $_POST['tid'], $_POST['sted'], $_POST['beskrivelse'], $_POST['id']))
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:27 #5
name="ID
$_POST['id']
Avatar billede Malle93 Nybegynder
11. januar 2011 - 09:28 #6
Det kode har virket før, har lavet en gæstebog som virker helt fint i samme system.

- Ja men jeg aner ikke hvad der er galt der.
Avatar billede repox Seniormester
11. januar 2011 - 09:30 #7
#5
Godt spottet - jeg studsede lidt over login iterationen - om det virkelig er metoden de lærer på webintegrator uddannelsen, for det er ikke første gang jeg er stødt på det i forbindelse med en nyudklækket webintegrator...
Avatar billede Malle93 Nybegynder
11. januar 2011 - 09:31 #8
Har ændret det, men det virker stadig ikke.

- Det er den metode vores lære har givet os, og det virker også.
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:32 #9
#3

Rimelig farlig kode.
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:34 #10
"- Det er den metode vores lære har givet os, og det virker også. "

Det kan jeg ikke forstille mig. I så fald, synes jeg du skal fortælle ham lidt om SQL injections.
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:37 #11
#8
Så må du i gang med at "debugge". Udskriv sql'en i stedet for at eksekver den. Echo en tekst i din if osv.
Avatar billede Malle93 Nybegynder
11. januar 2011 - 09:37 #12
Det er jo ikke mit login der er et problem. Jeg skal bare oprette noget uden at jeg skal skrive i databasen for det.
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:39 #13
Og det er det vi er i gang med at hjælpe dig med. Vi har ikke nævnt noget som helst om login.
Avatar billede repox Seniormester
11. januar 2011 - 09:40 #14
#8
Du skal lære først som sidst at der findes ikke kun en løsning på opgaver, når det handler om programmering - der er ligeså mange løsninger som du har fantasi til.

Som udgangspunkt må du huske at din lærer stadig selv har meget at lære (og tilsyneladende en masse om sikre applikationer).

Umiddelbart vil jeg mene koden skulle skrives om, for at sikre dig et virkbart resultat som også er driftsikkert. Også selvom du har skrevet lignende kode før, der har virket.
Avatar billede michael_stim Ekspert
11. januar 2011 - 09:40 #15
Men med din kode, kan jeg slette hele databasen.
Avatar billede Malle93 Nybegynder
11. januar 2011 - 09:44 #16
Jeg har selv fundet mit svar. Tak for det.
Avatar billede repox Seniormester
11. januar 2011 - 09:47 #17
#16
Husk på du i forbindelse med oprettelsen af din bruger accepterede brugerbetingelserne som siger du skal dele din løsning på spørgsmålet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester