Problem beim Datenbankconnect
Dennis Knabe
- datenbank
- html
- php
Problem beim Datenbankconnect
<html>
<head>
<title>Briefmarkensammlungen</title>
</head>
<body>
<form method="post" action="">
<table border = 3>
<tr><td colspan = 2 align = center>Anmeldung</td></tr>
<tr><td>Nachname</td><td><input type="text" name="nachname"></td></tr>
<tr><td>Vorname</td><td><input type="text" name="vorname"></td></tr>
<tr><td>Passwort</td><td><input type="passwort" name="passwort"></td></tr>
<tr><td><input type="submit" name="submit" value="login"></td></tr>
</table>
</form>
<?php
if(isset($_POST["submit"])){
$nachname=$_POST['nachname'];
$vorname=$_POST['vorname'];
$passwort=$_POST['passwort'];
$verbindung = mysqli_connect('localhost', 'root', '') or die("Serververbindung fehlgeschlagen");
$db = mysqli_select_db($verbindung,"php_sql");
if($db == TRUE) //Verbindung wird überprüft
{
if(!empty($nachname) && !empty($vorname))
{
$sql = "SELECT Vorname, Nachname, Passwort
FROM logindaten
WHERE Vorname = '$vorname'
AND Nachname = '$nachname'
AND Passwort = '$passwort';";
$abfrage = mysqli_query($verbindung, $sql);
$daten = mysqli_fetch_array($abfrage);
if($daten == NULL)
{
echo "falsche Daten";
}
else
{
echo "Weiter";
}}}}
?>
Hallo
Problem beim Datenbankconnect
An welcher Stelle scheitert die Verbindungsaufnahme? Erscheint die Fehlermeldung „Serververbindung fehlgeschlagen“ oder eine andere oder keine Meldung?
$verbindung = mysqli_connect('localhost', 'root', '') or die("Serververbindung fehlgeschlagen"); $db = mysqli_select_db($verbindung,"php_sql");
Diese beiden Schritte lassen sich in der Funktion mysqli_connect zusammenfassen (siehe prozuderales Beispiel).
if($db == TRUE) //Verbindung wird überprüft { if(!empty($nachname) && !empty($vorname)) { $sql = "SELECT Vorname, Nachname, Passwort FROM logindaten WHERE Vorname = '$vorname' AND Nachname = '$nachname' AND Passwort = '$passwort';"; $abfrage = mysqli_query($verbindung, $sql); $daten = mysqli_fetch_array($abfrage); if($daten == NULL) { echo "falsche Daten"; } else { echo "Weiter"; }}}} ?>
if($db == TRUE)
keinen else-Zweig mit einer passenden Meldung?$verbindung
zu $db
?mysqli_fetch_array
existiert nicht.Tschö, Auge
PS: Begrüßungen werden hier gern gesehen.
Hallo Dennis,
versuche doch dein Problem mithilfe von Sessions zu lösen!
Deklariere dazu zunächst im php Teil deines Scripts die Verwendung von Sessions durch eingabe von: sessions_start();
Nun solltest du mit $_SESSION['name'] = "wert"; eine Sessionvariable festlegen können (Auf welche dann später zugegriffen werden kann)
Moin,
versuche doch dein Problem mithilfe von Sessions zu lösen!
Deklariere dazu zunächst im php Teil deines Scripts die Verwendung von Sessions durch eingabe von: sessions_start();
Nun solltest du mit $_SESSION['name'] = "wert"; eine Sessionvariable festlegen können (Auf welche dann später zugegriffen werden kann)
So wie das aussieht wird das ein Login script, dass heißt wahrscheinlich will er dann, wenn Name und Password übereinstimmen die $_SESSION
Variable setzen.
Und die $_SESSION
hat ja nichts damit zutun ob eine Verbindung zur DB besteht.
Gruß Jo
Hallo Dennis Knabe,
Problem beim Datenbankconnect
Gibts auch ne Frage dazu?
Hier ein paar Hinweise, die nichts mit dem Connect zu tun haben:
<html>
Möglicherweise fehlt der Doctype sowie einige weitere Angaben, siehe HTML-Grundgerüst.
<form method="post" action="">
Wenn du die Formulardaten an die Seite selbst schicken möchtest, kann das action-Attribut entfallen.
<table border = 3> <tr><td colspan = 2 align = center>Anmeldung</td></tr>
Tabellenlayout? Ernsthaft? Für die Daten selbst könnte ich mit der Semantik als Tabelle durchaus noch mitgehen, aber die Überschrift und der Absendebutton gehört definitiv nicht in eine Tabelle.
Es gehört zum guten Stil, Attributwerte in Anführungszeichen zu setzen, auch wenn das nicht notwendig ist. Wenn du dir angewöhnst, immer Anführungszeichen zu verwenden, stolperst du nicht an Stellen, wo sie notwendig werden.
align
ist ein missbilligtes Attribut. Verwende die CSS-Eigenschaft textalign
.
<tr><td>Nachname</td><td><input type="text" name="nachname"></td></tr> <tr><td>Vorname</td><td><input type="text" name="vorname"></td></tr> <tr><td>Passwort</td><td><input type="passwort" name="passwort"></td></tr>
Das Formular ist für Menschen, die auf assistive Technologien angewiesen sind, nicht benutzbar. Es fehlen label-Elemente.
type = text
ist der Defaultwert, kann also weg.
<tr><td><label for="nachname">Nachname</label></td><td><input id="nachname" name="nachname"></td></tr>
<tr><td><input type="submit" name="submit" value="login"></td></tr>
type = submit
ist der defaultwert, kann also weg.
Für konkretere Hilfe siehe das brandneue Tutorial Formulargestaltung in unserem Wiki.
$nachname=$_POST['nachname']; $vorname=$_POST['vorname']; $passwort=$_POST['passwort'];
Das Umkopieren ist nicht notwendig.
or die("Serververbindung fehlgeschlagen");
Wenn dieser Fehler auftritt, kann der Nutzer in aller Regel nichts dafür und auch nichts dagegen tun. Deshalb sollte man ihn mit dieser Information verschonen. Viel wichtiger ist, dass du eine Info bekommst.
$sql = "SELECT Vorname, Nachname, Passwort FROM logindaten WHERE Vorname = '$vorname' AND Nachname = '$nachname' AND Passwort = '$passwort';";
Hier werden Eingabedaten ungefiltert an die DB weiter gereicht. Was, wenn ein böswilliger Mensch als Passwort einen SQL-Befehl verwendet, der ihm uneingeschränkten Zugriff erlaubt? Beachte den Kontextwechsel.
PDO ist ggf. auch der Nutzung von mysqli_
vorzuziehen, aber dazu können andere mehr sagen.
Bis demnächst
Matthias
Guten Abend,
Problem beim Datenbankconnect
Gibts auch ne Frage dazu?
anscheinend nicht ...
<table border = 3> <tr><td colspan = 2 align = center>Anmeldung</td></tr>
Es gehört zum guten Stil, Attributwerte in Anführungszeichen zu setzen, auch wenn das nicht notwendig ist. Wenn du dir angewöhnst, immer Anführungszeichen zu verwenden, stolperst du nicht an Stellen, wo sie notwendig werden.
Außerdem ist es nicht üblich, Leerzeichen vor und hinter dem '=' zu setzen. Das reißt die Attribut-Wert-Pärchen optisch auseinander.
align
ist ein missbilligtes Attribut. Verwende die CSS-Eigenschafttextalign
.
Aber mit Bindestrich: text-align
<tr><td><input type="submit" name="submit" value="login"></td></tr>
type = submit
ist der defaultwert, kann also weg.
Nein, type="text" ist der Defaultwert, hast du ein paar Zeilen weiter oben selbst gesagt. Außer man tauscht das input-Element gegen ein button-Element aus.
$nachname=$_POST['nachname']; $vorname=$_POST['vorname']; $passwort=$_POST['passwort'];
Das Umkopieren ist nicht notwendig.
ACK. Aber sowas von.
So long,
Martin
Hallo Der Martin,
type = submit
ist der defaultwert, kann also weg.Nein, type="text" ist der Defaultwert, hast du ein paar Zeilen weiter oben selbst gesagt. Außer man tauscht das input-Element gegen ein button-Element aus.
Da hab ich doch glatt „button“ gelesen ;-)
Bis demnächst
Matthias
Lieber Matthias,
ergänzend zu Deinen richtigen Anmerkungen hier noch der Verweis auf das Formular-Tutorial im hiesigen Wiki.
Liebe Grüße,
Felix Riesterer.
Hallo Felix Riesterer,
ergänzend zu Deinen richtigen Anmerkungen hier noch der Verweis auf das Formular-Tutorial im hiesigen Wiki.
Es war etwas versteckt:
Für konkretere Hilfe siehe das brandneue Tutorial Formulargestaltungin unserem Wiki.
Bis demnächst
Matthias
Lieber Matthias,
Es war etwas versteckt:
my bad. sorry.
Liebe Grüße,
Felix Riesterer.
Moin, Zu dem HTML Teil sag ich mal nichts, da hast du von Matthias ja schon gute Tipps bzw Hinweise bekommen.
Side Info:
Hier sieht man dass die Funktion mysqli_connect()
gleich mit 4 Parameter umgehen kann. Nämlich den host hier localhost , den usernamen hier root , das passwort für die Datenbank hier keins und die Datenbank hier php_sql. Somit sparst du dir das mysqli_select_db()
, außer du möchtest später prüfen ob es die Datenbank gibt und falls nicht, sie neu anlegen willst, aber das wohl erst im späteren lern Verlauf.
$daten = mysqli_fetch_array($abfrage);
Wie Matthias schon gesagt hat gibt es diese Funktion in mysqli nicht, aber man kann es sich hier recht einfach machen, da du mit mysqli_connect()
ein Object erzeugst auf das du direkt zugreifen kannst. Und zwar mit:
$abfrage=$db->query("$sql");
$daten=$abfrage->fetch_assoc();
Gruß Jo
Lieber Dennis,
$nachname=$_POST['nachname']; $vorname=$_POST['vorname']; $passwort=$_POST['passwort']; [...] $sql = "SELECT Vorname, Nachname, Passwort FROM logindaten WHERE Vorname = '$vorname' AND Nachname = '$nachname' AND Passwort = '$passwort';";
Du machst hier sehr gefährliche Sachen! Das wurde hier an anderer Stelle bereits ausführlich besprochen: /self/2016/may/6/update-einer-chatfunktion/1666704#m1666704
Liebe Grüße,
Felix Riesterer.
Moin,
$nachname=$_POST['nachname']; $vorname=$_POST['vorname']; $passwort=$_POST['passwort']; [...] $sql = "SELECT Vorname, Nachname, Passwort FROM logindaten WHERE Vorname = '$vorname' AND Nachname = '$nachname' AND Passwort = '$passwort';";
Du machst hier sehr gefährliche Sachen! Das wurde hier an anderer Stelle bereits ausführlich besprochen: /self/2016/may/6/update-einer-chatfunktion/1666704#m1666704
Das hätte ich wahrscheinlich an späterer stelle auch noch angesprochen. Aber es scheint mir als ob er gerade noch am Anfang ist und ich wollte ihn nicht gleich auf Alles aufmerksam machen. Step-by-step würd ich hier vorschlagen.
Gruß
Jo