Probleme mit PHP & MySQL

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

 

schalli

Betreff: Probleme mit PHP & MySQL

BeitragSo, Jun 01, 2008 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein DATENBANKPROBLEM mit PHP & MySQL.

Im Folgendem Code klappt zwar die Verbindung mit der Datenbank
(DB_Open) und auch das Beenden der Verbindung (DB_Close) funzt.
Aber zu den Funktionen DB_Read_pwd und DB_Write entsteht
zwar keine Fehlermeldung, doch sie erfüllen auch nicht ihren Sinn.

Code: [AUSKLAPPEN]
<?php
function DB_Open ()
{
  @mysql_connect("localhost","root","") or die("Verbindung zu MySQL gescheitert!");
  @mysql_select_db("chatfs") or die("Datenbankzugriff gescheitert!");
}
function DB_Write($uname,$pword,$email,$andat)
{
  $sql = "INSERT INTO mitglieder (id,uname,pword,email) VALUES             ('','$uname','$pword','$email')";
  if (mysql_query($sql))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
function DB_Close ()
{
  mysql_close();
}
function DB_read_pwd ($uname,$pword)
{
  $sql = "SELECT * FROM mitglieder";
  $result = mysql_query($sql);
  while ($row = mysql_fetch_assoc($result));
  {
    if ($uname == $row[uname] && $pword == $row[pword])
    {
      $id = $row[id];
    }
    else
    {
      $id = -1;
    }
  }
  return $id;
}
?>


Vielleicht weiß ja jemand von euch, was ich falsch mache.

Mfg Schalli
 

FWeinb

ehemals "ich"

BeitragSo, Jun 01, 2008 11:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe da jetzt so auf die Schnelle keinen Fehler gesehen aber ich würde das mit dem Passwort lesen anders machen ich würde die MySQL anfrage gleich nach dem Password Fragen lassen und nicht den Umweg über eine Schleiße gehen.

mfg

ichbin007

[Edit]

Code: [AUSKLAPPEN]

  $sql = "SELECT * FROM mitglieder WHERE uname=$uname";


(müsste eig so sein)
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Thorsten

BeitragSo, Jun 01, 2008 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
$sql = "INSERT INTO mitglieder (`id`,`uname`,`pword`,`email`) VALUES ('','$uname','$pword','$email')";

Die `` sind wichtig!

Zitat:
@mysql_connect("localhost","root","") or die("Verbindung zu MySQL gescheitert!");

Das funktioniert glaube ich auch nur so :
Zitat:
var=mysql_conncect [...] or die(..)


mfG,

Thorsten

Jolinah

BeitragSo, Jun 01, 2008 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
while ($row = mysql_fetch_assoc($result));


Am Ende ist ein Semikolon, wodurch der nachfolgende Block gar nicht ausgeführt wird. Weiterhin sollten die Eingaben mit mysql_real_escape_string() escaped werden, damit die Gefahr von SQL Injection minimiert wird. Und für Passwörter würde ich die PASSWORD()-Funktion von MySQL verwenden, damit sie verschlüsselt werden.

Code: [AUSKLAPPEN]
$uname = mysql_real_escape_string($uname);
$pword = mysql_real_escape_string($pword);
// usw...


Code: [AUSKLAPPEN]
INSERT INTO `mitglieder` (`uname`,`pword`,`email`) VALUES ('$uname', PASSWORD('$pword'), '$email')


Code: [AUSKLAPPEN]
SELECT * FROM `mitglieder` WHERE `uname`='$uname' AND `pword`=PASSWORD('$pword')

Thorsten

BeitragSo, Jun 01, 2008 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Jolinah : Man kann nicht einfach einseitig Passwörter verschlüsseln..
Außerdem empfiehlt sich eher das etwas kürzere md5 oder sha1.

mfG,

Thorsten

Jolinah

BeitragSo, Jun 01, 2008 11:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, Verschlüsseln war vielleicht der falsche Begriff Wink Es wird ein Hash gebildet. Und das schützt halt bei Direktzugriff auf die Datenbank (z.B. bei SQL-Injection) davor, dass man das Passwort einfach 1 zu 1 auslesen kann. (Gegen UPDATE bringts dann aber auch nichts mehr Wink)
 

schalli

BeitragSo, Jun 01, 2008 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also
Änderung 1:
Code: [AUSKLAPPEN]
function DB_Write($uname,$pword,$email,$andat)
{
  $uname = mysql_real_escape_string($uname);
  $pword = mysql_real_escape_string($pword);
  $email = mysql_real_escape_string($email); 
  $sql = "INSERT INTO mitglieder ('id','uname','pword','email') VALUES             ('','$uname','$pword','$email')";
  if (mysql_query($sql))
  {
    return 1;
  }
  else
  {
    return 0;
  }
}

Bei Funk. DB_Read_pwd weiß ich nicht, wie ich das bei eurem "Vergleichs-Prinzip" mit der id-Rückgabe mache.

Silver_Knee

BeitragSo, Jun 01, 2008 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
$row = mysql_fetch_assoc($result)
mach stratt assoc array und schreib bei den [] '' dazwischen....#


rechtschreibfehler waren absichht^^

ProfJake

ehemals "DTC" / "Fabian Niemann"

BeitragSo, Jun 01, 2008 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum machst du es eigentlich nicht als Klasse?
Ich mach das immre mit einem Interface und einer abstrakten Basisklasse
und von der leite ich dann 4e eine mySQL Klasse ab.

BtbN

BeitragSo, Jun 01, 2008 15:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Es müssen `` und keine '' sein bei Feldnamen, sonst funktionierts nicht. Ansonsten kann man die aber auch einfach weg lassen, da schert sich MySQL nicht drum.

Jolinah

BeitragMo, Jun 02, 2008 8:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Bei Funk. DB_Read_pwd weiß ich nicht, wie ich das bei eurem "Vergleichs-Prinzip" mit der id-Rückgabe mache.


Eigentlich ähnlich wie vorher, nur dass du nicht jede Zeile durchgehen musst:

Code: [AUSKLAPPEN]
function DB_read_pwd ($uname,$pword)
{
  $uname = mysql_real_escape_string($uname);
  $pword = mysql_real_escape_string($pword);
  $sql = "SELECT * FROM `mitglieder` WHERE `uname`='$uname' AND `pword`='$pword'";
  $result = mysql_query($sql);

  if (mysql_num_rows($result) == 1)
  {
     $row = mysql_fetch_assoc($result);
     return $row["ID"];
  }
  return -1;
}


Oder so ähnlich Wink

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group