Avatar billede the_edge Nybegynder
17. december 2006 - 20:18 Der er 10 kommentarer og
1 løsning

syntaks fejl sidste linje

hejsa har en fejl på sidste linje kan ikke lige overskue hvad det er ? nogen der kan 30 på højkant :)

<?php
include_once("sql.php");

echo "her er session" . $_SESSION["login"];
echo "her er session" . $_SESSION["brugernavn"];

echo '<center><h1>Opret bruger</h1></center>';

    function opretbruger()
    {
   
        ?>
   
    <table align="center" border="0">
    <form action="index.php?pid=opretbruger" method="POST">
   
    <tr><td><p>Brugernavn :</p></td><td><input type="text" name="brugernavn" value=""></td></tr>
    <tr><td><p>Kodeord :</p>  </td><td><input type="password" name="kodeord1">  </td></tr>
    <tr><td><p>Indtast kodeord igen :</p>  </td><td><input type="password" name="kodeord2">  </td></tr>
    <tr><td>&nbsp</td> <td><input type="submit" value="Opret" name="Opret">    </td></tr>
   
    </form>
    </table>
    <?php
   
    $brugernavn = $_POST["brugernavn"];
    $kodeord = $_POST["kodeord"];
   
if (isset($_POST["Opret"])) //&& $_POST["kodeord1"] == "" || $_POST["kodeord2"] == ""
{   
    if ($_POST["brugernavn"] == "")
    {   
        echo "Du skal udfylde brugernavn";       
    }
   
    else if(empty($_POST["kodeord1"]) || empty($_POST["kodeord2"]) )
    {
        echo "Du skal indtaste et kodeord";
    }
   
    else if(isset($_POST["kodeord1"]) && isset($_POST["kodeord2"]) && $_POST["kodeord1"] == $_POST["kodeord2"])
    {
    sql("INSERT INTO bruger (brugernavn,kodeord) VALUES ('$brugernavn','$kodeord')");
    echo "Du er nu oprettet";
    }
   
    else echo "Kodeord ikke ens"; //du skal ikke bruge tuborg ved mindre det er på flere linjer   
}

//$_SESSION["login"] = 0;

//if ($_SESSION["login"] = 1)
//{
opretbruger();
//}

//else "Du er ikke logget ind";

?>
Avatar billede the_edge Nybegynder
17. december 2006 - 20:19 #1
hov glemte fejlen lyder Parse error: parse error, unexpected $end in C:\Programmer\xampp\htdocs\opgman\opretbruger.php on line 59
Avatar billede erikjacobsen Ekspert
17. december 2006 - 20:21 #2
Du mangler vel en {
Avatar billede erikjacobsen Ekspert
17. december 2006 - 20:21 #3
Der ramte jeg forkert. Du mangler en }
Avatar billede pidgeot Nybegynder
17. december 2006 - 20:22 #4
Præcist - funktionen bliver aldrig afsluttet.
Avatar billede the_edge Nybegynder
17. december 2006 - 20:27 #5
når ja der kan man bare se tak :) hvis du lægger et svar.

kan du måske også forklare hvad dette betyder ? Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource. jeg får den fejl selv om den oprette en bruger
Avatar billede pidgeot Nybegynder
17. december 2006 - 20:45 #6
Hvis den kommer på det tidspunkt hvor du foretager din INSERT, er det fordi din sql()-metode ikke tager sig af at en INSERT ikke returnerer noget resultatsæt, og prøver at få en række ud selvom der ikke er nogen tilgængelig. Det er du nødt til at håndtere inde i den metode.

Det samme gælder desuden for UPDATE og DELETE - samt nogle andre, men dem bruger du næppe på selve siden.

Det lader desuden til at du ikke har en måde at håndtere forespørgsler der håndterer flere rækker (med mindre du returnerer ALLE rækker fra forespørgslen i form af et array, hvilket er meget ineffektivt hvad hukommelse angår), men det er svært at vide helt præcist når nu jeg ikke ved hvad sql()-metoden indeholder.
Avatar billede the_edge Nybegynder
17. december 2006 - 20:48 #7
okay hmm har gjordt sådan her

