Avatar billede udvikler Nybegynder
14. november 2005 - 22:34 Der er 27 kommentarer og
1 løsning

Mit dokument vil ikke virke ?

Hejsa, jeg har fået hjælp til at lave en funktion, og derfor kan jeg ikke helt selv se hvad der er galt, har prøvet dog. Den indsætter ikke de indtastede oplysninger i databasen, men hvorfor ?
- dette script skal bruges til at man kan redigere i sin profil, altså når man er logget ind, kan man skrive noget info om sig selv og gemme det, ligsom under "konto" her på eksperten :)

her er dokumentet:

E-mail: <input type="text" name="mail"><br>
Hjemmeside: <input type="text" name="hjemmeside"><br>
Interesser: <input type="text" name="interesser"><br>
Alder: <input type="text" name="alder"><br>
<input type="submit" value="Gem" name="submit">

<?php
include "mysql.php";

if ($_POST[submit]) {

function update__or_insert_user_info($mail, $hjemmeside, $interesser, $alder) {
    // Denne funktion returnerer det id som blev behandlet.
    // Hvis ny bruger blev insat, returneres nye brugers id.
    // Returnerer -1 hvis noget gik galt.
    $sql = "SELECT id FROM brugere WHERE brugernavn = '" . $brugernavn . "'";
    $res = mysql_query($sql);
    if (mysql_num_rows($res) > 0) {
        $row = mysql_fetch_array($res);
        $sql = "UPDATE brugere SET mail = '" . $mail . "', hjemmeside = '" . $hjemmeside . "', interesser = '" . $interesser . "', alder = '" . $alder . "' WHERE id = " . $row['id'];
        $res = mysql_query($sql);
        if ($res) {
            $done = $row['id'];
        } else {
            $done = 0;
        }
    } else {
        $sql = "INSERT INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('" . $mail . "', '" . $hjemmeside . "', '" . $interesser . "', '" . $alder . "')";
        $res = mysql_query($sql);
        if ($res) {
            $done = mysql_insert_id();
        } else {
            $done = -1;
        }
    }
    return $done;
}


function replace_user_info($brugernavn, $kodeord) {
    // Denne funktion returnerer TRUE hvis sql gik godt, eller FALSE.
    $sql = "SELECT id FROM brugere WHERE brugernavn = '" . $brugernavn . "'";
    $res = mysql_query($sql);
    $row = mysql_fetch_array($res);
    $id = ($row['id'] > 0) ? $row['id'] : 'NULL';
    $sql = "REPLACE INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('" . $mail . "', '" . $hjemmeside . "', '" . $interesser . "', '" . $alder . "')";
    $res = mysql_query($sql);
    if ($res) {
        $done = true;
    } else {
        $done = false;
    }
    return $done;
}
}
?>
Avatar billede erikjacobsen Ekspert
14. november 2005 - 22:35 #1
Kalder du dine funktioner?
Avatar billede erikjacobsen Ekspert
14. november 2005 - 22:37 #2
Altså fx:

update__or_insert_user_info($_POST['mail'], $_POST['hjemmeside'], $_POST['interesser'], $_POST['alder']);
Avatar billede udvikler Nybegynder
14. november 2005 - 22:40 #3
Har som sagt ikke selv lavet det så jo der var jo et eller andet der skulle gå galt :)

Hvad kan jeg så gøre for at kalde funktionerne så det kommer til at virke ?
Avatar billede erikjacobsen Ekspert
14. november 2005 - 22:44 #4
Skrive det jeg skriver - hvis det giver mening.

Man kan definere funktioner li'så tosset man vil. Og man bør egentlig definere dem før man begynder at kigge på det, der skal udføres: altså, flyt dine to funktioner ud før din if-sætning, måske endda i toppen af dokumentet, måske endda på en separat fil, du siger include til - så kan de bruges andre steder.

Og så kalder du en eller flere funktioner, sådan ca. som jeg skriver - i dette tilfælde inden i din if-sætning.
Avatar billede udvikler Nybegynder
14. november 2005 - 22:51 #5
Sådan her ?

<?
function update__or_insert_user_info($mail, $hjemmeside, $interesser, $alder) {
    // Denne funktion returnerer det id som blev behandlet.
    // Hvis ny bruger blev insat, returneres nye brugers id.
    // Returnerer -1 hvis noget gik galt.
    $sql = "SELECT id FROM brugere WHERE brugernavn = '" . $brugernavn . "'";
    $res = mysql_query($sql);
    if (mysql_num_rows($res) > 0) {
        $row = mysql_fetch_array($res);
        $sql = "UPDATE brugere SET mail = '" . $mail . "', hjemmeside = '" . $hjemmeside . "', interesser = '" . $interesser . "', alder = '" . $alder . "' WHERE id = " . $row['id'];
        $res = mysql_query($sql);
        if ($res) {
            $done = $row['id'];
        } else {
            $done = 0;
        }
    } else {
        $sql = "INSERT INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('" . $mail . "', '" . $hjemmeside . "', '" . $interesser . "', '" . $alder . "')";
        $res = mysql_query($sql);
        if ($res) {
            $done = mysql_insert_id();
        } else {
            $done = -1;
        }
    }
    return $done;
}


function replace_user_info($brugernavn, $kodeord) {
    // Denne funktion returnerer TRUE hvis sql gik godt, eller FALSE.
    $sql = "SELECT id FROM brugere WHERE brugernavn = '" . $brugernavn . "'";
    $res = mysql_query($sql);
    $row = mysql_fetch_array($res);
    $id = ($row['id'] > 0) ? $row['id'] : 'NULL';
    $sql = "REPLACE INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('" . $mail . "', '" . $hjemmeside . "', '" . $interesser . "', '" . $alder . "')";
    $res = mysql_query($sql);
    if ($res) {
        $done = true;
    } else {
        $done = false;
    }
    return $done;
}
?>

E-mail: <input type="text" name="mail"><br>
Hjemmeside: <input type="text" name="hjemmeside"><br>
Interesser: <input type="text" name="interesser"><br>
Alder: <input type="text" name="alder"><br>
<input type="submit" value="Gem" name="submit">

<?php
include "mysql.php";

if ($_POST[submit]) {
update__or_insert_user_info($_POST['mail'], $_POST['hjemmeside'], $_POST['interesser'], $_POST['alder']);
}
?>
Avatar billede erikjacobsen Ekspert
14. november 2005 - 22:56 #6
Det er da lidt bedre.

1) Du bruger en $brugernavn, der ikke kommer nogen steder fra.
2) update__or_insert_user_info returnerer en værdi, som du ikke bruger (det behøver du heller ikke, men der er vel en grund til det)
Avatar billede udvikler Nybegynder
14. november 2005 - 23:04 #7
1) hmm, ja han havde indsat nogle felter til at starte med, men så rettede jeg til mine egne, som du kan se i html delen, så er det kun de felter der bruges, da ovenstående ER hele dokumentet. Men hvis du gad at hjælpe mig med at få det ordnet, er jeg villig til at smide flere point oven i hvis du vil ? selvom du nok ikke går så meget efter point, men hva' fa'n det er det eneste jeg kan give :)

2) snakker du om denne del ?
    if ($res) {
        $done = true;
    } else {
        $done = false;
    }
    return $done;
}

den er jo til for at se om det gik rigtigt til, men jo helt unødvendig, kan jeg roligt slette den ?
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:05 #8
Du behøver ikke slette de linier. En gang kan det være du vil tjekke om funktionen gik godt.

Jeg kan ikke hjælpe, point eller ej, for jeg ved ikke hvor $brugernavn sku' komme fra.
Avatar billede udvikler Nybegynder
14. november 2005 - 23:07 #9
Mon ikke den er til at tjekke id'et på brugeren ?
altså til at finde ud af hvilken bruger det er det skal indsættes hos ?
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:08 #10
jo
Avatar billede udvikler Nybegynder
14. november 2005 - 23:10 #11
Så det burde virke ?
- har nemlig ingen mulighed for at teste det nu, derfor de underlige spørgsmål :)
frac.dk understøtter desværre kun 15 brugere online på ftp af gangen :S glæder mig til systemet er færdig, så lægger jeg det op på en ordenlig side :)
Avatar billede udvikler Nybegynder
14. november 2005 - 23:10 #12
Og forresten så lukkes tråden lige efter det er testet, altså når der er adgang til ftp. :)
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:11 #13
Ok ;)  Gratis er gratis. 

Jo, men det er nok hvad $brugernavn bruges til. Men hvor kommer den fra?
Avatar billede udvikler Nybegynder
14. november 2005 - 23:14 #14
brugernavnets id kommer fra adresselinien, så er der en lettere måde at tjekke det på ?
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:17 #15
Så vil det nok være sundt at skrive som $_GET['brugernavn']

Men om det så er ok er ikke muligt at vide ud fra de oplysninger du giver. Fx vil det være rart at se hele din php-fil.
Avatar billede udvikler Nybegynder
14. november 2005 - 23:18 #16
Som sagt i 14/11-2005 23:04:05 så ER dette hele dokumentet
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:20 #17
Nej, det er det ikke. Du skal også vise din <form> og gerne resten. Og selvfølgelig om der er andet PHP involveret. Ellers er det jo bare gætteri.
Avatar billede udvikler Nybegynder
14. november 2005 - 23:23 #18
Pinligt :/

Havde glemt <form> :S

smider lige en <form action="" method="POST"> ... </form> ind i dokumentet:

så det ser sådan ud nu, vil det virke ? :)

-------------------------------------------------------------------------------------
<form action="" method="POST">

<?
function update__or_insert_user_info($mail, $hjemmeside, $interesser, $alder) {
    // Denne funktion returnerer det id som blev behandlet.
    // Hvis ny bruger blev insat, returneres nye brugers id.
    // Returnerer -1 hvis noget gik galt.
    $sql = "SELECT id FROM brugere WHERE brugernavn = '" . $brugernavn . "'";
    $res = mysql_query($sql);
    if (mysql_num_rows($res) > 0) {
        $row = mysql_fetch_array($res);
        $sql = "UPDATE brugere SET mail = '" . $mail . "', hjemmeside = '" . $hjemmeside . "', interesser = '" . $interesser . "', alder = '" . $alder . "' WHERE id = " . $row['id'];
        $res = mysql_query($sql);
        if ($res) {
            $done = $row['id'];
        } else {
            $done = 0;
        }
    } else {
        $sql = "INSERT INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('" . $mail . "', '" . $hjemmeside . "', '" . $interesser . "', '" . $alder . "')";
        $res = mysql_query($sql);
        if ($res) {
            $done = mysql_insert_id();
        } else {
            $done = -1;
        }
    }
    return $done;
}


function replace_user_info($brugernavn, $kodeord) {
    // Denne funktion returnerer TRUE hvis sql gik godt, eller FALSE.
    $sql = "SELECT id FROM brugere WHERE brugernavn = '" . $brugernavn . "'";
    $res = mysql_query($sql);
    $row = mysql_fetch_array($res);
    $id = ($row['id'] > 0) ? $row['id'] : 'NULL';
    $sql = "REPLACE INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('" . $mail . "', '" . $hjemmeside . "', '" . $interesser . "', '" . $alder . "')";
    $res = mysql_query($sql);
    if ($res) {
        $done = true;
    } else {
        $done = false;
    }
    return $done;
}
?>

E-mail: <input type="text" name="mail"><br>
Hjemmeside: <input type="text" name="hjemmeside"><br>
Interesser: <input type="text" name="interesser"><br>
Alder: <input type="text" name="alder"><br>
<input type="submit" value="Gem" name="submit">

<?php
include "mysql.php";

if ($_POST[submit]) {
update__or_insert_user_info($_POST['mail'], $_POST['hjemmeside'], $_POST['interesser'], $_POST['alder']);
}
?>

</form>
-------------------------------------------------------------------------------------
Avatar billede udvikler Nybegynder
14. november 2005 - 23:27 #19
Så kom ftp'en op og køre igen, men det hele virker altså den indsætter i databasen og det hele, men den indsætter oplysningerne i en anden og tom bruger, dvs at det er funktionen hvor den skal finde hvilken bruger det er det handler om som fejler, kan umiddelbart ikke se hvad det er som er galt ?
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:28 #20
Det hjælper lidt :)

Du behøver kun sætte <form...> </form> rundt om selve felterne.

Men hvis der ikke er andet, så har du ikke et HTML-dokument. Om det så virker eller ej, og hvad fejl der opstår og hvordan de rettes er rent lotteri.

Der burde være en checkbox ved spørgsmål om websider her på eksperten.dk

    (Box) Validerer siden hos validator.w3.org

og hvis svaret er "nej", så får man ikke lov til at spørge. Og det er ment alvorligt:
der er ingen grund til at spilde egen (eller andres) tid, hvis de simple formalia ikke er overholdt. Hvis siden er lovlig HTML 4.01 - ja, så kan vi gå på jagt efter fejl.
Avatar billede udvikler Nybegynder
14. november 2005 - 23:30 #21
Hvad mente du med det sidste om lovlig html ? :) overholder min html i w3 og er derfor ulovlig på eksperten eller hvad ? :S
Avatar billede udvikler Nybegynder
14. november 2005 - 23:38 #22
Vender tilbage imorgen, det er ved at blive sent, skal tidligt op i morgen! :)
Avatar billede erikjacobsen Ekspert
14. november 2005 - 23:40 #23
Der er ikke noget (i den sammenhæng) der er ulovligt - det er bare spild af tid.
Avatar billede udvikler Nybegynder
15. november 2005 - 07:58 #24
Sådan, nu har jeg prøvet selv at lave det, og er efter min mening mere forståeligt, men jeg for dog en fejl i min INSERT sætning:

-------------------------------------------------------
<?
//connecter til databasen
include "mysql.php";

  //finder brugerens id nummer fra adresselinien
  $id = mysql_escape_string($_GET["id"]);
  $query = mysql_query("SELECT brugernavn FROM brugere WHERE id = $id LIMIT 1");

  //opdatere det info man har skrevet
  $sql1 = "UPDATE brugere SET mail = '" . $mail . "', hjemmeside = '" . $hjemmeside . "', interesser = '" . $interesser . "', alder = '" . $alder . "' WHERE id = $id;
  $res1 = mysql_query($sql1);

  //indsætter det info man har skrevet
  $sql2 = mysql_query("INSERT INTO brugere (mail, hjemmeside, interesser, alder) VALUES ('$_POST[mail]','$_POST[hjemmeside]','$_POST[interesser]','$_POST[alder]')") or die(mysql_erorr());
  $res2 = mysql_query($sql2);
?>

<form action="" method="POST">
E-mail: <input type="text" name="mail"><br>
Hjemmeside: <input type="text" name="hjemmeside"><br>
Interesser: <input type="text" name="interesser"><br>
Alder: <input type="text" name="alder"><br>
<input type="submit" value="Gem" name="submit">
</form>

<?php
//connecter til databasen
include "mysql.php";

//hvis man trykker på knappen
if ($_POST[submit]) {
//så tjekker den: hvis der findes nogle brugere
if (mysql_num_rows($query)>0) {
//så skal den opdatere bruger info
mysql_query($sql1)
} else {
//ellers, hvis ikke det findes i databasen så skal den indsætte det nye bruger info
mysql_query($sql2)
}
}
?>

-------------------------------------------------------

er det nu spild af tid ? :)
Avatar billede erikjacobsen Ekspert
15. november 2005 - 09:36 #25
"eg for dog en fejl i min INSERT" - ja, det er spild af tid, hvis du ikke vil fortælle hvad det er for en fejl.

Men nu har du jo lavet det hele om. Du laver en INSERT, selv om man ikke kommer fra din <form>. Jeg troede vi var enige om at man først med passende if-er skulle se om man kom på siden første gang, eller om man kom fra formen. Det har du nederst, men du laver alligevel altid en INSERT. Dine funktioner var da gode til det de skulle bruges til.

Og når du nederst siger
  mysql_query($sql2)
er det ikke til en sql-sætning, men til resultatet fra den mysql_query med INSERT du allerede har lavet.

Hvad med at gå tilbage til det du havde før?

(Og så har resultatet stadig intet med et HTML-dokument at gøre)
Avatar billede udvikler Nybegynder
16. november 2005 - 14:30 #26
Det virker nu nu :D

Læg et svar :)
Avatar billede erikjacobsen Ekspert
16. november 2005 - 15:48 #27
Jeg samler slet ikke på point, tak.
Avatar billede udvikler Nybegynder
16. november 2005 - 16:11 #28
Jamen du hjalp mig jo, godt nok virkede lige det der ikke, men jeg fik det da til at virke og du blev ved med at prøve, i sådan nogle spørgsmål hader jeg at tage pointene selv, men så kan jeg da belønne dig med god karma :)
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