webForumDet fria alternativet

Enkel admininloggning + kontakta

14 svar · 1 299 visningar · startad av Shaadow

ShaadowMedlem sedan apr. 200632 inlägg
#1

Hejsan!

Har återupptagit php användandet nu när jag har börjat med webbdesign i skolan.
Håller på med en hemsida till en inlämningsuppgift i skolan och skulle behöva lite hjälp med php-koderna.

Först och främst har jag en sida där man kan kontakta mig, frågan är vad som ska stå i send.php

Del av contact.php

<form id="form" action="send.php" method="post" name="mail">
					<b>Namn:</b>&nbsp;&nbsp;&nbsp;<input id="name" type="text" name="name" width="200"><br/>
					<b>E-mail:</b>&nbsp;&nbsp;&nbsp;<input id="name" type="text" name="email" width="200"><br/>
					<b>Ämne:</b>&nbsp;&nbsp;&nbsp;<input id="name" type="text" name="subject" width="200"><p>
					<b>Meddelande:</b><br/>&nbsp;&nbsp;&nbsp;<textarea id="message" name="message" cols="40" rows="15"></textarea><br/>
					<br/>&nbsp;&nbsp;&nbsp;<input id="send" type="submit" name="send" value="Skicka">&nbsp;<input id="send" type="reset" name="reset" value="Rensa"></form>

Sen har vi då admin.php där jag ska försöka skapa en admininloggning så jag kan gå in och ändra nyheter m.m.

Del av admin.php

<form action="admin/login.php" method="post"><b>Användarnamn:</b><br/><input id="name" type="text" name="username" width="200"><br/>
				<b>Lösenord:</b><br/><input id="name" name="password" type="password" width="200">
				<p><input id="send" type="submit" value="Logga in"></form>

login.php

<?php
$username = "Shadow";
$password = "test";
	if(isset($POST['username']) == "$username" && ($POST['password'] == "$password")) {
		Location:(admin/index.php);
		} else {
		Location:(admin/restricted.php);
	}
?>

Frågorna var alltså;
1. Vad ska jag skriva i send.php för att ett mail ska skickas till mig?
2. Vad ska jag ändra/lägga till i login.php för att man ska skickas vidare till administrationspaneln, och för att man inte ska kunna surfa direkt till admin/index.php?

Mvh
Martin

matlinMedlem sedan okt. 2006224 inlägg
#2

1. Två länkar om mail funktionen i PHP:
Mail exempel
PHP manual(mail)

2. Du behöver ta en titt på sessions:
Sessions
När någon försöker komma åt admin/index.php kan du kolla om du t.ex. sparat login-data i session, finns den inte där - bara redirect till login eller nått.

ShaadowMedlem sedan apr. 200632 inlägg
#3

matlin skrev:

1. Två länkar om mail funktionen i PHP:
Mail exempel
PHP manual(mail)

2. Du behöver ta en titt på sessions:
Sessions
När någon försöker komma åt admin/index.php kan du kolla om du t.ex. sparat login-data i session, finns den inte där - bara redirect till login eller nått.

Ska kolla på detta imorgon, tack för ditt snabba svar :)

ShaadowMedlem sedan apr. 200632 inlägg
#4

matlin skrev:

1. Två länkar om mail funktionen i PHP:
Mail exempel
PHP manual(mail)

2. Du behöver ta en titt på sessions:
Sessions
När någon försöker komma åt admin/index.php kan du kolla om du t.ex. sparat login-data i session, finns den inte där - bara redirect till login eller nått.

Glömde nämna att där är något fel i koden som jag skrivit hittils, skriver jag in rätt kommer jag inte till nån sida, likadant om jag skriver in fel...

matlinMedlem sedan okt. 2006224 inlägg
#5

Shaadow skrev:

Glömde nämna att där är något fel i koden som jag skrivit hittils, skriver jag in rätt kommer jag inte till nån sida, likadant om jag skriver in fel...

Antagligen för att din password input inte har attributet "name=".. enligt din kod borde det finnas ett attribut som ser ut: name="password"
eftersom i din login.php kollar du post["password"] variabeln som just nu är tom.

ShaadowMedlem sedan apr. 200632 inlägg
#6

matlin skrev:

Antagligen för att din password input inte har attributet "name=".. enligt din kod borde det finnas ett attribut som ser ut: name="password"
eftersom i din login.php kollar du post["password"] variabeln som just nu är tom.

Har lagt till "name=" nu, måste ha missat det i allithopa :P
Ska se om det fungerar nu, annars återkommer jag :)

ShaadowMedlem sedan apr. 200632 inlägg
#7

Halloj igen!

Har mixtrat lite med login.php och gjorde så att jag la in användarnamnet och lösenordet i MySQL istället. Men fortfarande fungerar det inte =/
Detta kommer upp när jag försöker logga in:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program\xampp\htdocs\martin\admin\login.php:9) in C:\Program\xampp\htdocs\martin\admin\login.php on line 11

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program\xampp\htdocs\martin\admin\login.php:9) in C:\Program\xampp\htdocs\martin\admin\login.php on line 11

login.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Loggar in...</title>
</head>

<body>
<?php
//Sessionen startar
session_start();

//Ansluter till MySQL
$dbServer = "localhost";
$dbUser = "root";
$dbName = "admin";
	mysql_pconnect($dbServer, $dbUser)
		or die("Varning! Kunde inte ansluta till MySQL!");
	mysql_selectdb($dbName);
	
	if($login) {
	
	//Hämtar data från databasen admin
 	$sql = "SELECT * FROM admin WHERE admin.username = '" . $username . "' AND admin.password = '" . $password . "'";
	$result = mysql_query($sql);
		// Kolla hur resultatet blir
	$num = mysql_num_rows($result);

      // Blir det 1 är kombinationen rätt
      if($num == 1) {
	        echo "Välkommen " . $username . ", du är nu inloggad!";
         // redirect till admin.php inom 2sec
        echo '<meta http-equiv="Refresh" content="2;url=admin/index.php">';
        // Avsluta laddning av php filen, du vill ju inte visa login igen? 
        exit();
		} else {
		echo "Du har angivit fel användarnamn och/eller lösenord! Var vänlig försök igen!";
		}
	}
?>

</body>
</html>
matlinMedlem sedan okt. 2006224 inlägg
#8

Det felmeddelandet innebär att HTML data skickats till klienten. Alltså.. session_start() måste köras innan någon HTML.

<?php
//Sessionen startar
session_start();
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Loggar in...</title>
</head>

<body>
.....
ShaadowMedlem sedan apr. 200632 inlägg
#9

Ändrade det nu, men nu återstår lite annat...

När jag skriver in något i fälten, även om det är rätt användarnamn och lösenord, så händer ingenting. Jag kommer bara till sidan login.php.
Är det något annat som är fel i koden?

Databasnamn: admin
Databastabell: admin, 2 fält inuti tabellen, username & password.
id username password
1 Shadow NULL
Lösenordet är krypterat...

<?php

//Ansluter till MySQL
$dbServer = "localhost";
$dbUser = "root";
$dbName = "admin";
	mysql_pconnect($dbServer, $dbUser)
		or die("Varning! Kunde inte ansluta till MySQL!");
	mysql_selectdb($dbName);
	
	if($login) {
	
	//Hämtar data från databasen admin
 	$sql = "SELECT * FROM admin WHERE admin.username = '" . $username . "' AND admin.password = '" . $password . "'";
	$result = mysql_query($sql);
		// Kolla hur resultatet blir
	$num = mysql_num_rows($result);

      // Blir det 1 är kombinationen rätt
      if($num == 1) {
	        echo "Välkommen " . $username . ", du är nu inloggad!";
         // redirect till admin.php inom 2sec
        echo '<meta http-equiv="Refresh" content="2;url=admin/index.php">';
        // Avsluta laddning av php filen, du vill ju inte visa login igen? 
        exit();
		} else {
		echo "Du har angivit fel användarnamn och/eller lösenord! Var vänlig försök igen!";
		}
	}
?>
matlinMedlem sedan okt. 2006224 inlägg
#10

Antar du sätter dina $username och $password till dina post variabler tidigare i koden?

Prova att felsöka lite.. skriv t.ex. ut värdet av $num för att se vad det blir. Blir den inte 1 så vet du ju att något antagligen är fel med din query. Skrivs 1 ut så är det lite klurigare :)

colioneMedlem sedan juni 20014 421 inlägg
#11

Är du säker på att du vill använda mysql_pconnect? det brukar inte vara så poppis på delade hosts. Jag har även ruckat om lite i din kod det känns ju lite dumt att skapa en databas connection utan att du vet att du faktiskt ska använda den. Jag har även ändrat i din sql-fråga.

<?php
//Sessionen startar
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Loggar in...</title>
</head>

<body>
<?php
//Sessionen startar
session_start();

	
	if(isset($_POST['login'])) {
//Ansluter till MySQL
	$dbServer = "localhost";
	$dbUser = "root";
	$dbName = "admin";
	mysql_connect($dbServer, $dbUser)
		or die("Varning! Kunde inte ansluta till MySQL!");
	mysql_selectdb($dbName);
//Hämtar data från databasen admin
 	$sql = sprintf("SELECT * FROM admin WHERE admin.username = '%s' AND admin.password = '%s'",mysql_real_escape_string($_POST['username'],mysql_real_escape_string($_POST['password']);
	$result = mysql_query($sql);
		// Kolla hur resultatet blir
	$num = mysql_num_rows($result);

// Blir det 1 är kombinationen rätt
      if($num == 1) {
	echo "Välkommen " .htmlentities($_POST['username'], ENT_QUOTES) . ", du är nu inloggad!";
         // redirect till admin.php inom 2sec
        echo '<meta http-equiv="Refresh" content="2;url=admin/index.php">';
        // Avsluta laddning av php filen, du vill ju inte visa login igen? 
        exit();
		} else {
		echo "Du har angivit fel användarnamn och/eller lösenord! Var vänlig försök igen!";
		}
	}
?>

</body>
</html>
ShaadowMedlem sedan apr. 200632 inlägg
#12

Tack för att du tog dig tid att hjälpa mig colione!
Dock hade jag redan fixat en fungerande kod då du skrev =)

<?php
				$username = "test";
				$password = "test";
					if(isset($_POST['username']) == $username && ($_POST['password']) == $password) {
       					echo "Välkommen <b>$username</b>, du kommer att bli vidarekopplad till administrationspanelen strax!<p>Klicka <a href=\"index.php\">här</a> om du inte blir vidarebefodrad!<p />";
						echo '<meta http-equiv="Refresh" content="2;url=index.php">';
							} else {
						echo '<meta http-equiv="Refresh" content="2;url=../admin.php">';
						echo "Du skrev in fel användarnamn och/eller lösenord!<br />Vänligen försök igen!";
					}
					?>

Denna koden fungerar grymt bra, enligt mig!
Även om du försöker surfa till admin/login.php kommer felmeddelandet upp!
Nu återstår det bara att försöka fixa så man fortfarande är inloggad som admin när man klickar på administration.

Jag har en gästbok på min sida också, under administrationspanelen ska man kunna radera och ändra meddelanden som är skrivna, hur ska jag koda detta?

ShaadowMedlem sedan apr. 200632 inlägg
#13

Fixade de förra problemet själv, men nu har jag fått ett annat litet :)

Det är så här att när man loggar in ska det komma upp "Välkommen <användarnamn>!"

Men jag vet inte hur jag ska göra då formuläret man loggar in med är på en sida och texten på en annan.
Testade själv med att använda

<?php
echo "Välkommen ". $_POST['uname'] ."!";
?>

i filen som heter admin.php, men då visades ingenting.

Så frågan är hur jag ska göra för att det ska visas samma namn som man loggar in med?

admin.php

<?php
	session_start();
	ob_start();
	//if session variable not set, redirect to login page
	if (!isset($_SESSION['auth']) || $_SESSION['auth'] != 'akira') {
		header('Location: index.php');
		exit;
		}
	include('../includes/logout.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Martin's Nest</title>
<link href="../stil.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="wrapper">
	<div id="container">
		<div id="header" align="center">
			<img src="../images/header.jpg" border="0" />
		</div>
		
			<ul id='menu'>
				<li><a href="../index.php">Startsida</a></li>
				<li><a href="register.php">Bli medlem</a></li>
				<li><a href=""></a></li>
				<li><a href=""></a></li>
				<li><a href="faq.php">F.A.Q</a></li>
				<li><a href="contact.php">Kontakta</a></li>
			</ul>
			<ul id='menur'>
				<li><a href=""></a></li>
			</ul>
	
		<div id="main">
			<h2 align="center">Administration</h2>
			<table>
				<tr>
					<td>
						<p id="stycke">
							Välkommen <b>Martin</b>!
						</p>
					</td>
				</tr>
				<tr>
					<td>
						<form id="logoutForm" name="logoutForm" method="post" action="">
							<input name="logout" type="submit" id="logout" value="Logga ut" />
						</form>
					</td>
				</tr>
			</table>
		</div>
	
		<div id="footer">
			Copyright &copy; 2008 <a href="http://mn.no-ip.org/martin/index.php">Martin's Nest</a>
		</div>
	</div>
</div>
</body>
</html>

index.php

<?php
	//process the script only if the form has been submitted
	if (array_key_exists('login', $_POST)) {
		//start the session
		session_start();
		$textfile = 'C:/xampp/private/secrets.txt';
		if (file_exists($textfile) && is_readable($textfile)) {
		//read the file into an array called $users
		$users = file($textfile);
		
		//loop through the array to process each line
		for ($i = 0; $i < count($users); $i++) {
			//separate each element and store in a temporary array
			$tmp = explode(', ', $users[$i]);
			//assign each element of the temp array to a named array key
			$users[$i] = array('uname' => $tmp[0], 'password' => rtrim($tmp[1]));
			//check for a matching record
			if ($users[$i]['uname'] == $_POST['uname'] && $users[$i]['password'] == $_POST['password']) {
			//if there's a match, set a session variable
			$_SESSION['auth'] = 'akira';
			break;
			}
		}
		//if the session variable has been set, redirect
		if (isset($_SESSION['auth'])) {
			header('Location: admin.php');
			exit;
			}
		//if the session variable hasn't been set, refuse entry
		else {
			$error = 'Du angav fel användarnamn och/eller lösenord, vänligen försök igen.';
			}
		}
	//error message to display if text file not readable
	else {
		$error = 'Problem med inloggningen. Var vänlig försök senare.';
		}
	}	
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Martin's Nest</title>
<link href="../stil.css" rel="stylesheet" type="text/css" />
</head>

<body>
<div id="wrapper">
	<div id="container">
		<div id="header" align="center">
			<img src="../images/header.jpg" border="0" />
		</div>
		
			<ul id='menu'>
				<li><a href="../index.php">Startsida</a></li>
				<li><a href="register.php">Bli medlem</a></li>
				<li><a href=""></a></li>
				<li><a href=""></a></li>
				<li><a href="faq.php">F.A.Q</a></li>
				<li><a href="contact.php">Kontakta</a></li>
			</ul>
			<ul id='menur'>
				<li><a href="index.php">Administration</a></li>
			</ul>
	
		<div id="main">
			<h2 align="center">Administration</h2>
			
			<?php
				if (isset($error)) {
				echo "<p id='stycke'>$error</p>";
				}
			?>
			
				<form action="" method="post" name="form1">
			<table id="stycke">
				<tr>
					<td>
						<label for="uname">Användarnamn:</label>
					</td>
					<td>
						<input name="uname" id="uname" type="text" />
					</td>
				</tr>
				<tr>
					<td>
						<label for="password">Lösenord:</label>
					</td>
					<td>
						<input name="password" id="password" type="password" />
					</td>
				</tr>
				<tr>
					<td>
						<input name="login" id="login" type="submit" value="Logga in" />
					</td>
				</tr>
			</table>
				</form>
		</div>
	
		<div id="footer">
			Copyright &copy; 2008 <a href="http://mn.no-ip.org/martin/index.php">Martin's Nest</a>
		</div>
	</div>
</div>
</body>
</html>
UrMeMedlem sedan apr. 2001762 inlägg
#14

I index.php där du sätter $_SESSION['auth'] = 'akira';
under där kan du skriva:
$_SESSION['uname'] = $users[$i]['uname'];

Då kan du köra en echo på $_SESSION['uname']; där du hade tänkt dig.

ShaadowMedlem sedan apr. 200632 inlägg
#15

Det fungerade, tack så mycket för ditt svar!

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