Wahnsinn... PHP abfrage nach einen kennwort
MichaelS
- php
0 Carl0 fastix0 Lemmy Danger0 Tobias K.0 MichaelS0 Tobias K.0 Sven Rautenberg
0 Matze
Hallo...
Versuche gerade eine Kennwortabfrage auf einer Mysql-Datenbank zu realisieren... (...HTML Formular [Abfrage Benutzername und kennwort] dann soll über PHP in der datenbank nachgesehen werden, ob dieser Benutzer mit diesem kennwort vorhanden ist... wenn ja woll er weitergeleitet werden auf eine andere Seite...) leider bekomme ich nur Müll von PHP präsentiert...
Hat schonmal einer sowas in PHP geschrieben?
Wenn ja... kann mir einer dein Script zur Verfügung stellen... Habe schon drei Bücher gekauft, aber nirgens sind dafür Beispiele drinnen....
Danke...
Michael
Hi
schau dir mal das hier an:
<?
if (mysql_errno())
{
die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
}
if (!empty($name) && !empty($pass))
{
require("db_connect.php");
$query = "SELECT user, pw FROM users";
$result = mysql_query($query);
if (mysql_errno())
{
die("<br>" . mysql_errno(). ": ".mysql_error()."<br>");
}
while ($row = mysql_fetch_row($result))
{
if (mysql_errno())
{
die("<br>" . mysql_errno().": ".mysql_error()."<br>");
}
if ($name==$row[0] && $pass==$row[1])
{
setcookie("$username", "$passwort", time()+3600);
include("intern/go.php");
}
else
echo "<br>Falscher Loginname bzw. Passwort, bitte versuche dich erneut einzuloggen.";
}
}
else
echo "<br> Bitte fülle alle Felder aus.";
?>
funktionieren tuts, musst es nur soweit wie dus brauchst anpassen.
Gruss
Carl
Wenn ja... kann mir einer dein Script zur Verfügung stellen... Habe schon drei Bücher gekauft, aber nirgens sind dafür Beispiele drinnen....
Lieber Michael!
Wenn Du die drei Bücher nicht nur gekauft hast dann solltest wirklich überlegen, ob Du, wenn Du so etwas einfaches nicht hinbekommst zum Programmieren wirklich geeignet bist. Vielleicht kannst Du ja klasse Singen, Auto fahren, oder... oder. Es ist halt so. Ich kann nicht singen.
Ws Dein Programm leisten soll, dass weisst Du schon mal. Gut so. Bei Komplexen Themen nennt man das Pflichtenheft. Brauchst Du hier nicht.
Hast Du Dir schon mal so was wie einen Programmablaufplan gebaut?
Nein?
Ok, machen wir das mal mit den hier vorhanden Möglichkeiten:
[0]Input: username, passwort
[1] username<>"" ? Ja -> [2]; Nein -> [0]
[2] passwort<>"" ? Ja -> [3]; Nein -> [0]
[3] auswahl von passwort_db aus Datenbank für username_db=username
[4] passwort_db==passwort ? Ja -> [6]; Nein [5]
[5] Fehlermeldung, Weiterleitung
[6] Inhalte zeigen
So. Für diese einfachen Schritte findest Du sicher Beispiele in den Büchern, und kannst alles programmieren.
fastix
Ei guude wie?
Wenn ja... kann mir einer dein Script zur Verfügung stellen...
Aber, aber, sowas schreiben wir uns doch selbst... Folgende Überlegungen dazu:
Man gibt einen Namen und ein Passwort in ein Formular ein. Diese werden an ein PHP-Skript zum Auswerten gesendet. Dazu nehmen wir die POST-Methode. Wie werden die Eingaben beim Skript entgegengenommen? Richtig, als $_POST["name"] und $_POST["passwort"].
Die authorisierten Benutzer stehen in einer MySQL-Datenbank. Dabei steht der Benutzername im Klartext und das Passwort mittels md5() chiffriert in einer Tabelle. Wir rufen also diese Tabelle auf, lesen sie zeilenweise aus und überprüfen, ob der eingegebene Benutzername in dieser Tabelle vorkommt.
Tut er das, dann chiffrieren wir mittels md5() das eingegebene Passwort und vergleichen dieses mit dem in der Tabelle stehendem, das zu dem betreffenden Benutzernamen gehört. Stimmen diese überein, wird der Benutzer auf die entsprechende Seite umgeleitet und eine Session eröffnet (damit andere, nicht authorisierte Benutzer nicht durch blosse Kenntnis der entsprechenden URL in den geschützten Bereich gelangen). Andernfalls wird man zur Login-Seite umgeleitet.
Das ist's eigentlich schon. An Grundlagen benötigst Du nur das Wissen, wie man eine MySQL-Abfrage macht, wie man mit while-Schleifen und if-Abfragen umgeht und die Funktionen session_start() und md5(). Das müsstest Du schon hinkriegen, zur Not einfach mal posten, wo _genau_ es hakt - mit Fehlermeldung, Quelltext und allem drum und dran... Aber Du schaffst das - wir glauben fest an Dich ;-)
LG ausm Hesseland
Lemmy
Hallo Michael,
Versuche gerade eine Kennwortabfrage auf einer Mysql-Datenbank zu realisieren... (...HTML Formular [Abfrage Benutzername und kennwort] dann soll über PHP in der datenbank nachgesehen werden, ob dieser Benutzer mit diesem kennwort vorhanden ist... wenn ja woll er weitergeleitet werden auf eine andere Seite...)
das Formular wird du ja hinbekommen :-)
die Abfrage aus der Datenbank sieht etwas so aus:
SELECT user,passwort FROM tabellenname WHERE name = '$name' LIMIT 0, 1
(nicht vergessen, auf die Formularinhalte mit $_POST["..."] zuzugreifen)
dann überprüfst du mit
if ($_POST["eingegebenespasswort"] == $passwortausdb)
ob das Passwort stimmt (falls du das Passwort in der Datenbank verschlüsselt hast musst du das aus dem Formular vor dem überprüfen auch verschlüsseln)
wenn ja leitest du z.B. mit header("Location: seite.php") weiter
wenns noch Fragen gibt kannst du ja noch mal nachfragen :-)
leider bekomme ich nur Müll von PHP präsentiert...
inwiefern? wie sieht denn der Code bisher aus?
Hat schonmal einer sowas in PHP geschrieben?
ja.
Wenn ja... kann mir einer dein Script zur Verfügung stellen...
nene, fertige Scripte gibt es hier nicht :-)
Habe schon drei Bücher gekauft, aber nirgens sind dafür Beispiele drinnen....
nur interessenhalber: welche?
Grüße aus Nürnberg
Tobias
Hallo Tobias!
Habs noch nicht hinbekommen... leider... hier meine Antworten auf deine Fragen: ;-)
das Formular wird du ja hinbekommen :-)
ja... das sieht sogar klasse aus ;-))
die Abfrage aus der Datenbank sieht etwas so aus:
SELECT user,passwort FROM tabellenname WHERE name = '$name' LIMIT 0, 1 (nicht vergessen, auf die Formularinhalte mit $_POST["..."] zuzugreifen) dann überprüfst du mit
if ($_POST["eingegebenespasswort"] == $passwortausdb)ob das Passwort stimmt (falls du das Passwort in der Datenbank erschlüsselt hast musst du das aus dem Formular vor dem überprüfen auch verschlüsseln)
Passwort in in Formular u. in d. Datenbankmd5 verschlüsselt
Mein Code:
<?php
include("kontakt.inc");
$verbindung = mysql_connect($host, $user, $pwd);
if(@mysql_connect($host, $user, $pwd))
{
echo "<hr>Es wird eine Verbindung zu unserem Datenbankserver hergestellt... \n";
echo "<hr> Bitte haben Sie einen augenblick geduld...<hr\n";
if(@mysql_select_db($dbname))
{
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER");
if($erg)
{
echo "<hr>Ausgabe der Datensätze....<hr>\n";
while($row = mysql_fetch_row($erg))
if ($benutzername==$row[0] && $kw==$row[1])
{
echo "verwaltung.htm\n";
}
else
echo "Benutzername und Kennwort ist falsch!\n";
}
else
echo "<hr>Es konnten keine Datensätze gefunden werden... FEHLER!<hr>\n";
}
else
echo "<hr>Keine Verbindung zu Datenbankserver... FEHLER!<hr>\n";
mysql_close();
}
else
echo "<hr>Verbindungsaufbau fehlgeschlagen... FEHLER!<hr>\n";
?>
nur interessenhalber: welche?
MYSQL und PHP für dummies
Ich denke... ich mach keine besonderen Eindruck mit diesem Code oder?
Gruß Michael
Hallo Michael,
include("kontakt.inc");
was steht hier drin? (irgendwas relevantes?)
$verbindung = mysql_connect($host, $user, $pwd);
ob host, user und pwd stimmen, musst natürlich du wissen :-)
if(@mysql_connect($host, $user, $pwd))
warum machst du hier nochmal eine Verbindung auf?
{
echo "<hr>Es wird eine Verbindung zu unserem Datenbankserver hergestellt... \n";
echo "<hr> Bitte haben Sie einen augenblick geduld...<hr\n";
das ist blödsinnig, wenn die Seite beim User ankommt, ist die Verbindung schon längst hergestellt (bzw. schon wieder getrennt) außerdem fehlt beim eine <hr> die schließende Klammer :-)
if(@mysql_select_db($dbname))
warum unterdrückst du immer die Fehler?
{
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER");
hier solltest du noch sowas wie WHERE benutzername = $name einfügen, damit du nur den Datensatz erhälst den du brauchst
echo "<hr>Ausgabe der Datensätze....<hr>\n";
warum Ausgabe? ich dachte du willst überprüfen ob das Passwort stimmt.
if ($benutzername==$row[0] && $kw==$row[1])
verschlüsseln des Passworts nicht vergessen, also: md5($kw)==$row[1] (ich gehe mal davon aus, dass $kw das Passwort enthält)
echo "verwaltung.htm\n";
mhh... das verstehe ich jetzt aber nicht warum gibst du "verwaltung.htm" aus?
echo "Benutzername und Kennwort ist falsch!\n";
es kann auch nur eins von beiden falsch sein (also nicht 'und' sondern 'und/oder'
echo "<hr>Keine Verbindung zu Datenbankserver... FEHLER!<hr>\n";
mysql_close();
warum schließt du die Verbindung wenn garkeine zustandegekommen ist?
nur interessenhalber: welche?
MYSQL und PHP für dummies
:-) - ich habe PHP4 Grundlagen und Profiwissen (ist allerdings nicht ganz billig)
Ich denke... ich mach keine besonderen Eindruck mit diesem Code oder?
naja, interessanter wäre es, was passiert, wenn du den Code ausführst. Welche Fehlermeldung? Was spuckt er aus?
Grüße aus Nürnberg
Tobias
Hallo Tobias,
include("kontakt.inc");
was steht hier drin? (irgendwas relevantes?)
Da steht z.b. localhost, root kenntort und datenbankname drinnen, aber kein aufbauf der verbindung
if(@mysql_select_db($dbname))
warum unterdrückst du immer die Fehler?
Was meinst du damit ??
{
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER");
hier solltest du noch sowas wie WHERE benutzername = $name einfügen, damit du nur den Datensatz erhälst den du brauchst
wo muß ich das einfügen?
if ($benutzername==$row[0] && $kw==$row[1])
verschlüsseln des Passworts nicht vergessen, also: md5($kw)==$row[1] (ich gehe mal davon aus, dass $kw das Passwort enthält)
ok... habe ich gemacht...
echo "verwaltung.htm\n";
da sollte dann location "verwaltung.htm"; stehen :-) zu weiterleitung an eine neue Seite :-)
mysql_close();
warum schließt du die Verbindung wenn garkeine zustandegekommen ist?
Muß mann die nicht wieder schließen? hhmmm...
Nochmal mein neuer Code:
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
{
if(@mysql_select_db($dbname))
{
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER");
if($erg)
{
while($row = mysql_fetch_row($erg))
if ($benutzername==$row[0] && md5($kw)==$row[1])
{
echo "Location verwaltung.php";
}
else
echo "Benutzername und Kennwort ist falsch!\n";
}
else
echo "<hr>Es konnten keine Datensätze gefunden werden... FEHLER!<hr>\n";
}
else
echo "<hr>Keine Verbindung zu Datenbankserver... FEHLER!<hr>\n";
mysql_close();
}
else
echo "<hr>Verbindungsaufbau fehlgeschlagen... FEHLER!<hr>\n";
Michael
moin
if(@mysql_select_db($dbname))
warum unterdrückst du immer die Fehler?
Was meinst du damit ??
das @ vor der anweisung weist php an, einen eventuell entstehenden fehler bei der ausführung nicht anzuzeigen
{
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER");
hier solltest du noch sowas wie WHERE benutzername = $name einfügen, damit du nur den Datensatz erhälst den du brauchst
wo muß ich das einfügen?
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER WHERE benutzername = '$name'");
if ($benutzername==$row[0] && $kw==$row[1])
verschlüsseln des Passworts nicht vergessen, also: md5($kw)==$row[1] (ich gehe mal davon aus, dass $kw das Passwort enthält)
ok... habe ich gemacht...echo "verwaltung.htm\n";
da sollte dann location "verwaltung.htm"; stehen :-) zu weiterleitung an eine neue Seite :-)
also location.href=§verwaltung.htm"; ?
javascript tags nich vergessen ;) (<script language=javascript></script>)
mysql_close();
warum schließt du die Verbindung wenn garkeine zustandegekommen ist?
Muß mann die nicht wieder schließen? hhmmm...
is schon besser, nur steht die anweisung im else block, d.h. dass diese schließung angewiesen wird, wenn nix geöffnet wird
gruß
Ei guude wie?
also location.href=§verwaltung.htm"; ?
javascript tags nich vergessen ;) (<script language=javascript></script>)
Also:
1. Macht man sowas nicht mit JS, denn was passiert, wenn man's nicht aktiviert hat? Besser wäre header("location: http://www.deineDomain.de/verwaltung.htm");
2. Sollte man nicht mehr language="javascript", sondern type="text/javascript" verwenden...
LG ausm Hesseland
Lemmy
Ei guude wie?
was?
also location.href=§verwaltung.htm"; ?
javascript tags nich vergessen ;) (<script language=javascript></script>)
Also:
- Macht man sowas nicht mit JS, denn was passiert, wenn man's nicht aktiviert hat? Besser wäre header("location: http://www.deineDomain.de/verwaltung.htm");
tja, denn is halt scheiße ......
wobei ich die leute immernoch nich verstehe, die js deaktivieren
aber daraus soll jetz keine diskussion werden, hatte ich schon oft genug ;)
- Sollte man nicht mehr language="javascript", sondern type="text/javascript" verwenden...
warum das denn?
gruß
Hallo Ihr Nachtuser...
Also... habe mal versucht alle Ratschläge zu übersetzen... Bin halt doch Anfänger...
neuer Code:
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg = @mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '{$_POST['kw']}'");
if($erg)
print "Location: http://www.jupu.dyndns.org/php/index.htm";
else
echo "falsches kw\n";
}
mysql_close()
?>
So... nun habe ich das Problem... das egal was ich in meinem Formular eingebe immer das dann im Bowser angzeigt bekomme:
Location: http://www.jupu.dyndns.org/php/index.htm !!! KOMISCH!!!
Egal ob das passwort richtig ist oder falsch... immer das gleiche...
WAs soll ich tuuuuuuuuun ???
Hilfe... knalle gleich durch !!!
Michael
Danke für eure Unterstützung :-))
Ei guude wie?
print "Location: http://www.jupu.dyndns.org/php/index.htm";
So... nun habe ich das Problem... das egal was ich in meinem Formular eingebe immer das dann im Bowser angzeigt bekomme:
Location: http://www.jupu.dyndns.org/php/index.htm !!! KOMISCH!!!
Ja, irgendwie seltsam.... "print" heisst doch zu deutsch "drucken", und PHP "druckt" Dir nun "Location: ...." auf den Bildschirm, genau wie Du befohlen. Also: Die Funktion heisst
header("Location: http://www.jupu.dyndns.org/php/index.htm");
auch nachzuschlagen unter http://www.php.net/manual/de/. Nix print, nix echo oder sonstwie - einfach nur header("...");
LG ausm Hesseland
Lemmy
Hallo Ihr Nachtuser...
Also... habe mal versucht alle Ratschläge zu übersetzen... Bin halt doch Anfänger...
neuer Code:
<?phpinclude("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg = @mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '{$_POST['kw']}'");
if($erg)
dieses if fragt nur ab ob §erg true ist, d.h. in diesem falle, ob die operation erfolgreich war, nicht aber, ob nun benutzername und kennwort übereinstimmen
d.h. entweder du überprüfst, wieviel datensätze du zurückgeliefert bekommen hast oder du machst folgendes:
$erg = @mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}'");
$erg=mysql_fetch_array($erg,MYSQL_ASSOC);
if($erg['kw']==md5($_POST['kw']))
ich sehe gerade da oben stehen geschweifte klammern, steht in der db etwa "{benutzername}" ??
print "Location: http://www.jupu.dyndns.org/php/index.htm";
so, und das heißt, dass nun das als text hingeschrieben wird
entweder du nimmt include("http://www.jupu.dyndns.org/php/index.htm");
oder require("http://www.jupu.dyndns.org/php/index.htm");
oder echo "<script language=javascript> location.href="http://www.jupu.dyndns.org/php/index.htm"; </script>";
oder die variante mit dem header, aber davon habe ich keine ahnung ;)
else
echo "falsches kw\n";
}
mysql_close()
?>
Danke für eure Unterstützung :-))
naja, man versuchts ;)
gruß
Nu sieht es so aus:
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg=@mysql_query("SELECT benutzername, kwd FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kwd'])."'");
$erg1=mysql_fetch_array($erg,MYSQL_ASSOC);
if($erg1['kw']==md5($_POST['kwd']))
header("Location: http://www.jupu.dyndns.org/index.htm");
else
echo "falsches kw\n";
}
mysql_close()
?>
UND ERHALTE FOLGENDE FEHLERMELDUNG:
Warning: Supplied argument is not a valid MySQL result resource in e:\jupu.dyndns.org\_php\kennung.php on line 9
falsches kw
was ist nun wieder falsch ???
Hinweis... habe imFormular das kennwort so :
<input type="password" name="kwd" size="20"
in MySQL habe ist das Feld für "kwd (Kennword) auch als password deklariert!
Was ist nun noch falsch ?
Wann darf mann aufgeben ?? ;-)
Micahel
$erg=@mysql_query("SELECT benutzername, kwd FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kwd'])."'");
heißt denn in der db das feld "kwd"??
ansonsten müsste es ja select benutzername, kw ... heißen
das würde erklären, warum $erg kein gültiges ergebnis ist
Wann darf mann aufgeben ?? ;-)
Micahel
aufgeben?
wenn der zeitraum abgelaufen ist, in dem dir das ganze was nützt ;)
gruß
aufgeben?
wenn der zeitraum abgelaufen ist, in dem dir das ganze was nützt ;)
... Das ist ja das schlimme... ich brauche diese Abfrage dringend...!
NEUER CODE FUNKTIONIERT WUNDERBAR... ABER DAS MIT LOCATION GEHT NOCH NICHT:
NEUER CODE:
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg=@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kw'])."'");
$erg=mysql_fetch_array($erg,MYSQL_ASSOC);
if($erg['kw']==md5($_POST['kw']))
HEADER("Location: http://jupu.dyndns.org/index.htm");
else
echo "falsches kw\n";
}
mysql_close()
?>
Möchte noch sagen... ielen vielen dank !!!
Michael
HATTE FEHLER IN DEM CODE, aber
Nu sieht es so aus:
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg=@mysql_query("SELECT benutzername, kwd FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kw'])."'");
$erg1=mysql_fetch_array($erg,MYSQL_ASSOC);
if($erg1['kw']==md5($_POST['kw']))
header("Location: http://www.jupu.dyndns.org/index.htm");
else
echo "falsches kw\n";
}
mysql_close()
?>
SO NUN IST ES ABER SO... EGAL WAS ICH FÜR EIN KENNWORT EINGEBE,... ES HEISST IMMER FALSCHES KENNWORT !!!!
WAAAARRRUUUMMM ? ;-))
Was ist nun noch falsch ?
Wann darf mann aufgeben ?? ;-)
Micahel
$erg=@mysql_query("SELECT benutzername, kwd FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kw'])."'");
ich denk in deinem form heißt das ding "kwd" und nich "kw" --> $_POST['kw']
und das kwd bei select hatte ich ja schon geschrieben, weiß ja nich, ob du das tebellenfeld in der db auch geändert hat
gruß
ich denk in deinem form heißt das ding "kwd" und nich "kw" --> $_POST['kw']
ja das war ein kleiner fehler... entschuldigung... habe es geändert und jetzt klappt es soweit... nur der aufruf von einer neuen seite geht nocht nicht ...
FEHLERMELDUNG:
Warning: Cannot add header information - headers already sent by (output started at e:\jupu.dyndns.org\_php\kennung.php:2) in e:\jupu.dyndns.org\_php\kennung.php on line 11
CODE:
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg=@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kw'])."'");
$erg=mysql_fetch_array($erg,MYSQL_ASSOC);
if($erg['kw']==md5($_POST['kw']))
HEADER("Location: http://jupu.dyndns.org/index.htm");
else
echo "falsches kw\n";
}
mysql_close()
?>
DER CODE KLAPPT SOWEIT... KENNWORT WIRD RICHTIG AUSGELESEN... ABER DIE WEITERLEITUNG AUF EINE ANDERE SEITE NOCH NICHT !!!
DER CODE KLAPPT SOWEIT... KENNWORT WIRD RICHTIG AUSGELESEN... ABER DIE WEITERLEITUNG AUF EINE ANDERE SEITE NOCH NICHT !!!
tjaaaa
soweit so gut
aber wie gesagt, von dem headerdingsbums hab ich keine ahnung ;)
wünsche dir viel glück noch, auf dass dir das noch jemand beantworten kann
ich werd mich ausm staub machen, hab mein problem schon selbst gelöst, auch wenn ich mir nich im klaren bin wo mein fehler lag ;)
wünsche noch eine gute nacht
grüße
Möchte mich bei Dir auch bedanken !!!
Gruß Michael
Möchte mich bei Dir auch bedanken !!!
Gruß Michael
bitte bitte, keine ursache
wenn ich kann helf ich gerne, ich bin ja auch nich der superscripter ;)
schönen abend noch und viel erfolg
bin auch grad bei was zu schreiben, n komplettes verwaltungsprog auf html-js-php-mysql basis, sprich kundenDB, ArtikelDB, Terminkalender, DokumenteDB ...... blabla
mein kopf raucht, und ich steh oft auch vor probs, weiß wie das is wenn man ma nich weiterkommt ;)
bis denn dann
Hallo Michael,
FEHLERMELDUNG:
Warning: Cannot add header information - headers already sent by (output started at e:\jupu.dyndns.org\_php\kennung.php:2) in e:\jupu.dyndns.org\_php\kennung.php on line 11
du darfst vor dem header(...) _nichts_ ausgeben (nicht mit echo/print und auch nicht als "nicht php bereich")
HEADER("Location: http://jupu.dyndns.org/index.htm");
header schreibt man soweit ich weiß klein
DER CODE KLAPPT SOWEIT... KENNWORT WIRD RICHTIG AUSGELESEN... ABER DIE WEITERLEITUNG AUF EINE ANDERE SEITE NOCH NICHT !!!
schrei hier bitte nicht rum.
Grüße aus Nürnberg
Tobias
HEADER("Location: http://jupu.dyndns.org/index.htm");
header schreibt man soweit ich weiß klein
habe auch klein geschrieben... mag er einfach nicht!
schrei hier bitte nicht rum.
Was meinst du mit schreien?? Kannst mich da mal aufklären?
wie schreibst du den eine locationanweisung?
iche habe nun so geschrieben:
...
if($erg['kw']==md5($_POST['kw']))
header("location: http://jupu.dyndns.org/index.htm"); <<-richtig?
else
echo "falsches kw\n";
}
mysql_close()
?>
Danke für deine Hilfe... vielen dank...
Michael
Hallo Michael,
schrei hier bitte nicht rum.
Was meinst du mit schreien?? Kannst mich da mal aufklären?
Wenn man in Großbuchstaben schreibt, wird das als Schreien empfunden
header("location: http://jupu.dyndns.org/index.htm"); <<-richtig?
ich schreibe "location" mit großem L, weiß aber nicht, ob das zwingend ist.
Grüße aus Nürnberg
Tobias
Ei guude wie?
Hast Du vor der Zeile mit header() irgendeinen Output, ein echo, ein print oder gar HTML? Dann stelle Deine Abfrage an den Anfang der Seite, denn header() fügt dem Header bei Seitenaufruf eine Information bei (wer hätte das gedacht?), d.h. sobald das erste Zeichen oder HTML-Tag ausgegeben wird, ist der Zug schon abgefahren.
Kopier also einfach die Datenbank-Abfrage an den Anfang Deiner Datei - dann klappt's schon.
LG ausm Hesseland
Lemmy
Hast Du vor der Zeile mit header() irgendeinen Output, ein echo, ein print oder gar HTML? Dann stelle Deine Abfrage an den Anfang der Seite, denn header() fügt dem Header bei Seitenaufruf eine Information bei (wer hätte das gedacht?), d.h. sobald das erste Zeichen oder HTML-Tag ausgegeben wird, ist der Zug schon abgefahren.
nein habe ich nicht... verstehe es einfach nicht...
hier der Code.. siehe selbst: Was könnte ich ändern?
<?php
include("kontakt.inc");
if(@mysql_connect($host, $user, $pwd))
if(@mysql_select_db($dbname))
{
$erg=@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kw'])."'");
$erg=mysql_fetch_array($erg,MYSQL_ASSOC);
if($erg['kw']==md5($_POST['kw']))
header("location: http://jupu.dyndns.org/index.htm");
else
echo "falsches kw\n";
}
mysql_close()
?>
Möchte mich auch bei Dir für deine Hilfe bedanken... vielen dank !
Michael
Hallo MichaelS,
<?php
steht das wirklich _ganz_ am Anfang der Datei? Es darf keine Leerzeile davor sein...
include("kontakt.inc");
wie sieht denn dies Datei _genau_ aus? Vielleicht ist hier was drin, was ausgegeben wird.
Grüße aus Nürnberg
Tobias
ALLES OK !!!!
Ich habe gefunden... am Anfang war noch eine leerzeile....
Hab die weggemacht... und schon haut alles hinne...
Wie kann ich mich bedanken.....
Vielen vielen dank !!!!
Sag einfach nur noch DANKE !!
Michael
...es ist vollbrach!
Gute Nacht zusammen und LG ausm Hesseland
Lemmy
Hallo Lemmy,
...es ist vollbrach!
da musst ich dir zustimmen - wir haben ja auch einen ordentlichen Thread produziert :-)
Grüße aus Nürnberg
Tobias
Ei guude wie?
$erg=mysql_fetch_array($erg,MYSQL_ASSOC);
Was ist MYSQL_ASSOC? Danke daran: PHP ist case-sensitive (Gross-/Kleinschreibung) und Variablen werde mit $ gekennzeichnet...
header("location: http://jupu.dyndns.org/index.htm");
Schreibe Location mit großem "L", sonst stimmt's (nachzulesen unter http://www.php.net/manual/de/function.header.php).
LG ausm Hesseland
Lemmy
Hallo Lemmy,
$erg=mysql_fetch_array($erg,MYSQL_ASSOC);
Was ist MYSQL_ASSOC?
damit gibt man die art wie der Array aussieht an -> http://www.php.net/manual/de/function.mysql-fetch-array.php#AEN54108
Danke daran: PHP ist case-sensitive (Gross-/Kleinschreibung) und Variablen werde mit $ gekennzeichnet...
ja, aber in dem Fall gehört das so :-)
Grüße aus Nürnberg
Tobias
Hallo MichaelS HILFE !!!!, <- Das kommt dabei raus, wenn sowas als Name drinsteht :-)
if(@mysql_connect($host, $user, $pwd))
jetzt lass doch mal die '@' weg, dann siehst du vielleicht eine Fehlermeldung
if(@mysql_select_db($dbname))
{
$erg = @mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '{$_POST['kw']}'");
if($erg)
du musst (glaub ich zumindest) schon vorher das mit dem
while ($row = mysql_fetch_array($inhaltabfr, MYSQL_NUM)) o.ä.
machen, sonst weiß php ja nicht ob was gefunden wurde (mysql_query gibt auch TRUE zurück wenn nichts gefunden wurde)
print "Location: http://www.jupu.dyndns.org/php/index.htm";
falls du weiterleiten willst heißt das header("Location....index.htm"); (wobei es die Adresse nicht gibt :-))
echo "falsches kw\n";
was heißt jetzt eigentlich 'kw'? knauderwelsch wird es ja wohl nicht heißen :-)
außerdem solltest du mal etwas konsequenter Klammern setzten, vielleicht kann es (z.T. zumindest) daran liegen.
WAs soll ich tuuuuuuuuun ???
wenn du überhaupt nicht mehr durchblicks: ins Bett gehen :-)
Hilfe... knalle gleich durch !!!
ganz ruhig :-)
Grüße aus Nürnberg
Tobias
Wünsche bislang einen angenehmen Abend gehabt zu haben!
Ei guude wie?
was?
hosche ma, bubb, isch wollt nur höre, wie's derr so geht... des is halt hessisch Gebabbel ;)
- Macht man sowas nicht mit JS, denn was passiert, wenn man's nicht aktiviert hat?
tja, denn is halt scheiße ......
Eben, und wo wir doch schon mal PHP-Unterstützung haben...
- Sollte man nicht mehr language="javascript", sondern type="text/javascript" verwenden...
warum das denn?
Die Erklärung findest Du hier: http://selfhtml.teamone.de/javascript/intro.htm#javascriptbereiche
LG ausm Hesseland
Lemmy
Wünsche bislang einen angenehmen Abend gehabt zu haben!
danke auch
Ei guude wie?
was?
hosche ma, bubb, isch wollt nur höre, wie's derr so geht... des is halt hessisch Gebabbel ;)
ahja ...... da bin ich nich wirklich firm ;)
- Macht man sowas nicht mit JS, denn was passiert, wenn man's nicht aktiviert hat?
tja, denn is halt scheiße ......
Eben, und wo wir doch schon mal PHP-Unterstützung haben...
- Sollte man nicht mehr language="javascript", sondern type="text/javascript" verwenden...
warum das denn?
Die Erklärung findest Du hier: http://selfhtml.teamone.de/javascript/intro.htm#javascriptbereiche
thx, ich schau mal nach
LG ausm Hesseland
Lemmy
gruß
Hallo Mech,
tja, denn is halt scheiße ......
Warum denn? Selbst wenn ich JS vorrausetzen _könnte_, würde ich den Location-Header nehmen. Warum? Weil der _viel_ schneller ist. Bei JS muss die Seite erst geladen werden, wo der Location-Header drin steht, diese muss erst geparsed werden und der JS-Code interpretiert. Die HTTP-Header werden immer geparsed. Im Idealfall sind auch noch Keep-Alive-Requests verfügbar, dann kann der Browser den nächsten Request ein paar Millisekunden nach der Antwort absetzen. Und wenn damit auch noch eine höhere Kompabilität als mit der JS-Lösung erreicht wird, sehe ich _gar keinen_, aber auch _gar keinen_ Grund, JS in diesem Fall zu verwenden.
Grüße,
Christian
Moin!
Mein Code:
...ist kritikwürdig, was ja auch nicht anders zu erwarten war.
<?php
include("kontakt.inc");
Du stellst hier eine Verbindung zur Datenbank her.
$verbindung = mysql_connect($host, $user, $pwd);
Und dann stellst du nochmal eine Verbindung zur Datenbank her, diesmal aber mit Unterdrückung der Fehlermeldung.
if(@mysql_connect($host, $user, $pwd))
Ist irgendwie doppelt gemoppelt, außerdem speicherst du beim zweiten Mal das Handle für den späteren Zugriff nicht.
{
echo "<hr>Es wird eine Verbindung zu unserem Datenbankserver hergestellt... \n";
echo "<hr> Bitte haben Sie einen augenblick geduld...<hr\n";
Der Browser wird diese Informationen ohnehin erst anzeigen, wenn PHP komplett fertig gelaufen ist. Sie sind für die Fehlersuche vielleicht interessant, für den Benutzer aber nicht - den interessiert absolut nicht, ob du eine Datenbank im Hintergrund laufen hast, oder was du sonst noch so treibst.
if(@mysql_select_db($dbname))
{
$erg = @mysql_query("SELECT benutzername, kw FROM BENUTZER");
Hier fragst du die Datenbank ab (bis hierher eigentlich alles in Ordnung bis auf die Kommentare).
Du fragst _alle_ Benutzernamen und Passworte ab. Warum _alle_? Dich interessiert doch nur der Benutzername, dessen Username im Formular übergeben wurde. Dessen Passwort ist interessant, nicht das aller anderen.
Du solltest also die SQL-Abfrage entsprechend ändern:
@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}'");
$_POST ermöglicht den in Zukunft nur noch funktionierenden Zugriff auf Formulardaten, die mit method="POST" gesendet wurden (für method="GET" und URL-Parameter nimmt man $_GET).
Dann kriegst du hoffentlich nur _einen_ Eintrag, nämlich den des passenden Benutzers. Wenn du _keinen_ Eintrag erhälst, oder wenn du _mehr_ als einen Eintrag erhälst, hast du ein Problem: Entweder den Benutzer gibts noch nicht (dann kannst du ihn abweisen - sag aber nicht, dass der Benutzername falsch ist - auf diese Weise kann man ausprobieren, welche Benutzernamen es gibt, und dann für einen existierenden Benutzernamen Passwörter ausprobieren - sag einfach nur, dass die Anmeldung fehlgeschlagen ist.), oder es gibt den Benutzer zweimal. Es darf aber keine _zwei_ (oder mehr) identische Benutzernamen geben, ansonsten kannst du die Benutzer nicht mehr eindeutig identifizieren. Und genau das willst du.
Fehlt noch die Prüfung des Passwortes. Diese kann man ebenfalls ganz prima in die SQL-Abfrage packen:
@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '{$_POST['kw']}'");
Dieser Ausdruck holt dir nur noch die Benutzereinträge, die in Benutzername und Passwort übereinstimmen.
Das praktische daran: Du mußt im Prinzip nur noch gucken, ob du genau einen Eintrag erhälst. Wenn du mehr oder weniger als einen Eintrag erhälst, ist irgendwas falsch gelaufen, und du kannst den Benutzer abweisen.
Wenn du das Kennwort md5-verschlüsselt in der Datenbank abspeicherst, dann könntest du mit
@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}' AND kw = '".md5($_POST['kw'])."'");
arbeiten. Die Funktion md5() verschlüsselt das Klartextpasswort. Benutze im Zweifel hier die identische Methode, die du auch zum Eintragen des Passwortes in die Datenbank benutzt.
if($erg)
{
echo "<hr>Ausgabe der Datensätze....<hr>\n";
while($row = mysql_fetch_row($erg))
Wenn du, wie oben geschildert, die Prüfung der Anmeldedaten von der Datenbank erledigen läßt, kannst du dir das Auslesen und Prüfen aller Usereinträge hier sparen. Wenn du einige Millionen User hast, wäre das nämlich ziemlich zeitaufwendig.
if ($benutzername==$row[0] && $kw==$row[1])
{
echo "verwaltung.htm\n";
Tja, das ist schön, gibt den Text "verwaltung.htm" im Browser aus. Sollte das was anderes machen?
}
else
echo "Benutzername und Kennwort ist falsch!\n";
"Benutzername oder Kennwort falsch" wäre technisch korrekt formuliert.
}
else
echo "<hr>Es konnten keine Datensätze gefunden werden... FEHLER!<hr>\n";
}
else
echo "<hr>Keine Verbindung zu Datenbankserver... FEHLER!<hr>\n";
mysql_close();
}
else
echo "<hr>Verbindungsaufbau fehlgeschlagen... FEHLER!<hr>\n";
?>
Ich denke... ich mach keine besonderen Eindruck mit diesem Code oder?
Nicht wirklich. Du bist in PHP eingestiegen (sieht auf dieser Seite schon ganz ok aus), aber es mangelt am Datenbankverständnis noch erheblich.
- Sven Rautenberg
Tag
hat dir schonmal jemand gesagt das du lehrer werden solltest ?
*scrn*
Analpha
Moin!
hat dir schonmal jemand gesagt das du lehrer werden solltest ?
*scrn*
Man hat schon gefordert, dass ich doch lieber Koch oder Konditor hätte werden sollen, und ja: Lehrer-Forderungen sind auch schon eingegangen. :) Aber nicht so viele.
- Sven Rautenberg
Hallo, Sven,
@mysql_query("SELECT benutzername, kw FROM benutzer WHERE benutzername = '{$_POST['benutzername']}'");
Abgesehen davon, dass der String womöglich am ökonomischten über 'SELECT benutzername, kw FROM benutzer WHERE benutzername = "'.$_POST['benutzername'].'"' notiert werden könnte ;-), habe ich eine Frage bezüglich der direkten Übernahme von externen Parametern.
Wie weit ist es, trotz der Klammerung mit Stringbegrenzern im Statement '...', möglich, dass der in das Statement eingefügte String einen Stringbegrenzer und danach MySQL-Befehle enthalten kann? Generell kann externen Parametern nur nach Prüfung getraut werden, daher mein deduktiver Schluss:
SELECT benutzername, kw FROM benutzer
WHERE benutzername='xyz' DROP benutzer
^^^^^^^^^^^^^^^^^^
$_REQUEST['whatever']
Mit den möglichen und zulässigen MySQL-Queries bin ich wenig vertraut, aber seitdem ich hier einige Threads über exakt dieses Problem gelesen habe, bin ich bei meinen Projekten komplett auf mysql_escape_string() http://www.php.net/manual/de/function.mysql-escape-string.php umgestiegen, da dort vorher jedwede Parameter direkt in den Query-String eingefügt wurden. Das hieß, dass man, soweit möglich, jede erdenklichen MySQL-Befehle »einschmuggeln« hätte können und damit im schlimmsten Falle die Datenbank hätte löschen können, sofern dessen Name bekannt ist, so mutmaße ich in meinem Unwissen - deshalb habe ich mir systematisch diese Paranoia angewöhnt.
Hältst du diese Methode für eine unnötige oder unzureichende Maßnahme oder hast du vergessen, darauf einzugehen...?
In </archiv/2002/12/32353/#m175267> empfiehlst du es selbst... Wahrscheinlich habe ich es auch von dir gelernt. ;) Folglich eher nur eine Unaufmerksamkeit deinerseits...?
... aber es mangelt am Datenbankverständnis noch erheblich.
Genau, das ist auch bei mir gewissermaßen der Fall, deshalb frage ich. :)
Grüße,
Mathias
Metakeywords: Sicherheit Datenbank Anfrage Überprüfung Validierung Benutzereingaben $_POST $_GET mysql_query
Moin!
Wie weit ist es, trotz der Klammerung mit Stringbegrenzern im Statement '...', möglich, dass der in das Statement eingefügte String einen Stringbegrenzer und danach MySQL-Befehle enthalten kann? Generell kann externen Parametern nur nach Prüfung getraut werden, daher mein deduktiver Schluss:
SELECT benutzername, kw FROM benutzer
WHERE benutzername='xyz' DROP benutzer
^^^^^^^^^^^^^^^^^^
$_REQUEST['whatever']
Ja, du hast natürlich Recht! Das Problem, dass möglicherweise böse Daten in den Query eingeschleppt werden, besteht. Das ist aber ein grundsätzliches Problem, keines, was nur bei der Authentifizierung auftritt.
Mit den möglichen und zulässigen MySQL-Queries bin ich wenig vertraut, aber seitdem ich hier einige Threads über exakt dieses Problem gelesen habe, bin ich bei meinen Projekten komplett auf mysql_escape_string() http://www.php.net/manual/de/function.mysql-escape-string.php umgestiegen, da dort vorher jedwede Parameter direkt in den Query-String eingefügt wurden. Das hieß, dass man, soweit möglich, jede erdenklichen MySQL-Befehle »einschmuggeln« hätte können und damit im schlimmsten Falle die Datenbank hätte löschen können, sofern dessen Name bekannt ist, so mutmaße ich in meinem Unwissen - deshalb habe ich mir systematisch diese Paranoia angewöhnt.
Nur weil man paranoid ist, bedeutet das noch lange nicht, dass sie einen nicht verfolgen.
Hältst du diese Methode für eine unnötige oder unzureichende Maßnahme oder hast du vergessen, darauf einzugehen...?
Ich habe diesen Aspekt fahrlässig vernachlässigt. Denn das Thema ist leider dann doch ziemlich komplex:
PHP arbeitet gewöhnlich mit magic_quotes_gpc = on, escaped also alle Anführungszeichen " und ' durch einen Backslash. Diesen Backslash muß man, bevor man mysql_escape_string() ansetzt, aber wieder loswerden - aber natürlich nur, wenn magic_quotes_gpc wirklich eingeschaltet ist.
Mit anderen Worten: Man hat höllisch viel zu tun, um einen String datenbankgerecht aufzubereitet. Sinnvollerweise erledigt man das natürlich in einer dafür vorgesehenen Funktion.
Ich habe diesen Aufwand aus der Betrachtung weggelassen, weil er mehr verwirrt als geholfen hätte. Außerdem kann man in PHP durch mysql_query() nur _einen_ MySQL-Query absenden. "SELECT irgendwas; DROP tabelle" kommt also nicht durch. Aber man könnte die Authentifizierung angreifen, indem man "OR 1=1" oder ähnlich geeignet passende Bedingungen zum WHERE hinzufügt, um eine erfolgreiche Authentifizierung vorzutäuschen.
- Sven Rautenberg
<?
if((!isset($f)or($f==0)){
?>
<form action="diese_datei.php">
<input type="text" name="Ben">
<input type="password" name="Pas">
<input type="hidden" name="f" value="1">
</form>
<?
}elseif((isset($f))and($f=="1")){
$db=mysql_connection("localhost","benutzer","passwort");
$Daten=mysql_db_query("Datenbankname","select * from Tabellenname where Benutzer='$Ben' and Passwort='$Pas'",$db);
$menge=mysql_num_rows($Daten);
if($menge==1){
?>
<script language="javascript">
window.location.href="Zeildateiname";
</script>
<?
}}
?>
Hoffe ich konnte weiterhelfen