webForumDet fria alternativet

Registrering + inloggning

PHPur PHP

7 svar · 803 visningar · startad av Shaadow

ShaadowMedlem sedan apr. 200632 inlägg
#1

Tjenare!

Har precis återupptagit det här med php och så igen :)
Håller på att lära mig att göra så man kan registrera sig och logga in.
Men eftersom jag är ny på MySQL och hur det fungerar skulle jag behöva lite hjälp :)
Det är bara en simpel sida förtillfället, har inte orkat pyssla med design ännu.
Problemet är att information som skrivs in i register.php inte skickas till databasen och/eller information kan inte hämtas i login.php.
Databasnamn -> reg
Tabell -> reg_user & reg_pass

register.php

<?php
//Sessionen startas
session_start();

//Ansluter till MySQL
$dbServer = "localhost";
$dbUser = "root";
$dbName = "reg";
	mysql_pconnect($dbServer, $dbUser)
		or die("Varning! Kunde inte ansluta till MySQL!");
	mysql_selectdb($dbName);
	
	// Om variablen register redan existerar, utförs detta istället.
	if($register) {
	echo "Du har redan registretat en användare!"
	}
	
	//Skickar datan till databasen uname
	$sql = "INSERT INTO reg.reg_user VALUES (" .$username. ")";
	$result = mysql_query($sql);
	
	//Skickar datan till databasen pass
	$sql = "INSERT INTO reg.reg_pass VALUES (" .$password. ")";
	$result = mysql_query($sql);
	//MD5 lösenordet
	$password = md5($pass);
	
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<b>Registering av ny användare</b>
<form method="post" action="<?php $PHP_SELF?>"><br>
	Användarnamn:<br>
	<input type="text" name="username"><br>
	Lösenord:<br>
	<input type="password" name="password"><br>
	<input type="submit" name="register" value="Registrera">
</form>
<a href="index.php">Tillbaka</a>
</body>
</html>

login.php

<?php
//Sessionen startar
session_start();

//Ansluter till MySQL
$dbServer = "localhost";
$dbUser = "root";
$dbName = "reg";
	mysql_pconnect($dbServer, $dbUser)
		or die("Varning! Kunde inte ansluta till MySQL!");
	mysql_selectdb($dbName);
	
	if($login) {
	
	//Hämtar data från databasen reg
 	$sql = "SELECT * FROM reg_user WHERE reg_user.username = '" . $username . "' AND reg_pass.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.php">';
        // Avsluta laddning av php filen, du vill ju inte visa login igen? :P
        exit();
		} else {
		echo "Du har angivit fel användarnamn och/eller lösenord! Var vänlig försök igen!";
		}
	}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>

<body>
<b>Inloggning</b><br><br>

<form method="post" action="<?php $PHP_SELF?>">
	Användarnamn:<br>
	<input type="text" name="username"><br>
	Lösenord:<br>
	<input type="password" name="password"><br>
	<input type="submit" name="login" value="Logga in">
</form>
<a href="index.php">Tillbaka</a>
</body>
</html>
eklof00Medlem sedan jan. 200737 inlägg
#2

Det kör jag med. Har inte gjort det själv men det funkar klockrent.

Tabellstruktur

# 
# Struktur för tabell `members` 
# 
 
CREATE TABLE members ( 
  id int(11) NOT NULL auto_increment, 
  user varchar(30) NOT NULL default '', 
  pass varchar(30) NOT NULL default '', 
  name varchar(50) NOT NULL default '', 
  email varchar(50) NOT NULL default '', 
  PRIMARY KEY  (id) 
) TYPE=MyISAM;

conn.php (databasuppkopplingen)

<?php
 
// Byt ut mot dina inloggningsuppgifter och databas
$mysql_server = "localhost";
$mysql_user = "user";
$mysql_password = "malte";
$mysql_database = "members_area";
 
