Loginscript met cookies

Status
Niet open voor verdere reacties.

eisdatop

Gebruiker
Lid geworden
14 jul 2004
Berichten
434
Hallo allemaal, ik ben nu een tijdje aan het stoeien met een loginscript.

Dit is de inlogpagina:

PHP:
<?
session_start();
Ob_start();
?> 
<link rel="stylesheet" type="text/css" href="style.css">
<?
ob_start();
include("config.php");  
if($_SESSION['naam'] == "" AND $_SESSION['status'] == "") {
 if($_COOKIE['naam'] == "" AND $_COOKIE['wachtwoord'] == "" AND $_COOKIE['email'] == "") {
  if(isset($_GET['login'])) {
   if($_POST['naam'] != "" AND $_POST['wachtwoord'] != "") {
    $sql = "SELECT * FROM gebruikers WHERE naam='".$_POST['naam']."'";
    $resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
    $rij = mysql_fetch_object($resultaat);
    $dbpass = htmlspecialchars($rij->wachtwoord);
    $status = htmlspecialchars($rij->status);
    $email = htmlspecialchars($rij->email);
    $actief = htmlspecialchars($rij->actief);
    $pass = md5($_POST['wachtwoord']);
    if($dbpass == $pass) {
     if($actief == 1) {
      $_SESSION['naam'] = $_POST['naam'];
      $_SESSION['status'] = $status; 
      if($_POST['blijven'] == "1") {
       setcookie("naam", $_POST['naam'], time() + 365 * 86400);
       setcookie("wachtwoord", $pass, time() + 365 * 86400); 
      }
      header("Location: $inlogp");
     }else{
      echo "<font color='red'><b>Je account is nog niet geactiveerd!</b><font>";
     }
    }else{
     echo "<font color='red'><b>Je wachtwoord en/of naam is incorrect!</b></font>";
    }
   }else{
    echo "<font color='red'><b>Je bent een veld vergeten in te vullen!</b></font>";
   }
     
  }else{ }
   ?>
   
   
   <form method="post" action="<? echo $_SERVER['PHPSELF']; ?>?login">
   <table>
    <tr>
     <td>Naam:</td><td><input type="text" name="naam"></td>
    </tr>
    <tr>
     <td>Wachtwoord:</td><td><input type="password" name="wachtwoord"></td>
    </tr>
    <tr>
     <td></td><td><input type="checkbox" name="blijven" value="1"> Ingelogd blijven</td>
    </tr>
    <tr>
     <td></td><td><input type="submit" value="Inloggen"></td>
    </tr>
   </table>
   <a href="wachtwoord_vergeten.php"><small>Wachtwoord vergeten?</small></a>
   </form>
   <?
  
 }else{
  $sql = "SELECT * FROM gebruikers WHERE naam='".$_COOKIE['naam']."'";
  $resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
  $rij = mysql_fetch_object($resultaat);
  $dbnaam = htmlspecialchars($rij->naam);
  $dbstatus = htmlspecialchars($rij->status);
  $dbpass = htmlspecialchars($rij->wachtwoord);
  
  $pass = $_COOKIE['wachtwoord'];
  $naam = $_COOKIE['naam'];
  if($dbpass == $pass AND $dbnaam == $naam) {
   $_SESSION['naam'] = $dbnaam;
   header("Location: $inlogp");
  }else{
   echo "<font color='red'><b>Eén van je cookies klopt niet met wat in de db staat!</b></font>";
  }
 }
}else{
?> 
Je bent al ingelogd..<a href=ingelogd.php>Klik hier</a> om door te gaan
<? 
}
?>

De config hierbij is:
PHP:
<?
$sitenaam = "Eisdatop.com"; //de naam van je site
$sitemail = "info@eisdatop.com"; //emailadres van je site
$inlogp = "ingelogd.php"; //pagina waar je heen moet gaan als je bent ingelogd
$actiefurl = "http://www.eisdatop.com/inloggen/activeren.php"; //de volledige link naar de pagina waar je je activatie code in kunt voeren. 
$npassurl = "www.eisdatop.com/inloggen/nieuw_wacht.php"; //de volledige link naar de pagina waar je je nieuwe wachtwoord in kunt voeren. 
$dbhost = "localhost"; // host van je database, bijna altijd localhost
$dbuser = "eisdatop_com"; // username voor je mysql database
$dbpass = "******"; // wachtwoord van je database
$dbname = "eisdatop_com_1"; // de database

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
?>

