Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Verändert ein SQL Befehl einen MD5 Wert bzw. kuriosum im MD5 Vergleich!

Mitglied: FunkerVogt

FunkerVogt (Level 1) - Jetzt verbinden

21.10.2011, aktualisiert 22.10.2011, 4074 Aufrufe, 3 Kommentare

Hallo Ihr PHP-Gurus!

Seit 3 Tagen sitz ich jetzt an einem, ich denke mal später
dann sehr trivialen, Problem.

Situation:

Ich hab eine HTML mit Login Nutzer und Passwort, deren Inhalte ich per Post an eine
.php übergebe.

HTML:
01.
<div style="position:absolute; bottom:5px; left:90px; font-size: 100%; color:#FFFFFF; font-family: AmericanText BT, Comic, cursive, Arial">
02.
 <form action="HSRV2.php" method="POST" >
03.
  <p>N i c k n a m e:<br /><input name="Name" type="text" size="30" maxlength="30" style="font-family: AmericanText BT" />
04.
  <p>P a s s w o r t:<br /><input name="Pass" type="Password" size="30" maxlength="30" style="font-family: AmericanText BT" />
05.
  <p><input type="submit" value="L o g  I n" style="font-family: AmericanText BT, Comic, cursive, Arial"/></p>
06.
</div>
Im php Script, wird das Passwort in einen MD5 Wert verändert.
Dann sollte dieser MD5-Wert mit einem vorhandenen MD5-Wert aus der
MySQL DB verglichen werden! Macht er auch

aber:

Der Vergleich sagt immer: <> (ungleich) Bis auf in einem
Fall! Wenn ich ein bestimmtes Kennwort in alle User in der DB eintrage,
dann geht es kurioser Weise! Ich bin irgendwie ratlos!

Das .php Script:
01.
<?php
02.
// Kontakt Datenbank
03.
$DBverb = mysql_connect("127.0.0.1","Hilfe","MD5MD5MD5") or die ("Log In momentan nicht m&ouml;glich, wir arbeiten daran!");
04.
mysql_select_db("hsrv", $DBverb);
05.

06.
$password = $_POST['Pass'];
07.
$name = $_POST['Name'];
08.

09.
$ergebnis = mysql_query("SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'");
10.

11.
if ($ergebnis == md5($_POST['Pass']))
12.
{
13.
                echo '<script language ="JavaScript">
14.
                <!--
15.
                document.location.href="HSRV2.html";
16.
                // -->
17.
                </script>';
18.
}
19.
else {
20.
        echo '<script language ="JavaScript">
21.
        <!--
22.
        document.location.href="false.html";
23.
        // -->
24.
        </script>';
25.
}
26.
?>
Kann doch eigentlich nicht an der DB liegen, wenn es mit einem bestimmten Passwort geht! Oder?

[Edit Biber] Code formatiert. [/Edit]
Mitglied: Arano
21.10.2011 um 15:49 Uhr
Hallo FunkerVogt,

Bitte verwende doch die <code>-Tags aus der Formatierungshilfe (roter Link über dem Eingabefeld)

$ergebnis = mysql_query("SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'");

if ($ergebnis == md5($_POST['Pass']))
Hier liegt dein Hund begraben, mysql_query() liefert etwas anders zurück als du erwartest !
Schau doch noch einmal im PHP-Manual - mysql_query() nach.

Tipp:
Ruhig während des Programmierens mal ein paar Variablen per echo ausgeben lassen und deren Inhalt kontrollieren.
siehe dazu im Manual auch nach den beiden Funktionen print_r() und var_dump()

Und weil du gerade im Manual unterwegs bist, schau auch gleich noch einmal nach header(), das funktioniert auch wen der Besucher Javascript deaktiviert hat ;)


~Arano

Edit:
Da sehe ich gerade noch ein kleinen Tipp.
Dein Query solltest du noch um einem LIMIT 1 ergänzen, dann braucht die Datenbank nicht noch alle Einträge __nach dem Treffer__ kontrollieren die weiss ja nicht, das es nur einen Benutzer mit dem Namen geben kann.

weiter Edit...
Du kannst auch der Datenbank den Passwort-/MD5-Vergleich überlassen, dann brauchst du in PHP nur noch auswerten ob es einen Treffer gab oder nicht.
Bitte warten ..
Mitglied: FunkerVogt
21.10.2011 um 17:33 Uhr
Danke für die Tips, nehm ich mir zu Herzen!

Die Lösung:


$ergebnis = mysql_query("SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'");
$row = mysql_fetch_row($ergebnis);
$ergebnisRes = ($row[0]);

if ($ergebnisRes == md5($password))


Formatierung hier im Forum auch gleich gelernt!

Vielen Dank!
Bitte warten ..
Mitglied: Arano
22.10.2011 um 12:13 Uhr
Moin moin,

hat ja super geklappt !

if ($ergebnisRes == md5($password))
Wie du das jetzt vielleicht selber siehst, ist dieser Bedingung nicht gleich anzusehen was sie überhaupt vergleicht. Jetzt weisst du das noch, aber später kann es ganz schön schwer sein, den eigentlichen Sinn dahinter wieder zu erkennen. (oder dritte Personen z.B. in Foren)
Für Variablen sollten Namen gewählt werden, von denen man auf den Inhalt schließen kann.
01.
<?php
02.
$strQuerySelectUser = "SELECT `Passwort` FROM `user` WHERE `Nickname` = '$name'";
03.
$resSelectUser = mysql_query($strQuerySelectUser);
04.

05.
// und dann
06.

07.
$arrUser = mysql_fetch_row($resSelectUser);
08.
$strMD5Pass = $arrUser[0];
09.
if ($strMD5Pass == md5($password))
10.

11.
// oder
12.

13.
$arrUser = mysql_fetch_assoc($resSelectUser);
14.
if ($arrUser['Passwort'] == md5($password))
15.
?>
Und als weitere Tipps:
  • Was wenn die Anfrage doch nicht an den Server gesendet werden kann mysql_query() (z.B. Weil der Server nicht mehr erreichbar ist, oder die Tabelle Fehler aufweist, ...) PHP-Manual - is_ressource()
  • Was wenn es den User __nicht gibt__ und so nur eine leere Ergebnistabelle als Ressourcenkennung zurückgegeben wird ? (z.B. Ein Tippfehler beim Benutzernamen) PHP-Manual - mysql_num_rows()


Schönes Wochenende
~Arano
Bitte warten ..
Ähnliche Inhalte
Datenbanken
SQL Vergleich zweier Spalten
gelöst Frage von machtin26Datenbanken2 Kommentare

Hallo zusammen, ich habe folgendes Problem: Select Abfrage mit folgenden Spalten CardName, FirstName, LastName Die beiden Spalten FirstName und ...

Suse

Unmask-Befehl zeigt Wert 0022 - Berechtigung ändern

Frage von 133808Suse3 Kommentare

Hallo zusammen, ich will die Berechtigungen von der Datei Test umändern. Welchen Befehl muss ich verwenden, wenn der Besitzer ...

Datenbanken

SQL Update-Befehl mit Zeichenketten

gelöst Frage von TlBERlUSDatenbanken6 Kommentare

Hi, mein SQL ist etwas eingerostet und finde dazu nichts hilfreiches im Web. SQL-Server 2008 R2; Ist-Zustand: Datenbank-Spalte mit ...

Datenbanken

SQL max wert in WHERE Bedingung

gelöst Frage von StarMannDatenbanken7 Kommentare

Hi, ich möchte alle Daten Sätze aus dem größten Jahr, Wie bekomme ich den wert in die WHERE Bedingung? ...

Neue Wissensbeiträge
Internet

CDU Propaganda: Urheberschutz im Internet - Ende des digitalen Wild-West

Information von Frank vor 19 StundenInternet3 Kommentare

Hallo Administratoren, aus einem Kommentar heraus habe ich folgenden Beiträge von Herr Sven Schulze und Axel Voss (beide CDU ...

Router & Routing

Zyxel VMG 1312 B30A - Firmwareupdate nur im "privaten" Firefox Modus möglich

Tipp von the-buccaneer vor 1 TagRouter & Routing2 Kommentare

Hatte hier ein Zyxel 1312 das ums verrecken kein Firmwareupdate durchführen wollte. Datei ist auswählbar, dann kommt der Fortschrittskreisel ...

Windows 7

Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019

Information von kgborn vor 2 TagenWindows 75 Kommentare

Kleine Info für die Admins der oben genannten Maschinen. Ab Juli 2019 werden Updates von Microsoft nur noch mit ...

Firewall
PfSense 2.5.0 benötigt doch kein AES-NI
Information von ChriBo vor 4 TagenFirewall2 Kommentare

Hallo, Wie sich einige hier erinnern werden hat Jim Thompson in diesem Aritkel beschrieben, daß ab Version 2.5.0 ein ...

Heiß diskutierte Inhalte
Hardware
PC im Selbstbau, Workstation, mittelklasse Gaming
gelöst Frage von MrRobot1997Hardware21 Kommentare

Hallöchen Leute, ich bin seit einigen Jahren leider nicht mehr wirklich im Bild, wenn es um die Hardware und ...

Datenbanken
PHP Fatal error: Uncaught Error: Call to undefined function oci connect
Frage von PlanitecXDatenbanken20 Kommentare

Hallo Zusammen, ich sitze seit Tagen am Problem das ich keine PHP Anwendung mit Anbindung zu Oracle zum laufen ...

Hardware
Welchen Shop Großhandel für EDV?
Frage von opc123Hardware17 Kommentare

Hallo, ich finde kein passendes Thema. Ich suche einen Großhändler für alltägliche EDV Ausstattung: Ethernet Kabel, Switche, Stromverteiler, Handy´s, ...

Windows Server
User auf Server Install-Rechte geben
gelöst Frage von killtecWindows Server17 Kommentare

Hi, ich möchte auf mehreren W2016 Servern einem bestimmten User das Recht zum Installieren von Programmen geben. Er soll ...