|
You last visited: Today at 22:51
Advertisement
Datensatz wird nicht vollständig überliefert
Discussion on Datensatz wird nicht vollständig überliefert within the Web Development forum part of the Coders Den category.
07/26/2015, 18:45
|
#1
|
elite*gold: 20
Join Date: Dec 2014
Posts: 169
Received Thanks: 59
|
Datensatz wird nicht vollständig überliefert
Wie er Titel besagt wird kein Datensatz eingefügt.
Ich habe 3 Datensätze einnmal die ID Primary + Auto increment. Die zweite ist der Username auch Primary + varchar(25) , passsword varchar(25) ,, id wird immer um 1 Hochgezählt genau wie ich es wollte aber wenn ich Username und Password eingebe sind die in der Datenbank leer.
PHP Code:
<?php if(isset($_POST["senden"])) { $mysqli = new mysqli("mysql.lima-city.de", "USER", "pw", "db"); if (mysqli_connect_errno()) { printf ("Verbindung fehlgeschlagen:%s \n", mysqli_connect_error()); exit(); } $username = mysqli_real_escape_string($_POST["username"]); $password = mysqli_real_escape_string($_POST["password"]); if ($mysqli->query("INSERT INTO account (user,pw) VALUES ('$username','$password')")) { printf ("%d 1 Zeile eingeüfgt ", $mysqli->affected_rows); } var_dump($_POST); } else { echo "Alle Felder ausfüllen"; } ?> <form action="<?php $_SERVER['SCRIPT_NAME'] ?>" method="post"> <p><input name="username" size="25" placeholder="Username"></p> <p><input type="passsword" name="password" size="25" placeholder="Passwort"></p> <p><input type="submit" value="Absenden" name="senden"></p>
|
|
|
07/26/2015, 19:03
|
#2
|
elite*gold: 74
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
|
Wie hast du denn die Primärschlüssel gesetzt?
Der Name sagt eigentlich schon, dass es davon nur einen geben kann, du kannst allerdings einen aus mehreren Spalten zusammensetzen, das macht nur in deinem Kontext absolut keinen Sinn. Belass es bei der ID als Primärschlüssel und mach den Nutzernamen unique. Mir ist allerdings ein bisschen schleierhaft, wie du das überhaupt so erzeugen konntest, das müsste jedes halbwegs intelligente Programm verbieten.
Wenn du in einem String eine Variable einfügen willst, musst du zwischen vorläufigem String-Ende und der Variable einen Punkt setzen. Ebenso natürlich andersrum am Ende der Variable. So wie du das handhabst würde allenfalls "$username" und "$password" in deiner Datenbank landen, dass das nicht passiert liegt daran, dass sich SQL an dem einzelnen $-Symbol stört.
PS: Benutz doch prepared-statements!
|
|
|
07/26/2015, 21:21
|
#3
|
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
|
Grundsätzlich ist das mit dem PrimaryKey kein Problem, man müsste dann nur einiges beachten. Die gängigste Lösung ist folgende Tabelle:
PHP Code:
CREATE TABLE IF NOT EXISTS `cms_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `password` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) );
Primary Key liegt auf der ID
Bei der Indizierung wird kein Benutzername mehr benötigt.
Mit diesem Konzept kann der Benutzername - sofern erwünscht - nachträglich ohne weiteres geändert werden.
Doppelte Nutzernamen sind nicht möglich.
Ein weiteres Problem was mir direkt auffällt ist deine Art zu programmieren. Du solltest bei einem Stil bleiben und nicht wechseln. Entweder prozeduraler oder Objekt-orientierter Stil. Am besten eignest du dir die OOP Variante von mysqli an, das ist einfach sinnvoller.
Wenn du mysqli verwendest, solltest du auch direkt deren Prepared statements nutzen, dann fällt das escapen weg und du lernst nochmal n gutes Stück guten Programmierstil dazu.
Weiterhin ist es sinnvoll, dass du deine Datenanbindung abkapselst und in eine externe PHP Datei legst. MVC sagt dir das was ? Wenn du was lernen willst, probiere dich daran ;-) google wird dir zu MVC php schon was sagen können Hier auch ein schöner Link dazu :
An meinen Vorredner:
"musst du zwischen vorläufigem String-Ende und der Variable einen Punkt setzen"
Die Aussage ist falsch, mit normalen Anführungszeichen muss man das nicht. Beispielswiese ist folgender Code völlig ok:
PHP Code:
$name = "Peter"; echo "Hallo $name";
Allerdings sollte man der Übersicht halber Variablen in Klammern setzen:
PHP Code:
echo "Hallo {$name}";
|
|
|
07/27/2015, 01:04
|
#4
|
elite*gold: 74
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
|
Quote:
Originally Posted by Daifoku
An meinen Vorredner:
"musst du zwischen vorläufigem String-Ende und der Variable einen Punkt setzen"
Die Aussage ist falsch, mit normalen Anführungszeichen muss man das nicht. Beispielswiese ist folgender Code völlig ok:
PHP Code:
$name = "Peter"; echo "Hallo $name";
Allerdings sollte man der Übersicht halber Variablen in Klammern setzen:
PHP Code:
echo "Hallo {$name}";
|
In der Tat, ja, ich habe mich irgendwie nur an dem einfachen Hochkomma direkt daneben orientiert, dass das ganze überhaupt nicht konsistent ist, ist mir nicht aufgefallen
Ich würde aus Gründen der universellen Verständlichkeit trotzdem immer mit dem Punkt arbeiten, komplexe Ausdrücke die Klammern erfordern ausgenommen. Und ja, mir ist bewusst, dass das Konkatenieren mit dem Punkt für jeden Teil neu ausgeführt wird und somit langsamer ist, aber das halte ich in den meisten Fällen für verkraftbar.
|
|
|
07/27/2015, 03:53
|
#5
|
elite*gold: 20
Join Date: Dec 2014
Posts: 169
Received Thanks: 59
|
Erstmal danke euch , werde aufjedenfall dies lernen.
Nur Problem besteht immer noch. Habe von Daifoku die Tabelle erstellt und es mit diesem Code probiert.
[SPOILER][/
PHP Code:
<form Action="<?php $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <input type="text" name="username" required="required"> <input type="password" name="password" required="required"> <button type="submit">Anmelden</button> <?php if ("POST" == $_SERVER["REQUEST_METHOD"]) {
include "verbindung.php";
$anzeige = isset($_POST["anzeige"]) ? 1 : 0;
$insert = $verbindung->prepare("INSERT INTO `cms_user` SET `name` = :username, `password` = :password"); $insert->bindValue(':username', $_POST["username"]); $insert->bindValue(':password', $_POST["password"]); $insert->bindValue(':anzeige', $anzeige);
if ($insert->execute()) { echo '<p>Die Naricht wurde eingetragen</p>'; } else { print_r($insert->errorInfo()); } } ?>
SPOILER]
Fehlermeldung: Array ( [0] => HY093 [1] => [2] => )
|
|
|
07/27/2015, 10:39
|
#6
|
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
|
Das sieht doch schonmal gut aus
PHP Code:
$insert->bindValue(':anzeige', $anzeige);
verursacht einen Fehler. Du darfst nur Variablen binden die du auch wirklich verwendest ;-)
Zudem sollte das Passwort mindestens mit md5 gehasht werden ;-)
PHP Code:
$password = md5($_POST['password']); $insert->bindValue(':password', $password);
|
|
|
07/27/2015, 11:59
|
#7
|
elite*gold: 13
Join Date: Feb 2010
Posts: 1,350
Received Thanks: 239
|
Quote:
Originally Posted by Daifoku
Zudem sollte das Passwort mindestens mit md5 gehasht werden ;-)
|
Bitte nicht, wenn du ihm schon sagst, dass er seine Passwörter hashen soll, dann wenigstens nicht mit md5.
PHP Code:
$password = password_hash($_POST['password'], PASSWORD_DEFAULT); $insert->bindValue(':password', $password);
md5 ist extra schnell und effizient, was keinesfalls wünschenswert ist bei Passwörtern, denn diese kann man mit guter Hardware schnell brute forcen. Dieses Problem versuchen Algorithmen wie bycrypt zu lösen.
|
|
|
07/27/2015, 13:21
|
#8
|
elite*gold: 0
Join Date: Mar 2010
Posts: 360
Received Thanks: 132
|
Ich sagte "mindestens", md5 ist immerhin besser als plain..
Bei Verwendung von password_hash muss die MySQL Tabelle geändert werden.
PHP Code:
CREATE TABLE IF NOT EXISTS `cms_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) );
password_hash ist auf keine Länge begrenzt, die momentane Länge liegt bei ca 60 Zeichen, wird in Zukunft aber länger werden ...
password_hash gibt es erst seit PHP 5.5, daher ist hier auf die Kompatibilität des Servers zu achten.
|
|
|
07/27/2015, 13:35
|
#9
|
dotCom
elite*gold: 12400
Join Date: Mar 2009
Posts: 15,882
Received Thanks: 4,386
|
Quote:
Originally Posted by Bently.
Erstmal danke euch , werde aufjedenfall dies lernen.
Nur Problem besteht immer noch. Habe von Daifoku die Tabelle erstellt und es mit diesem Code probiert.
[...]
Fehlermeldung: Array ( [0] => HY093 [1] => [2] => )
|
Wieso willst du "anzeige" binden wenn dieser Wert nicht in deinem prepare Statement vorkommt ?
PHP Code:
<form Action="<?php $_SERVER['SCRIPT_NAME'] ?>" method="POST"> <input type="text" name="username" required="required"> <input type="password" name="password" required="required"> <button type="submit">Anmelden</button> <?php if ("POST" == $_SERVER["REQUEST_METHOD"]) {
include "verbindung.php";
$anzeige = isset($_POST["anzeige"]) ? 1 : 0;
$insert = $verbindung->prepare("INSERT INTO cms_user (name, password) VALUES (?, ?)"); $insert->bindValue(1, $_POST["username"]); $insert->bindValue(2, md5($_POST["password"]));
if ($insert->execute()) { echo '<p>Die Naricht wurde eingetragen</p>'; } else { print_r($insert->errorInfo()); } } ?>
ggf kannst du die ? auch mit belegen.
PHP Code:
$insert = $verbindung->prepare("INSERT INTO cms_user (name, password) VALUES (:name, :password)");
PHP Code:
$insert->bindValue(":name", $_POST["username"]); $insert->bindValue(":password", md5($_POST["password"]));
|
|
|
07/27/2015, 16:20
|
#10
|
elite*gold: 20
Join Date: Dec 2014
Posts: 169
Received Thanks: 59
|
Danke für die Hilfe! Hat geklappt. Doch ist es so sicher?
Und die zweite Sache von Pixel das mit dem Passwort Hash , es gibt keine Fehlermeldung aus doch es erscheint auch kein Eintrag wenn ich das anwende mit dem Password Hash:
[SPOILER][/
PHP Code:
if ("POST" == $_SERVER["REQUEST_METHOD"]) {
include "verbindung.php";
$insert = $verbindung->prepare("INSERT INTO user_data_acc (username,password) VALUES (?, ?)");
$password = password_hash($_POST["password"], PASSWORD_DEFAULT); $insert->bindValue(1, $_POST["username"]); $insert->bindValue(2, $password);
if($insert->execute()) { echo '<p>Die Naricht wurde eingetragen</p>'; } else { print_r($insert->errorInfo()); } }
SPOILER]
|
|
|
07/27/2015, 16:22
|
#11
|
elite*gold: 74
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
|
Quote:
Originally Posted by Bently.
Danke für die Hilfe! Doch ist es so sicher?
|
MD5 ist nicht sicher, es macht es nur minimal schwerer das Passwort zu bekommen.
Benutz nen anständigen Algorithmus dafür.
|
|
|
07/27/2015, 16:25
|
#12
|
dotCom
elite*gold: 12400
Join Date: Mar 2009
Posts: 15,882
Received Thanks: 4,386
|
Quote:
Originally Posted by .StarSplash
MD5 ist nicht sicher, es macht es nur minimal schwerer das Passwort zu bekommen.
Benutz nen anständigen Algorithmus dafür.
|
Würde vielleicht sogar noch ein Captcha empfehlen, damit die Datenbank nicht zugemüllt wird.
und dann sollte doch reichen, oder ?
|
|
|
07/27/2015, 16:30
|
#13
|
elite*gold: 20
Join Date: Dec 2014
Posts: 169
Received Thanks: 59
|
Sicherheit ist halt das wichtigste für mich. Ein Projekt mit Lücken kann ich gleich an den Nagel hängen.
Deswegen frage ich hier zur Sicherheit rum und nerve ein bisschen :P
Also wie sollte ich nun das Script erweitern mit einem sicheren Password und Captcha (Das mit dem Captcha könnte ich auch googlen)
|
|
|
07/27/2015, 16:35
|
#14
|
elite*gold: 13
Join Date: Feb 2010
Posts: 1,350
Received Thanks: 239
|
Quote:
Originally Posted by Devsome
Würde vielleicht sogar noch ein Captcha empfehlen, damit die Datenbank nicht zugemüllt wird.
und dann sollte doch reichen, oder ?
|
Quote:
Warum sind verbreitete Hashfunktionen wie md5() und sha1() nicht für die Speicherung von Passwörtern geeignet?
Hashalgorithmen wie MD5, SHA1 und SHA256 sind auf Geschwindigkeit und Effizienz optimiert. Mit modernen Techniken und leistungsstarker Hardware ist es aber trivial geworden diese Hashalgorithmen mit "brute force" Attacken anzugreifen.
Weil moderne Computer diese Hashalgorithmen leicht brechen können, werden diese von Sicherheitsspezialisten nicht für die Speicherung von Passwörtern empfohlen.
|
Nein reicht nicht, vorallem nicht ohne einen Salt.
Quote:
password_hash ist auf keine Länge begrenzt, die momentane Länge liegt bei ca 60 Zeichen, wird in Zukunft aber länger werden ...
password_hash gibt es erst seit PHP 5.5, daher ist hier auf die Kompatibilität des Servers zu achten.
|
Ich denke die Datenbankstruktur so früh zu ändern sollte kein Problem darstellen.
Falls es wirklich an der Version scheitern soll, kann man immernoch verwenden und dort den Blowfish Algorithmus .
|
|
|
07/27/2015, 17:01
|
#15
|
elite*gold: 20
Join Date: Dec 2014
Posts: 169
Received Thanks: 59
|
@Pixeltree , Du hast mir schon ein Beispiel gegeben mit dem Password_Hash jedoch hat es keine Wirkung.
PHP Code:
if ("POST" == $_SERVER["REQUEST_METHOD"]) {
include "verbindung.php";
$insert = $verbindung->prepare("INSERT INTO user_data_acc (username,password) VALUES (?, ?)");
$password = password_hash($_POST["password"], PASSWORD_DEFAULT); $insert->bindValue(1, $_POST["username"]); $insert->bindValue(2, $password);
if($insert->execute()) { echo '<p>Die Naricht wurde eingetragen</p>'; } else { print_r($insert->errorInfo()); } }
|
|
|
Similar Threads
|
link wird nicht vollständig angezeigt
03/29/2013 - Main - 2 Replies
hallo,
sieht mal hier: http://www.elitepvpers.com/forum/warrock-trading/2 506168-lv-56-gold-premium-alle-exp-ups.html#post21 923605
da wird mein ebay kleinanzeigen link gar nicht richtig angezeigt
Was issen das??
|
RAM nicht vollständig nutzbar?
10/28/2012 - Technical Support - 5 Replies
Guten Tag, Com.
Ich kann meinen Arbeitsspeicher nicht komplett verwenden.
Windows zeigt mir zwar die vollen 6GB an, meldet aber bereits sobald etwas mehr als 3GB benutzt sind, dass der verfügbare Arbeitsspeicher unzureichend sei und Anwendungen geschlossen werden müssten, um dies zu beheben.
Wichtige Komponenten:
OS: Windows 7 Professional 64-Bit
ASRock N68C-S UCC
AMD Athlon II X3 450 3,2GHz
1x4GB TeamGroup Elite + 1x2GB Kingston-DDR3-1333-RAM (9-9-9-24)
|
send("key") wird nicht überliefert
07/13/2011 - AutoIt - 3 Replies
Hallo,
ich habe mir ein kleines Skript gebastelt:
dim $color
|
All times are GMT +2. The time now is 22:51.
|
|