Nu wil ik graag, dat op de pagina waar je binnenkomt als je ingelogd hebt, Zoiets komt te staan van: Welkom, piet!

Volgens mij moet zoiets met cookies ofzo, maar ik kom er niet helemaal uit. Weet iemand hoe het wel moet?

Alvast bedankt!:thumb:
 
Gewoon de naam uit de database halen en weergeven lijkt me ? :)
 
gewoon:

PHP:
echo $_SESSION['naam'];
Dan moet je wel op die pagina, waar je dat dan neer wilt zetten dit bovenaan zetten:

session_start();

Je kunt dat ook, net als dat ob_start(); in je config bestand zetten, dan hoef je alleen het bestand te includen :)

Enneh.. waarom heb je 2 keer ob_start(); ?:confused: :)
 
Jpeetje, dat snap ik ook wel, maar als je inlogd met een gebruikersnaam, hoe geef je die naam dan weer uit de database?

Maar dankzij sander is het opgelost:thumb:

Waarom 2x obstart? weet ik niet eigenlijk, zie et zelf nou ook!:cool:
 
Ben ik weer met een volgende probleem, ik ben bezig om om dit loginscriptje een soort profielen systeem te maken. Dat lukt al aardig, alleen bij de update/wijzigen van een profiel krijg ik een foutmelding:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '''WHERE naam='bier'' at line 3
Dat krijg ik als ik de volgende link gebruik:
http://www.eisdatop.com/inloggen/wijzig.php?naam=bier

en dan alleen de naam wijzig, weet iemand waar het aan kan liggen? Alvast bedankt! (als je iets wil testen

Dit is het script wat ik gebruik voor het wijzigen

PHP:
<?
include ("safe.php");
include ("config.php");

if($_POST['wijzig']){
$update = "UPDATE gebruikers SET enaam='".$_POST['enaam']."', woonplaats='".$_POST['woonplaats']."', 
provincie='".$_POST['provincie']."', geslacht='".$_POST['geslacht']."', roken='".$_POST['roken']."', 
geboorte='".$_POST['geboorte']."', vrijgezel='".$_POST['vrijgezel']."', msn='".$_POST['msn']."',
homepage='".$_POST['homepage']."', overig'".$_POST['overig']."'WHERE naam='".$_GET['naam']."'";
$query = mysql_query("$update") or die(mysql_error());
echo "Je profiel is upgedated! <a href=http://www.eisdatop.com/inloggen/ingelogd.php>Klik hier</a> om door te gaan!";
}

$select = "SELECT * FROM gebruikers WHERE naam='".$_GET['naam']."'";;
$query = mysql_query($select)or die(mysql_error());


while($list = mysql_fetch_object($query)){
$enaam=$list->enaam;
$woonplaats=$list->woonplaats;
$provincie=$list->provincie;
$geslacht=$list->geslacht;
$roken=$list->roken;
$geboorte=$list->geboorte;
$vrijgezel=$list->vrijgezel;
$msn=$list->msn;
$homepage=$list->homepage;
$overig=$list->overig;

}

echo "<p><table border=1>
<form method=post> 
    <tr>
        <td>Je naam:</td>
        <td>
            <p><input type=text size=20 name=enaam value=$enaam></p>
        </td>
    </tr>
    <tr>
        <td>Je woonplaats:</td>
        <td>
            <p><input type=text size=20 name=woonplaats value=$woonplaats></p>
        
        </td>
    </tr>
    <tr>
        <td>Provincie:</td>
        <td><input type=text size=20 name=provincie value=$provincie></td>
    </tr>
    <tr>
        <td>Geslacht:</td>
        <td>
            <p><select name=geslacht size=1 value=$geslacht>
                <option>man</option>
                <option>vrouw</option>
            </select></p>
        
        </td>
    </tr>
    <tr>
        <td>Rook je?</td>
        <td>
            <p><select name=roken size=1 value=$roken>
                <option>nee</option>
                <option>ja</option>
            </select></p>
        
        </td>
    </tr>
    <tr>
        <td>Geboorte datum:</td>
        <td>
            <p><input type=text size=10 name=geboorte
            value=$geboorte></p>
        
        </td>
    </tr>
    <tr>
        <td>Vrijgezel?</td>
        <td>
            <p><select name=vrijgezel size=1 value=$vrijgezel>
                <option>ja</option>
                <option>nee</option>
            </select></p>
        
        </td>
    </tr>
    <tr>
        <td>E-mail/MSN:</td>
        <td>
            <p><input type=text size=20 name=msn value=$msn></p>

        </td>
    </tr>
    <tr>
        <td>Homepage:</td>
        <td>
            <p><input type=text size=20 name=homepage value=$homepage></p>
        
        </td>
    </tr>
    <tr>
        <td>Wat wil je nog meer kwijt? </td>
        <td>
            <p><textarea name=overig rows=5 cols=100 value=$overig></textarea></p>
        
        </td>
    </tr>
</table>


    <p><input type=submit name=wijzig value=Wijzig></p>
</form><p>";

include ("onder.php");
?>
:cool:
 
In die UPDATE query moet je een spatie tussen de ' en de WHERE doen :)
 
<?
include ("safe.php");
include ("config.php");

if($_POST['wijzig']){
$update = "UPDATE gebruikers SET enaam='".$_POST['enaam']."', woonplaats='".$_POST['woonplaats']."',
provincie='".$_POST['provincie']."', geslacht='".$_POST['geslacht']."', roken='".$_POST['roken']."',
geboorte='".$_POST['geboorte']."', vrijgezel='".$_POST['vrijgezel']."', msn='".$_POST['msn']."',
homepage='".$_POST['homepage']."', overig'".$_POST['overig']."'WHERE naam='".$_GET['naam']."'";
$query = mysql_query("$update") or die(mysql_error());
echo "Je profiel is upgedated! <a href=http://www.eisdatop.com/inloggen/ingelogd.php>Klik hier</a> om door te gaan!";
}

$select = "SELECT * FROM gebruikers WHERE naam = '".$_GET['naam']."'";;
$query = mysql_query($select)or die(mysql_error());


while($list = mysql_fetch_object($query)){
$enaam=$list->enaam;
$woonplaats=$list->woonplaats;
$provincie=$list->provincie;
$geslacht=$list->geslacht;
$roken=$list->roken;
$geboorte=$list->geboorte;
$vrijgezel=$list->vrijgezel;
$msn=$list->msn;
$homepage=$list->homepage;
$overig=$list->overig;

}

echo "<p><table border=1>
<form method=post>
<tr>
<td>Je naam:</td>
<td>
<p><input type=text size=20 name=enaam value=$enaam></p>
</td>
</tr>
<tr>
<td>Je woonplaats:</td>
<td>
<p><input type=text size=20 name=woonplaats value=$woonplaats></p>

</td>
</tr>
<tr>
<td>Provincie:</td>
<td><input type=text size=20 name=provincie value=$provincie></td>
</tr>
<tr>
<td>Geslacht:</td>
<td>
<p><select name=geslacht size=1 value=$geslacht>
<option>man</option>
<option>vrouw</option>
</select></p>

</td>
</tr>
<tr>
<td>Rook je?</td>
<td>
<p><select name=roken size=1 value=$roken>
<option>nee</option>
<option>ja</option>
</select></p>

</td>
</tr>
<tr>
<td>Geboorte datum:</td>
<td>
<p><input type=text size=10 name=geboorte
value=$geboorte></p>

</td>
</tr>
<tr>
<td>Vrijgezel?</td>
<td>
<p><select name=vrijgezel size=1 value=$vrijgezel>
<option>ja</option>
<option>nee</option>
</select></p>

</td>
</tr>
<tr>
<td>E-mail/MSN:</td>
<td>
<p><input type=text size=20 name=msn value=$msn></p>

</td>
</tr>
<tr>
<td>Homepage:</td>
<td>
<p><input type=text size=20 name=homepage value=$homepage></p>

</td>
</tr>
<tr>
<td>Wat wil je nog meer kwijt? </td>
<td>
<p><textarea name=overig rows=5 cols=100 value=$overig></textarea></p>

</td>
</tr>
</table>


<p><input type=submit name=wijzig value=Wijzig></p>
</form><p>";

include ("onder.php");
?>

Ik denk dat dit het wel doet.. een spatie tussen where = bier
 
Bedankt voor de [simpele] oplossingen!ik keek er gewoon overheen, matig van mezelf.

Maar dan zit ik met nog een probleempje, iedereen die inlogd en naar deze pagina gaat, kan het profiel aanpassen, en dat moet niet de bedoeling zijn!

Dus er moet een vergelijking oid gemaakt worden, met de cookie en de verander.php?naam=xxx.

Mijn vraag is: hoe zit dit? Hoe doe je dat?
:thumb:

ojah, dit is de safe.php, die ingeclude word:
PHP:
<?
session_start();
ob_start();
//deze pagina include je in wat beveiligd moet worden
include("config.php");
if($_SESSION['naam'] == "" AND $_SESSION['status'] == "") {
 if($_COOKIE['naam'] == "" AND $_COOKIE['wachtwoord'] == "") {
  echo "Je bent niet ingelogd!<br>Klik <a href='inloggen.php'>hier</a> om in te loggen.";
  exit;
 }else{
  $sql = "SELECT * FROM gebruikers WHERE naam='".$_COOKIE['naam']."'";
  $resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
  $rij = mysql_fetch_object($resultaat);
  $dbnaam = htmlspecialchars($rij->naam);
  $dbstatus = htmlspecialchars($rij->status);
  $dbpass = htmlspecialchars($rij->wachtwoord);
  
  $pass = $_COOKIE['wachtwoord'];
  $naam = $_COOKIE['naam'];
  if($dbpass == $pass AND $dbnaam == $naam) {
   $_SESSION['naam'] = $dbnaam;
   header("Location: $_SERVER[PHPSELF]");
  }else{
   echo "<font color='red'><b>Eén van je cookies klopt niet met wat in de db staat!</b></font>";
   exit;
  }
 }
 }else{
}
?>
 
Maak een extra kolom aan, bijv 'niveau'. Hiermee geef je het niveau van de gebruiker aan (normaal lid, moderator, administrator). Als het niveau 1 is, dan is het een normaal lid. Als het niveau groter dan 1 is, dan mag hij / zij die pagina bezoeken.

Of, als je het simpeler wil doen, je kijkt of de gebruikersnaam van de ingelogde gelijk is aan jouw gebruikersnaam (ik ga ervanuit dat jij dan als enige toegang tot die pagina hebt), zo niet, dan breek je de pagina af. Anders toon je de pagina.

Tis vrij simpel :)
 
Goeie morge!

Dat is niet echt wat ik bedoel, het is ledensysteem, waar leden een profiel aan kunnen maken. En door anderen laten bekijken. en een status kolom heb ik al, dat zit wel goed.

Maar wat ik bedoel, is dat als persoon x inlogd, en dan in de balk intypt:
http://www.eisdatop.com/inloggen/verander.php?naam=y

Dat hij alle profielen kan wijzigen, en niet alleen ?naam=x.

Het is dus niet goed beveiligd, waar jij zei, kijken of de gebruikersnaam van de ingelogde vergelijken met die van mij, dat moet niet, er moet gekeken worden, of de ingelogde wel op de rechtmatige verander.php zit, zoniet, dan moet het script afgebroken worden.

Snap je? Ik niet!

Edit//

Het met volgens mij zoiets zijn maar dit klopt niet:
PHP:
if($_SESSION['naam'] = '".$_GET['naam']."'

Dus zoiets van: als de sesie de naam xxx heeft en de ?naam=xxx is, dan moet het gewijzigd kunnen worden. Zo niet moet het script afgebroken worden! Wie kan helpen?:confused:
 
Laatst bewerkt:
Geplaatst door eisdatop
Goeie morge!
Middag :p
Het met volgens mij zoiets zijn maar dit klopt niet:
PHP:
if($_SESSION['naam'] = '".$_GET['naam']."'
Waarom voeg je die enkele quotes dan ook toe ? :p
PHP:
if($_SESSION['naam'] == $_GET['naam'])
{
// Gebruiker mag profiel wijzigen ...
Succes :thumb:
 
Laatst bewerkt:
Jpeetje, mijn held:D
Het werkt dus nu voor zover!
Maar dan is er nog iets, leden kunnen ook wat over hen zelf vertellen, heel leuk, maar nu wil ik graag dat html codes gebruikt kunnen worden om het profiel per persoon iets op te fraaien.

Nu heb ik wat uitgetest, door wat tekst in te voeren en dan de volgende code om te testen: <img scr="plaatje.gif"> dit deed ik in het veld type BLOB maar dat wil niet(rood kruisje op desbetreffend profiel) ook TEXT werkt niet

Zou je mij nu ook kunnen zeggen wat wel werkt?

Ook zit ik nog met iets anders, als een lid zijn profiel maakt, kan hij een url geven van een afbeelding, en die wordt op de volgende manier weergegeven:
<img scr=$foto>
Maar dan komt er geen plaatje(weer rood kruisje!), en ik weet zeker dat dat wel moet, want die url staat wel in de database!
 
Laatst bewerkt:
Het is
Code:
<img [b]src[/b]="link">
Niet:
Code:
<img [b]scr[/b]="link">
:)
 
Haha, vrij stom van me, toch bedankt!

Maar dan zit ik nog met het maken van een profiel, en dat mensen html codes enzo kunnen invoeren(Cu2-style) Dacht heel simpel, alles in een text veld in mysql in te voeren, en dan weer weer laten geven met een mysql query. Maar dan krijg ik de codes en de tekst als gewone platte tekst. Kan iemand mij vertellen hoe dit moet/werkt? Ik kom er namelijk niet uit:confused:

//Edit, werkt nu in eens wel, beter om!:thumb:
 
Laatst bewerkt:
Ik zou daar toch mee oppassen, je kan beter een UBB parser zoeken/maken. Dan kunnen ze niet alle html codes gebruiken.
 
Heb ik ook al aan gedacht, maar dan kunnen mensen tog wel html invoeren als ik het goed heb? Daar zit ik nog mee, en met ubb kun je volgens mij geen <div> enzo gebruiken, of heb ik dat verkeerd?

Of is er een mogelijkheid dat je, op de manier die ik gebruik, bepaalde codes uit kan zetten, zoals javascript, frames ed?

//edit:

Nog iets, er heeft net iemand zich aangemeld, onder de naam frans bauer. zit een spatie in die naam, met het volgende scriptje geef ik de lijst weer met alle profielen:

lijst.php
PHP:
<?
include("config.php");
function selecteer(){
$select = "SELECT naam,id FROM gebruikers ORDER BY naam 

ASC";
$obj = mysql_query($select) or 

die($MySQLError.mysql_error());
return $obj; }

$res = selecteer();
while($row = mysql_fetch_object($res)) {
echo "<b>- <a 

href=profiel.php?naam=$row->naam>$row->naam</b><br>";
}

include("onder.php");
?>

Maar als ik het profiel wil bekijken van die frans bauer dus, krijg ik als link: profiel.php?naam=frans ipv -> profiel.php?naam=frans bauer

Waar kan dit nu weer aan liggen? ik gebruik trouwens als mysql veld: text, eerst was dat varchar(maar dat kan niet meer omdat meerdere woorden worden gebruikt, maar wie weet raad?
 
Laatst bewerkt:
heb geen oplossing voor je, alleen een kleine vraag...

mocht je erin slagen het ledensysteem werkende te krijgen, zou ik hem dan van je mogen "kopieeren" zeg maar... ik ben al tijdje bezig ook zoiets te zoeken voor op m'n site, maar ben nog niet zo bekend met PHP/MySQL om het zelf te programmeren...

alvast bedankt en succes :thumb:
 
Hij werkt, ben em alleen aan het uitbreiden, en misgien dat ik de bron vrijgeef. weet ik nog niet, hant er van af hoeveel werk er nog in zit.

Kan ook niet zeggen op welk termijn hij klaar is:cool:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan