Inloggen in bestaand script

Status
Niet open voor verdere reacties.

Gust1977

Gebruiker
Lid geworden
8 nov 2007
Berichten
70
Mijn voorganger heeft in perl een loginscript gemaakt. De gegevens worden opgeslagen in een database. Ikzelf ken niets van perl, dus zou ik via php gebruik willen maken van de database en de huidige logingegevens

- ik maak dus een loginscript in php
- de mensen moeten met diezelfde gegevens kunnen inloggen
- telkens wanneer men inlogt, wil ik dat dat ook geregistreerd wordt in een nieuwe database

Het lukt mij niet om perl te combineren met php. Dus hoe kun je met een loginscript in php controleren of de gegevens correct zijn, en dit nog eens automatisch wegschrijven? Ik ziet hier al een hele week op te sukkelen.

Gegevens:
user (de loginnaam)
pass (het paswoord)
de database heet 'users'
 
Ik zie niet in waarom je perl dan wilt combineren met PHP? Je kunt perl dan toch volledig afschrijven? Ik neem overigens aan dat je database MySQL is?
 
Ik wil echt af van die perl. Alleen weet ik niet hoe ik dat in php moet aanpakken. De database is MySQL
 
Tsja, ik kan je wel een inlogscript gaan schrijven, maar daar zijn er echt al honderden van te vinden (waarschijnlijk alleen al op Helpmij). Vooruit dan, een opzetje:

PHP:
<?php

session_start();

if ( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) {

  $connection = mysql_connect ( 'localhost' , 'MySQLusername' , 'MySQLpassword' );
  $db = mysql_select_db ( 'users' , $connection );

  $result = mysql_query ( "SELECT user FROM table WHERE user = '" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "' AND pass = '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "'");

  if ( mysql_num_rows ( $result ) > 0 ) {

    if ( mysql_query ( "INSERT INTO loginlog (user, ip) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "', '" . $_SERVER[ 'REMOTE_ADDR' ] . "')" ) ) {

      $_SESSION[ 'ingelogd' ] = true;
      $_SESSION[ 'user' ] = $_POST[ 'user' ];

    } else {

      header ( 'Location: login.php' );

    }

  } else {

    header ( 'Location: login.php' );

  }

}
?>

Toelichting:

- Je moet op regel 7 nog je inloggegevens voor MySQL invullen (localhost kun je waarschijnlijk laten staan voor de host)
- Op regel 10 moet je table vervangen door de naam van je tabel
- Op regel 14 moet je loginlog vervangen door de naam van de tabel waarin je de log wilt opslaan
- Op regel 14 moet je {user, ip} vervangen door de namen van de velden gescheiden door komma's
- Op regel 14 moet je tussen de tweede set haken de waarde voor de velden gescheiden door komma's ingeven
- Op regel 21 en 27 moet je login.php vervangen door het pad naar je login formulier.
- Je moet hier zelf nog een login formuliertje bij schrijven (ik neem aan dat dat wel lukt)
- Je kunt nu op elke beveiligde pagina kijken of $_SESSION[ 'ingelogd' ] gelijk is aan true, zo niet verwijzen naar de inlogpagina
 
Waaw, heel erg bedankt!!!! Ik ben bezig met het toepassen ervan. Dit stukje code is toch bedoeld als de verwerk-pagina niet? Want je zei dat je er ergens nog een stukje tussen moet schrijven.

Ik heb één probleem als ik het toepas:

Parse error: syntax error, unexpected ',', expecting ']' in /usr/www/pad/naar/de/bestanden/reisdocumenten/proberen.php on line 14

Dit is regel 14:
PHP:
    if ( mysql_query ( "INSERT INTO reisdocumenten_bezoekers (user, pass, dossiernummer, currentdate) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user', 'pass', 'dossiernummer', 'currentdate' ] ) . "', '" . $_SERVER[ 'REMOTE_ADDR' ] . "')" ) ) {

Je schrijft: 'Op regel 14 moet je tussen de tweede set haken de waarde voor de velden gescheiden door komma's ingeven"
Welke set haken? Bedoel je de () of de [] haken?

Dit is het hele script die ik dan dankzij jou aan het toepassen ben:

proberen.php
PHP:
<?php
 
session_start();
 
if ( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) {
 
  $connection = mysql_connect ( 'localhost' , geheim' , geheim);
  $db = mysql_select_db ( 'tabelnaam' , $connection );
 
  $result = mysql_query ( "SELECT user FROM tabelnaam WHERE user = '" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "' AND pass = '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "'");
 
  if ( mysql_num_rows ( $result ) > 0 ) {
 
    if ( mysql_query ( "INSERT INTO andere_tabelnaam (user, pass, dossiernummer, currentdate) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user', 'pass', 'dossiernummer', 'currentdate' ] ) . "', '" . $_SERVER[ 'REMOTE_ADDR' ] . "')" ) ) {
 
      $_SESSION[ 'ingelogd' ] = true;
      $_SESSION[ 'user' ] = $_POST[ 'user' ];
 
    } else {
 
      header ( 'Location: index.php' );
 
    }
 
  } else {
 
    header ( 'Location: index.htm' );
 
  }
 
}
?>

En dit is index.htm
HTML:
 <form method="post" onSubmit="return CH();" action="proberen.php">
<table width="200" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="2c4c64" bgcolor="EDF3F8">
  <tr>
    <td height="20"> 

    <table width="200" border="0" align="center" cellpadding="5" cellspacing="0" bordercolor="2c4c64" bgcolor="EDF3F8">
<tr>
<td width="50%"><p align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>username</b></font>:</p>  </td>
<td width="50%"><input type="text" size="8" name="login" id="login" /></td>
</tr>
<tr>
  <td height="10"></td>
  <td height="10"></td>
</tr>
<tr>
  <td><div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">paswoord:</font></b></div></td>
  <td><input type="password" size="9" name="ww" id="ww"/></td>
</tr>
<tr>
  <td height="10"></td>
  <td height="10"></td>
</tr>
<tr>
  <td><div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">DOS-nr:</font></b></div></td>
  <td><input name="dossiernummer" type="text" id="dossiernummer" onkeypress="return cijfers(event)" size="8" maxlength="5"/ onSubmit="return CH();"></td>
</tr>
</table>
    </td>
  </tr>
</table>

<p align="center">
  <input type="submit" value="Inloggen" />
</p>
</form>
 
Laatst bewerkt:
$_POST is een array met de waarden die je verstuurd hebt. Om één van die waarden aan te roepen, kun je maar één key tussen de haken plaatsen. Daarna, zul je het $_POST[] stuk weer moeten herhalen.

Dan krijg je zoiets:

PHP:
if ( mysql_query ( "INSERT INTO reisdocumenten_bezoekers (user, pass, dossiernummer, currentdate) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user' ] . "', '" . $_POST[ 'pass' ] . "', '" . $_POST[ 'pass' ] . "', '" . $_POST[ 'dossiernummer' ] . "', '" . $_POST[ 'currentdate' ] . "')" ) ) {
 
Dus dan ga je ook
PHP:
      $_SESSION[ 'user' ] = $_POST[ 'user' ];
moeten herhalen. Dus krijg je dit veronderstel ik?

PHP:
$_SESSION[ 'ingelogd' ] = true;
$_SESSION[ 'user' ] = $_POST[ 'user' ];
$_SESSION[ 'pass' ] = $_POST[ 'pass' ];

Dan krijg ik de volgende melding:
Parse error: syntax error, unexpected '{' in /usr/www/users/dotserv/gazelle/reisdocumenten/proberen.php on line 14


Als ik die { dan weghaal op het einde van lijn 14 krijg ik dit:
Parse error: syntax error, unexpected T_VARIABLE in /usr/www/users/dotserv/gazelle/reisdocumenten/proberen.php on line 16


Maar dat is dan weeral omdat ik ergens een haakje vergeten ben...?

Zucht...:shocked:
 
Dat was een slordigheidje van mij:

PHP:
if ( mysql_query ( "INSERT INTO reisdocumenten_bezoekers (user, pass, dossiernummer, currentdate) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'dossiernummer' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'currentdate' ] ) . "')" ) ) {
 
Echt, ik doe veel moeite om het te vinden hoor. Jij vooral, ik durf daarom bijna geen berichten meer te sturen :o

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/www/users/dotserv/gazelle/reisdocumenten/proberen.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/dotserv/gazelle/reisdocumenten/proberen.php:12) in /usr/www/users/dotserv/gazelle/reisdocumenten/proberen.php on line 27


PHP:
<?php
 
session_start();
 
if ( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) {
 
  $connection = mysql_connect ( 'localhost' , 'geheim' , 'geheim' ); 
  $db = mysql_select_db ( 'users' , $connection ); 
 
  $result = mysql_query ( "SELECT user FROM users WHERE user = '" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "' AND pass = '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "'");
 
  if ( mysql_num_rows ( $result ) > 0 ) {
 
if ( mysql_query ( "INSERT INTO nieuwe_tabel (user, pass, dossiernummer) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'dossiernummer' ] ) . "')" ) ) { 


 $_SESSION[ 'ingelogd' ] = true;
$_SESSION[ 'user' ] = $_POST[ 'user' ];
$_SESSION[ 'pass' ] = $_POST[ 'pass' ]; 
$_SESSION[ 'dossiernummer' ] = $_POST[ 'dossiernummer' ]; 
 
    } else {
 
      header ( 'Location: index.php' );
 
    }
 
  } else {
 
    header ( 'Location: index.htm' );
 
  }
 
}
?>
 
ik durf daarom bijna geen berichten meer te sturen :o

Dat is volledig onterecht. Ik vind het leuk om je te helpen :p

De foutmelding geeft aan dat de query niet helemaal klopt. Dat kan aan een paar dingen liggen:

- Je hebt de naam van het veld verkeerd. M.a.w. er is geen veld genaamd 'user' of geen veld genaamd 'pass'
- De naam van de tabel klopt niet. M.a.w. er is geen tabel genaamd 'users'. (N.B. je weet dat er een groot verschil is tussen een database en tabel hè?)

EDIT: die tweede error zal ik nog ff naar kijken.

EDIT2: Die error krijg je als je al output hebt verstuurd voordat je een header (bijvoorbeeld de sessie) probeert aan te passen. Nou zat ik me suf te kijken op waar je dan output verstuurd, maar het komt waarschijnlijk door de eerste error. DIe verstuurd output. Dus als je de eerste error oplost, is de tweede waarschijnlijk vanzelf weg.
 
Laatst bewerkt:
Daar kan het wel eens aan liggen? Waar wordt er aangeduid om welke database het gaat?

regel 7:
PHP:
  $connection = mysql_connect ( 'localhost' , 'MySQLusername' , 'MySQLpassword' );

'localhost' = localhost
'MySQLusername' = de username toch? of is dit de databasenaam?
'MySQLpassword' = paswoord

de tabel heet "users"
elementen van deze tabel: user en pass

de nieuwe tabel heet anders

Ik krijg ook altijd deze fout:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/www/users/dotserv/gazelle/reisdocumenten/proberen_5.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at /usr/www/users/dotserv/gazelle/reisdocumenten/proberen_5.php:12) in /usr/www/users/dotserv/gazelle/reisdocumenten/proberen_5.php on line 30


Dit is regel 12
PHP:
 if ( mysql_num_rows ( $result ) > 0 ) {

Dit is regel 30
PHP:
header ( 'Location: index.htm' );
 
Laatst bewerkt:
PHP:
$db = mysql_select_db ( 'users' , $connection );

Daar moet je 'users' vervangen door de naam van je database. Ik weet niet wat de naam van jouw database is, dus ik kan het niet voor je invullen.

Het zou trouwens aan nog iets kunnen liggen ;)

Afhankelijk van je MySQL instellingen, zou het kunnen zijn dat je backticks moet gebruiken in je query.

PHP:
$result = mysql_query ( "SELECT `user` FROM `users` WHERE `user` = '" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "' AND `pass` = '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "'");

't Is een beetje een long shot, maar het valt uiteraard te proberen. Als het niet één van deze twee dingen is, zie ik het even niet.
 
Nu wordt het wel weggeschreven in de database, maar hij controleert niet of de gegevens juist zijn.

Bovendien komt er een witte pagina en wordt het niet doorgestuurd naar de pagina, aangeduid in de header-location.

Hij geeft in ieder geval geen vervelende fouten meer :p
 
Hoezo controleert ie nu niet of de gegevens juist zijn? Dat staat er volgens mij toch duidelijk in.

Dat je niet wordt doorverwezen is logisch, je geeft alleen een redirect header als de gebruiker niet gevonden is of als de inloggegevens niet kunnen worden toegoevoegd. Je zult dus onder het zetten van de $_SESSION variabelen nog een header ( 'Location: xxx.php' ); moeten plaatsen.

Maar gaarne nog een beetje uitleg over:

hij controleert niet of de gegevens juist zijn

Heb je geprobeerd met andere gegevens dan in de database staan in te loggen? En lukte dat?
 
Even een update:

index.php
PHP:
 <form method="post" onSubmit="return CH();" action="proberen.php">
<table width="200" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="2c4c64" bgcolor="EDF3F8">
  <tr>
    <td height="20"> 

    <table width="200" border="0" align="center" cellpadding="5" cellspacing="0" bordercolor="2c4c64" bgcolor="EDF3F8">
<tr>
<td width="50%"><p align="right"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b>username</b></font>:</p>  </td>
<td width="50%"><input type="text" size="8" name="user" id="user" /></td>
</tr>
<tr>
  <td height="10"></td>
  <td height="10"></td>
</tr>
<tr>
  <td><div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">paswoord:</font></b></div></td>
  <td><input type="password" size="9" name="pass" id="pass"/></td>
</tr>
<tr>
  <td height="10"></td>
  <td height="10"></td>
</tr>
<tr>
  <td><div align="right"><b><font size="2" face="Verdana, Arial, Helvetica, sans-serif">DOS-nr:</font></b></div></td>
  <td><input name="dossiernummer" type="text" id="dossiernummer" onkeypress="return cijfers(event)" size="8" maxlength="5"/ onSubmit="return CH();"></td>
</tr>
</table>
    </td>
  </tr>
</table>

<p align="center">
  <input type="submit" value="Inloggen" />
</p>
</form>


proberen.php
PHP:
<?php

session_start();
 
if ( $_SERVER[ 'REQUEST_METHOD' ] == 'POST' ) {
 
  $connection = mysql_connect ( 'localhost' , 'username' , 'password'); 
  $db = mysql_select_db ( 'databasenaam' , $connection ); 
 
  $result = mysql_query ( "SELECT login FROM users WHERE login = '" . mysql_real_escape_string ( $_POST[ 'login' ] ) . "' AND ww = '" . mysql_real_escape_string ( $_POST[ 'ww' ] ) . "'");
 
  if ( mysql_num_rows ( $result ) > 0 ) {
 
if ( mysql_query ( "INSERT INTO reisdocumenten_bezoekers (user, pass, dossiernummer) VALUES ('" . mysql_real_escape_string ( $_POST[ 'user' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'pass' ] ) . "', '" . mysql_real_escape_string ( $_POST[ 'dossiernummer' ] ) . "')" ) ) { 


 $_SESSION[ 'ingelogd' ] = true;
$_SESSION[ 'user' ] = $_POST[ 'user' ];
$_SESSION[ 'pass' ] = $_POST[ 'pass' ]; 
$_SESSION[ 'dossiernummer' ] = $_POST[ 'dossiernummer' ]; 
 
    } else {
 
      header ( 'Location: juist.htm' );
 
    }
 
  } else {
 
    header ( 'Location: fout.htm' );
 
  }
 
}
?>

Let dus op goed.htm en fout.htm. Daar wordt ie nu niet naartoe verwezen (ik hoop trouwens dat die twee op de juiste plaats staan :p )
 
De headers die je er nu in hebt staan moeten allebei naar fout.htm gaan. Als je de if-else structuur namelijk eens goed bekijkt, zie je dat de onderste getriggerd wordt als de credentials niet kloppen. De boven wordt getriggerd als er geen record kan worden toegevoegd van het inloggen. Beide fouten dus.

Er moet nog een header bijkomen, direct onder het $_SESSION gebeuren, want dat is het enige stuk code dat wordt aangeroepen als alles klopt en werkt. Die moet dus doorverwijzen naar juist.htm .

En ik snap nog niet waarom je zegt dat de gegevens niet gecontroleerd worden. Of is dat inmiddels opgelost?
 
Misschien dat ze wel gecontroleerd worden, maar je kunt er nog met om het even welke gegevens in, dus niet alleen de bestaande logingegevens. Zo worden wel allemaal opgeslagen hoor.

Ik heb nu onder de session een header ( 'Location: juist.htm' ); gezet, dus

PHP:
$_SESSION[ 'ingelogd' ] = true;
$_SESSION[ 'user' ] = $_POST[ 'user' ];
$_SESSION[ 'pass' ] = $_POST[ 'pass' ]; 
$_SESSION[ 'dossiernummer' ] = $_POST[ 'dossiernummer' ]; 

      header ( 'Location: juist.htm' );

Maar nu wordt hij altijd naar de pagina juist.htm gestuurd: logingegevens (juist) ingevuld of niet :(

Ben het aan het bekijken wat er fout kan zijn
 
Dat vind ik dus heel apart,

In deze regel kijkt de parser hoeveel records er zijn met deze credentials:

PHP:
if ( mysql_num_rows ( $result ) > 0 ) {

Als het aantal records niet groter is dan 0, wordt je als het goed is meteen doorverwezen naar fout.htm . Ik kijk er nog even naar, maar ik vind het erg vreemd.
 
Ik heb ook nog een paar dagen gekeken maar geraak er eveneens nog niet aan uit. Ik heb intussen gekeken op http://be.php.net/crypt

Het SQL-commando of de juiste gegevens aanwezig zijn zou toch vrij eenvoudig moeten zijn. Maar er is al een insert-commando. En toch kom ik er niet... Mogelijk is dat omdat de paswoorden geencrypteerd zijn opgeslagen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan