webForumDet fria alternativet

Problem med inloggning php/mysql!

24 svar · 740 visningar · startad av hagmund · sida 2 av 2

CompusaMedlem sedan jan. 20023 327 inlägg
#21

aasah skrev:

Det här är ju direkt larvigt. Det är ju som att försöka allokera minne i Java därför att det behövs om man kör C... :OO (Bortsett ifrån att Java saknar metoder för det.) Varje språk har ju sina egna begränsningar och höjdpunkter.

Jag tycker snarare att det är ditt försök till jämförelse som är larvig. Har du programmerat applikationer i Java med databaser? Även där bör du stänga ditt recordset och connection manuellt för att frigöra minne, även om Javas skräphanterare tar hand om dessa. Likadant i .net!

aasah skrev:

Om man nu håller på med en applikation med så många samtidiga anslutningar att man slår i taket och måste stänga anslutningen så snart det bara går, så är det naturligtvis en annan sak. Men för att det ska vara någon vits måste anslutningen då stängas före det sista skriptet gör. Behovet av detta borde dock inte tillhöra vanligheterna.

Varför inte lära sig att göra rätt från början, istället för att slarva bara för att det är möjligt? Enligt din filosofi så kör man på tills det går åt skogen? När det gåt åt skogen får man sätta sig och skriva om all kod så att den använder databaskommunikationen på ett optimalt sätt. Ändringar av befintligt kod leder i stort sett alltid till uppkomst av nya problem och det kan leda till en tidskrävande process, helt i onödan.

hagmundMedlem sedan feb. 20068 inlägg
#22

Hallå igen!
För mitt inloggningsformulär har jag följande:

<? if(isset($nick)) {
	echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"meny.php?ut\" target=meny><b>Logga ut!</b></a>";  // Om inloggad visasas detta, utloggningsystemet.
} else {
												/// Annars visas detta!		
	echo"<form method=POST action=login/login.php target=_top>&nbsp;&nbsp;&nbsp;Smeknamn:
		<br>&nbsp;&nbsp;

		<input type=text name=nick STYLE=\"font-family: Verdana; font-size: 9px;\" size=14 maxlength=50>
		<br>&nbsp;&nbsp;&nbsp;Lösenord:<br>&nbsp;&nbsp;
		<input type=password name=losen STYLE=\"font-family: Verdana; font-size: 9px;\" size=10 maxlength=50> <input type=submit style=\"font-family: Verdana; font-size: 9px\" name=post width=70 height=19 value=\"In!\"></form>";
}
?>
aasahMedlem sedan mars 20034 471 inlägg
#23

Och koden ovan är menu.php?

Du fångar aldrig värdena från formuläret! Dessa får du hämta med respektive $_POST['nick'], $_POST['losen'] och $_GET['ut']. Fast för att utloggningen ska funka måste du ha ett värde med ut:t.

if(isset($nick)) { 
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"meny.php?ut=1\" target=meny><b>Logga ut!</b></a>";  //...

Det måste inte vara 1 just, men något värde. För då kan du fånga det med:

if (isSet($_GET['ut'])) { /* Logga ut */ }

Utan värde är det ju inte satt...

session_register(nick,losen); 

if(!strlen(trim($_POST['nick'])) || !strlen(trim($_POST['losen'])) ) {
   echo("Du fyllde inte i login sakerna");
}
else {
    $my_id = mysql_connect ("localhost","hemlis","hemlis") 
        or die ("Could not connect"); 
    print ("Connected successfully"); 
     
    mysql_select_db("databasen"); 
    $sql = "SELECT * FROM users where nick = '".$_POST['nick']."'"; 
    $res = mysql_query($sql) or die("Felaktig fråga"); 
    if ($userInfo=mysql_fetch_array($res)) { 
        if($_POST['losen'] == $userInfo['losen']) { 
        //osv

Dvs på alla ställen där du skriver nick och losen rakt av i menu.php, ändra till de POST-ade variablerna.

MatteMedlem sedan aug. 20002 975 inlägg
#24

Sedan bör du undvika session_register() då detta kräver att register_globals är satt på servern.

Använd dig av session_start() samt $_SESSION-arrayen för att hantera dina sessionsvariabler.

aasahMedlem sedan mars 20034 471 inlägg
#25

Compusa skrev:

aasah skrev:

Om man nu håller på med en applikation med så många samtidiga anslutningar att man slår i taket och måste stänga anslutningen så snart det bara går, så är det naturligtvis en annan sak. Men för att det ska vara någon vits måste anslutningen då stängas före det sista skriptet gör. Behovet av detta borde dock inte tillhöra vanligheterna.

Varför inte lära sig att göra rätt från början, istället för att slarva bara för att det är möjligt? Enligt din filosofi så kör man på tills det går åt skogen? När det gåt åt skogen får man sätta sig och skriva om all kod så att den använder databaskommunikationen på ett optimalt sätt. Ändringar av befintligt kod leder i stort sett alltid till uppkomst av nya problem och det kan leda till en tidskrävande process, helt i onödan.

Hmm... :o :r :l Jag förstår kommentaren... Det lät nog så. Fast det var inte menat så. Nej, naturligtvis slarvar man inte bara för att det går. Naturligtvis kör man inte tills det går åt skogen. Man sätter sig ner och skriver så bra kod man kan - och tycker är motiverat - från början.

Jag tror att man har en god uppfattning om huruvida antalet databashandtag riskerar att ta slut om man inte optimerar koden, i de fall detta är tillämpligt. Är man i det läget kan nog koden behöva optimeras rent allmänt dessutom. Då programmerar man för det. Men i normala loginskript är nog inte risken så stor. Skillnaden är då att man kan låta bli att stänga anslutningen, så länge man vet att man kan stänga den förhand om det behövs.

Compusa skrev:

Jag tycker snarare att det är ditt försök till jämförelse som är larvig. Har du programmerat applikationer i Java med databaser? Även där bör du stänga ditt recordset och connection manuellt för att frigöra minne, även om Javas skräphanterare tar hand om dessa. Likadant i .net!

Det har jag, ja, och självklart stänger jag de anslutningarna, på samma sätt som jag alltid stänger en fil som jag har öppnat. Varför? Dels därför att man faktiskt kan råka ut för trassel annars, dels därför att man inte har en aning om när Javas skräphanterare stänger den annars, det kan inte jag påverka.

I PHP, däremot, så som jag har förstått det, stängs en db-anslutning alltid så snart skriptet har kört klart. Och då är skillnaden mellan att stänga den på sista raden och att inte stänga den näst intill obefintlig, anser jag. Vari ligger skillnaden? Ett par millisekunder tidigare?

Och specifikt argumentet att det inte funkar så i andra språk, vidhåller jag är knasigt. Om det är enda skälet, så måste vi ju börja deklarera alla variabler i PHP, för så "gör man ju i andra språk". Hur ett visst problem löses, beror ju på vilket programmeringsspråk man väljer. Man måste kunna anpassa lösningen efter språket, inte skriva samma sak på samma sätt i alla språk.

130 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)