$conn = mysql_connect($mysql_server, $mysql_user, $mysql_password);
mysql_select_db($mysql_database, $conn);
 
 
// En funktion att användas när magic_quotes_gpc inte är satt. För att förhindra SQL-injections, eller i lidrigare fall MySQl-fel.
function db_escape ($post)
{
   if (is_string($post)) {
     if (get_magic_quotes_gpc()) {
        $post = stripslashes($post);
     }
     return mysql_real_escape_string($post);
   }
   
   foreach ($post as $key => $val) {
      $post[$key] = db_escape($val);
   }
   
   return $post;
}
 
 
/* 
   Se till att det inte finns några dolda tecken, typ radbyte 
   eller mellanslag, efter den avslutande PHP-taggen !!!
*/ 
?>

index.php

<?php
session_start(); // Alltid överst på sidan
 
include "conn.php"; // Databasanslutningen
 
// Inloggning
if (isset($_POST['submit'])){
 
  $_POST = db_escape($_POST);
  
  $sql = "SELECT id FROM members 
         WHERE user='{$_POST['user']}' 
         AND pass='{$_POST['passwd']}'";
  $result = mysql_query($sql);
  
  // Hittades inte användarnamn och lösenord
  // skicka till formulär med felmeddelande
  if (mysql_num_rows($result) == 0){
    header("Location: index.php?badlogin=");
    exit;
  }
  
  // Sätt sessionen med unikt index
  $_SESSION['sess_id'] = mysql_result($result, 0, 'id');
  $_SESSION['sess_user'] = $_POST['user'];
  header("Location: welcome.php");
  exit; 
}
 
// Utloggning
if (isset($_GET['logout'])){
  session_unset();
  session_destroy();
  header("Location: index.php");
  exit;
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>Index</title>
</head>
<body>
<?php
 
// Om inte inloggad visa formulär, annars logga ut-länk 
if (!isset($_SESSION['sess_user'])){
 
  echo "<h3>Logga in</h3>\n";
  
  // Visa felmeddelande vid felaktig inloggning
  if (isset($_GET['badlogin'])){
    echo "Fel användarnamn eller lösenord!<br>\n";
    echo "Försök igen!\n";
  }
  
?>
<form action="index.php" method="post">
Användarnamn:<br>
<input type="text" name="user"><br>
Lösenord:<br>
<input type="password" name="passwd"><br>
<input type="submit" name="submit" value="Logga in">
</form>
Inte medlem ?<br>
<a href="register.php">Registera dig</a>
<?php
 
} else {
 
  echo "<a href=\"index.php?logout=\">Logga ut</a>\n";
 
}
 
?>
</body>
</html>

register.php (för att registrera sig)

<?php
session_start(); // Alltid överst på sidan
 
include "conn.php"; // Databasanslutningen
 
if (isset($_POST['submit'])){
 
  $_POST = db_escape($_POST);
 
  // Tag bort eventuella blanksteg i början eller slutet
  foreach($_POST as $key => $val){
    $_POST[$key] = trim($val);
  }
 
  //Kolla efter tomma fält
  if (empty($_POST['user']) || empty($_POST['passwd']) || 
      empty($_POST['name']) || empty($_POST['email'])) {
    $reg_error[] = 0;
  }
  
  // Kolla om användarnamnet är upptaget
  $sql = "SELECT COUNT(*) FROM members WHERE user='{$_POST['user']}'";
  $result = mysql_query($sql);
  if (mysql_result($result, 0) > 0) {
    $reg_error[] = 1;
  }
  
  // Kolla om e-post kan tänkas vara ok
  if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,6}$/', $_POST['email'])) {
    $reg_error[] = 2;    
  }
 
  // Kolla så att lösenorden stämmer överrens
  if ($_POST['passwd'] != $_POST['passwd2']) {
    $reg_error[] = 3;
  }
  
  // Inga fel? Spara och logga in samt skicka till välkomstsida
  if (!isset($reg_error)) {
    $sql = "INSERT INTO members(user, pass, name, email)
            VALUES('{$_POST['user']}', '{$_POST['passwd']}', '{$_POST['name']}', '{$_POST['email']}')";
    mysql_query($sql);
    
    $_SESSION['sess_id'] = mysql_insert_id();
    $_SESSION['sess_user'] = $_POST['user'];
    header("Location: welcome.php");
    exit;     
  
  }
 
} else {
 
  // Sätt variabler för tomt formulär
  for ($i=0; $i<4; $i++) {
    $back[$i] = "";
  }
 
}
 
$error_list[0] = "Alla fält är inte infyllda";
$error_list[1] = "Användarnamnet är upptaget";
$error_list[2] = "Felaktig e-postadress";
$error_list[3] = "Lösenorden stämmer inte överrens";
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>Registrera dig</title>
</head>
<body>
<h3>Registrera dig</h3>
<?php
if (isset($reg_error)){
 
  echo "Något blev fel:<br>\n";
  echo "<ul>\n";
  for ($i=0; $i<sizeof($reg_error); $i++) {
    echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
  }
  echo "</ul>\n";
  
  $back[0] = stripslashes($_POST['user']);
  $back[2] = stripslashes($_POST['name']);
  $back[3] = stripslashes($_POST['email']);
 
}
?>
<form action="register.php" method="post">
<table cellspacing="3">
 
<tr>
<td>Användarnamn:</td>
<td><input type="text" name="user" value="<?=$back[0] ?>"></td>
</tr>
 
<tr>
<td>Lösenord:</td>
<td><input type="password" name="passwd" value=""></td>
</tr>
 
<tr>
<td>Repetera lösenord:</td>
<td><input type="password" name="passwd2" value=""></td>
</tr>
 
<tr>
<td>Ditt namn:</td>
<td><input type="text" name="name" value="<?=$back[2] ?>"></td>
</tr>
 
<tr>
<td>E-postadress</td>
<td><input type="text" name="email" value="<?=$back[3] ?>"></td>
</tr>
 
<tr>
<td colspan="2" align="center">
  <input type="submit" name="submit" value="Spara dina uppgifter">
</td>
</tr>
 
</table>
</form>
 
</body>
</html>

welcome.php (sida man kommer till efter inloggning)

<?php
session_start(); // Alltid överst på sidan
 
// Kolla om inloggad = sessionen satt
if (!isset($_SESSION['sess_user'])){
  header("Location: index.php");
  exit;
}
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title>V&auml;lkommen</title>
</head>
<body>
 
V&auml;lkommen <?=$_SESSION['sess_user'] ?><br>
<a href="index.php?logout=">Logga ut</a>
 
</body>
</html>
HamatzuMedlem sedan mars 2005232 inlägg
#3

Hej eklof00!

Jag tänkte att jag forsätter i den här tråden med lite hjälp om det som du har skrivit. Jag använder lite utav det script som du har skrivit och det fungerar precis som det ska, det här med $reg_error[] och $back[]. Så att den loopar ut felmeddelande med $error_list och det som man fyllde i finns kvar i inputen. :e

Det som jag nu skulle vilja göra är att den inputen som det är fel på skulle jag vilja byta class på. Så att denna får t.ex röd bakgrund så att man ser vilken det är fel på.

Jag har själv testat runt lite med variabeln $back[], för att försöka åstadkomma det jag vill. Men det vill sig inte riktigt.

Tacksam för all hjälp! :bire

HamatzuMedlem sedan mars 2005232 inlägg
#4

Är det ingen som har några idéer? Det är ju inget som jag måste använda, och jag har klurat runt lite mer och får det inte att fungera. Men det skulle vara en fin funktion att ha.

Hoppas någon har nåt förslag! :bire:

CrozzMedlem sedan maj 2007261 inlägg
#5

eklof00 jag testa ditt script och det funka perfekt:D Men undrar varför detta kommer upp efter jag gjort nått typ loggat ut elr precis loggat in? Ifall man trycker bakåt på pilarna högst upp åt vänster så kmr man dit man skulle egentligen:P

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\Hemsida\conn.php:35) in C:\wamp\www\Hemsida\index.php on line 34

CrozzMedlem sedan maj 2007261 inlägg
#6

Nån som kan se ett fel? Jag får hela tiden ett meddelande att "headers already sent by". Har kollat där den hittat fel men allt ser ok ut.

PeddaMedlem sedan juni 20006 032 inlägg
#7

ta bort alla onödiga mellanslag och radbrytningar.
det kan vara något sånt som skickas till webbläsaren.
Kolla särskilt ovanför session_start()

CrozzMedlem sedan maj 2007261 inlägg
#8

Ja nu funkar det:D

Tack Pedda:P

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