eu... probleem met php/mysql...

Status
Niet open voor verdere reacties.

ilias

Gebruiker
Lid geworden
2 mei 2004
Berichten
31
wel....
hier ben ik weer met mijn niet werkende scripts...:o

het is de bedoeling van hiermee een inlogscript te schrijven, maar het geeft gwn niets....:(
PHP:
<body bgcolor="#8d8f8e">
<?
// definieër de functie voor addslashes/magic quotes
function slashes($tekst){
if(get_magic_quotes_gpc() == FALSE){
$text = addslashes($tekst);
}
return $tekst;
}
// zet meldingtext op NULL
$melding="";
// kijk na of er al iemand is ingelogd
if($HTTP_SESSION_VARS['login']==true){
?>
<b>U BENT INGELOGD</b><br>
<hr />
om uw passwoord te veranderen, klik <a href="passchange.php">hier</a>.<br>
<?
die();
}
// kijk na of het formulier is verzonden, als het is verzonden, evalueer :D 
elseif( isset($_POST['username'])==true AND isset($POST['passw1'])==true ){
$username = slashes($_POST["username"]);
$passw1 = slashes($_POST["passw1"]);
$passw=base64_encode($passw1);
$db=@mysql_pconnect("localhost","","") or die("verbinding maken met mysql server mislukt");
@mysql_select_db("skatevids_db",$db) or die("verbinding maken met database mislukt");
$slq_query="SELECT * FROM members WHERE username='".$username."' AND password='".$passw."'";
$result=mysql_query($sql_query,$db);
// kijk of er ook idd iemand bestaat met die username/password combinatie
if(mysql_num_rows($result)==1){
session_register("login");
session_register("usrname");
session_register("id");
$login=true;
$usrname=$username;
$resultaat=mysql_fetch_array($result);
$id=$resultaat['id'];
?>
<b>U BENT INGELOGD</b><br>
<hr />
om uw passwoord te veranderen, klik <a href="passchange.php">hier</a>.<br>
<?
die();
}
else{
$melding.="foute username/password combinatie";
}
}
else{
$melding="";
}
?>
<b class="error"><? echo($melding); ?></b>
<form action="special.php" method="post">
<table bgcolor="#8d8f8e" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td><b>USERNAME:</b></td>
<td><input type="text" name="username" size="30" maxlength="30" /></td>
</tr>
<tr>
<td><b>PASSWORD:</b></td>
<td><input type="password" name="passw1" size="30" maxlength="30" /></td>
</tr>
<tr>
<td align="right"><input type="submit" value="login" /></td>
<td align="left"><input type="reset" value="reset" /></td>
</tr>
</table>
</form>
</body>
 
PHP:
<body bgcolor="#8d8f8e">
<?
error_reporting(E_ALL);
session_start();
  function slashes($tekst)
  {
    if(get_magic_quotes_gpc() == FALSE)
    {
    $text = addslashes($tekst);
    }
  return $tekst;
  }

$melding = "";

  if(isset($_SESSION["login"]) == TRUE)
  {
    if($_SESSION["login"] == "Je wachtwoord")
    {
    ?>
    <b>U BENT INGELOGD</b><br>
    <hr />
    om uw passwoord te veranderen, klik <a href="passchange.php">hier</a>.<br>
    <?
    die();
    }
    else
    {
    // wachtwoord in sessie is fout, verwijder alle sessies
    session_unset();
    session_destroy();
    }
  }
  elseif((isset($_POST["username"]) == TRUE) AND (isset($_POST["passw1"]) == TRUE))
  {
  $username = slashes($_POST["username"]);
  $passw1 = slashes($_POST["passw1"]);
  $passw = base64_encode($passw1);
  $db = @mysql_pconnect("localhost","","") or die("verbinding maken met mysql server mislukt");
  @mysql_select_db("skatevids_db",$db) or die("verbinding maken met database mislukt");
  $query="SELECT * FROM members WHERE username = '" . $username . "' AND password = '" . $passw . "' LIMIT 0,1";
  $result = mysql_query($query) or die("Kon query niet uitvoeren: " . mysql_error());
    if(mysql_num_rows($result) == 1)
    {
    $rij = mysql_fetch_object($result);
    $_SESSION["username"] = $username;
    $_SESSION["id"] = $rij->id;
    ?>
    <b>U BENT INGELOGD</b><br>
    <hr />
    om uw passwoord te veranderen, klik <a href="passchange.php">hier</a>.<br>
    <?
    die();
    }
    else
    {
    $melding .= "foute username/password combinatie";
    }
  }
  ?>
  <b class="error"><? echo($melding); ?></b>
  <form action="special.php" method="post">
  <table bgcolor="#8d8f8e" border="0" cellpadding="0" cellspacing="0" width="100%">
  <tr>
  <td><b>USERNAME:</b></td>
  <td><input type="text" name="username" size="30" maxlength="30" /></td>
  </tr>
  <tr>
  <td><b>PASSWORD:</b></td>
  <td><input type="password" name="passw1" size="30" maxlength="30" /></td>
  </tr>
  <tr>
  <td align="right"><input type="submit" value="login" /></td>
  <td align="left"><input type="reset" value="reset" /></td>
  </tr>
  </table>
  </form>
  <?
  }