function sql($sql)
        {
        $forbindelse = mysql_connect("localhost","root","");
        mysql_select_db("opgman",$forbindelse);
        $result = mysql_query($sql,$forbindelse) or die (mysql_error());
       
        while ($row = mysql_fetch_array($result))
        {
           
        return $row; //returenere til function sql. Sørg for at du henter det returnere ud i en variable når du kalder functionen.
       
        //lægger arrayet op i klassen variabler/arrays.
        //for at få fat i dem i en anden klasse. Lav instans
        //$udtreak = new Sql();
        //$udtreak->udtreak("sql agument"); og
        //$udtreak->hentfrasql["brugernavn"];
       
        //array_push($this->array2,$row);
       
        //man kan evt også lave return =$row så skal man blot bare kalde function.
   
       
       
        }
        //print_r($this->array2);
        //return $this->array2;

               
       
    }
Avatar billede the_edge Nybegynder
17. december 2006 - 21:10 #8
ahh tak har lavet en ny function.

function sqlinsert($sql)
        {
        $forbindelse = mysql_connect("localhost","root","");
        mysql_select_db("opgman",$forbindelse);
        $result = mysql_query($sql,$forbindelse) or die (mysql_error());
        }

virker nu
Avatar billede pidgeot Nybegynder
17. december 2006 - 21:32 #9
Det er ikke en ordentlig måde at takle opgaven på - det kan godt forsvares at have en metode til SQL-udtræk der skal returnere noget, og en til udtræk der ikke skal, men den måde du har lavet det på holder ikke.

Når jeg kigger på din sql()-funktion kan jeg se at du ikke har nogenmåde at hente flere rækker ud - return afslutter nemlig funktionen, ikke while-løkken - og kommentarerne vil i bedste fald kun kunne få alle rækker ud i et array på en gang, hvilket fylder forfærdeligt i hukommelsen.

Måden jeg har gjort det på er at lave en klasse udelukkende til database-kald hvor der er en metode der udelukkende står for at foretage mysql_query()-kaldet og gemme resultatet (på en måde så jeg kan have flere udtræk i gang samtidigt, hvis jeg har brug for det), og så en anden metode til at hente rækkerne ud en af gangen, på samme måde som mysql_fetch_array gør.

(Klassen er selvfølgelig mere avanceret end nævnt foroven - eksempelvis returnerer kaldet til min query-funktion det auto-genererede ID i den indsatte række såfremt det er en INSERT den modtager - men det er grundlæggende det princip der bruges).

Din tilgang til at håndtere flere rækker er i øvrigt fejlbefængt, da variable der oprettes i funktioner ikke bevares udenfor funktionen - dvs. at alt andet end det du return'er går tabt når funktionen afsluttes, med mindre du gemmer i en variabel udenfor funktionen ved enten at gøre en variabel global, eller ved at tilgå den via $GLOBALS inde i funktionen.

Der er desuden ingen grund til at oprette en forbindelse hver eneste gang - opret den en gang og gem en reference til den. Det andet er spild af tid.
Avatar billede the_edge Nybegynder
17. december 2006 - 21:50 #10
puha det lyder godt nok kompliceret... hvordan ville du gemme reference til forbindelsen ?
Avatar billede pidgeot Nybegynder
17. december 2006 - 22:11 #11
Jeg gør det som nævnt ved at have lavet en klasse - der kan man deklarere et felt som man kan gemme den i.

Hvis du skal gøre det på din måde med at have metoder, kan du lave en metode der opretter og forbindelsen og gemmer det i en variabel du har initialiseret til null udenfor metoderne (lad os kalde den $conn). For at tilgå denne variabel skulle du så tilgå den via $GLOBALS-arrayet (dvs. $GLOBALS['conn']) eller skrive global $conn; øverst i de metoder hvor du skulle bruge den. Et alternativ er at returnere forbindelsen direkte fra den metode der opretter den, og så sende den med som parameter til de andre metoder - det bliver dog til mere kode i længden.
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