?>
</body>
(Niet getest)

Tips:
  • Als je sessies wil gebruiken, zet dan session_start() boven je script :rolleyes:
  • Gebruik geen session_register maar $_SESSION["naam"] = "waarde"; (de PHP handleiding zal je hetzelfde zeggen :))
  • Gebruik een erroropvanging achter al je query's, ook mysql_query()
  • Tis geen $POST maar $_POST ;)
  • Sla in je sessies een wachtwoord op ipv dat je een sessie met de naam 'login' een waarde TRUE meegeeft. Op die manier maak je 't voor hackers wel heel makkelijk.
En het belangrijkste:
Zet error_reporting(E_ALL); bovenaan al je scripts, vooral in de leer, ontwikkel en testfase !!!
Of verander je php.ini instellingen.
Dan zie je veeeeel sneller wat er fout gaat ;)

Succes :thumb:
 
Laatst bewerkt:
Hmm leuk, ik zou trouwens ook MD5 hashes gebruiken om je passwords te beveiligen in db :) Dit is script wat ik laast gebruikt heb:

PHP:
<?

/*
 * controleerd of de gegeven gebruikersnaam bestaat in de database
 * zo ja, dan word er gechecked of het gegeven password
 * het zelfde is als in de database voor die gebruiker
 * Als de gebruikersnaam en of password niet bestaat / over een komt
 * dan geeft het script een error melding terug. 1 of 2
 * Als alle gegevens goed zijn geeft hij een 0 terug.
 */
function confirmUser($username, $password){
   global $link;

   // voegd slashes toe als dat noodzakelijk is (voor de query)
   if(!get_magic_quotes_gpc()) {
	$username = addslashes($username);
   }
   // Controleerd of de gegeven gebruikersnaam in de database zit
   $q = "select password from werknemer where Usernamewn = '$username'";
   $result = mysql_query($q,$link);
   if(!$result || (mysql_numrows($result) < 1)){
      return 1;
   }

   // Haald password op uit de database, en haalt de slashes er uit
   $dbarray = mysql_fetch_array($result);
   $dbarray['password']  = stripslashes($dbarray['password']);
   $password = stripslashes($password);

 // controleerd of het password correct is
   if($password == $dbarray['password']){
      return 0;
   }
   else{
      return 2;
   }
}


function checkLogin(){
   if(isset($_COOKIE['cookname']) && isset($_COOKIE['cookpass'])){
      $_SESSION['username'] = $_COOKIE['cookname'];
      $_SESSION['password'] = $_COOKIE['cookpass'];
   }

   if(isset($_SESSION['username']) && isset($_SESSION['password'])){
      if(confirmUser($_SESSION['username'], $_SESSION['password']) != 0){
         unset($_SESSION['username']);
         unset($_SESSION['password']);
         return false;
      }
      return true;
   }
   else{
      return false;
   }
}

/*
 * Controleerd of de gebruiker al eerder is ingelogd is
 * en of er toen een session met die gebruiker actief is gemaakt
 * Dan word er nog gecontroleerd of de gebruiker onthouden is (cookies)
 * Mocht dat het geval zijn, dan worden de gevens gechecked.
 * als er true word terug gegeven, dan is de gebruiker ingelogd
 */
function displayLogin(){
// Controleerd of de gebruikers gegevens onthouden zijn
   global $logged_in;
   if($logged_in){
      echo "<h1>U bent ingelogd</h1>";
      echo "Welkom <b>$_SESSION[username]</b>, je bent nu ingelogd. <a href=\"logoutwn.php\">Uitloggen</a>";
      echo "<meta http-equiv=\"Refresh\" content=\"2;url=werknemer.php\">";
   }
   else{
?>
<body bgcolor="#5F0B7B" link="#FFFFFF" vlink="#FFFFFF" alink="#800080">
<h1><font color="#FFFFFF" face="Verdana">Login werknemer</h1></font>

<center>
<form action="" method="post">
<table align="left" border="0" cellspacing="0" cellpadding="3">
<tr><td><font color="#FFFFFF" face="Verdana" size="2">Gebruikersnaam:</td><td><input type="text" name="user" maxlength="30"></td></tr></font>
<tr><td><font color="#FFFFFF" face="Verdana" size="2">Password:</td><td><input type="password" name="pass" maxlength="30"></td></tr></font>
<tr><td colspan="2" align="left"><input type="checkbox" name="remember">
<font size="2"><font color="#FFFFFF" face="Verdana" size="1">Onthoud inlog gegevens</td></tr>
<tr><td colspan="2" align="right"><input type="submit" name="sublogin" value="Login"></td></tr>
</font>
</table>
</form>

<?
   }
}

if(isset($_POST['sublogin'])){
   if(!$_POST['user'] || !$_POST['pass']){
      die('Niet alle velden zijn ingevuld.');
   }

 //gebruikersnaam mag niet langer zijn dan 30 tekens, zo ja error melding
   $_POST['user'] = trim($_POST['user']);
   if(strlen($_POST['user']) > 30){
      die("Gebruikersnaam is te lang (niet langer dan 30 tekens)");
   }

 // Controleerd of gebruikersnaam en password goed zijn
   $md5pass = md5($_POST['pass']);
   $result = confirmUser($_POST['user'], $md5pass);

 // Controleerd error codes
   if($result == 1){
      die('Gebruikersnaam bestaat niet in de database.');
   }
   else if($result == 2){
      die('Incorrect password, Probeer opnieuw.');
   }

// Username and password correct, registreer session variables
   $_POST['user'] = stripslashes($_POST['user']);
   $_SESSION['username'] = $_POST['user'];
   $_SESSION['password'] = $md5pass;

// worden 2 cookies aangemaakt, 1 voor usernaam en 1 voor MD5 password die pas na 100 dagen verlopen
   if(isset($_POST['remember'])){
      setcookie("cookname", $_SESSION['username'], time()+60*60*24*100, "/");
      setcookie("cookpass", $_SESSION['password'], time()+60*60*24*100, "/");
   }
//Snelle refresh ter voorkoming dat data 2 keer gezonden word bij refresh
   echo "<meta http-equiv=\"Refresh\" content=\"0;url=$HTTP_SERVER_VARS[PHP_SELF]\">";
   return;
}
// maakt een login variable aan die je in ander script kunt gebruiken
$logged_in = checkLogin();

?>

Natuurlijk wel even DB connect filtje maken waar in je connectie met mysql db maakt en waar in je $link definieerd.
 
Laatst bewerkt:
Slecht script, sla nooit een wachtwoord en gebruikersnaam in een cookie en/of sessie op. Zijn nog meer dingen die ik kan opnoemen wat 3 keer niks is, maar beveiliging is wel 't belangrijkste :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan