Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 22:51

  • Please register to post and access all features, it's quick, easy and FREE!

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.

Reply
 
Old   #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.

Bently. is offline  
Old 07/26/2015, 19:03   #2
 
.StarSplash's Avatar
 
elite*gold: 74
The Black Market: 185/0/0
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!
.StarSplash is offline  
Old 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` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
namevarchar(50NOT NULL,
  `
passwordvarchar(50NOT 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}"
Daifoku is offline  
Old 07/27/2015, 01:04   #4
 
.StarSplash's Avatar
 
elite*gold: 74
The Black Market: 185/0/0
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
Quote:
Originally Posted by Daifoku View Post
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.
.StarSplash is offline  
Old 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"]) ? 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] => )
Bently. is offline  
Old 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); 
Daifoku is offline  
Old 07/27/2015, 11:59   #7
 
PixelTree's Avatar
 
elite*gold: 13
Join Date: Feb 2010
Posts: 1,350
Received Thanks: 239
Quote:
Originally Posted by Daifoku View Post
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.
PixelTree is offline  
Thanks
2 Users
Old 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` ( 
  `
idint(11NOT NULL AUTO_INCREMENT
  `
namevarchar(50NOT NULL
  `
passwordvarchar(255NOT 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.
Daifoku is offline  
Thanks
1 User
Old 07/27/2015, 13:35   #9
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,882
Received Thanks: 4,386
Quote:
Originally Posted by Bently. View Post
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"]) ? 0;


$insert $verbindung->prepare("INSERT INTO cms_user (name, password) VALUES (?, ?)");
    
$insert->bindValue(1$_POST["username"]);
$insert->bindValue(2md5($_POST["password"]));

if (
$insert->execute()) {
echo 
'<p>Die Naricht wurde eingetragen</p>';
}
else {
print_r($insert->errorInfo());
}
}
?>
ggf kannst du die ? auch mit
Code:
:name
:password
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"])); 
Devsome is offline  
Thanks
1 User
Old 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]
Bently. is offline  
Old 07/27/2015, 16:22   #11
 
.StarSplash's Avatar
 
elite*gold: 74
The Black Market: 185/0/0
Join Date: Jul 2010
Posts: 13,408
Received Thanks: 3,943
Quote:
Originally Posted by Bently. View Post
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.
.StarSplash is offline  
Old 07/27/2015, 16:25   #12
dotCom
 
Devsome's Avatar
 
elite*gold: 12400
The Black Market: 104/0/0
Join Date: Mar 2009
Posts: 15,882
Received Thanks: 4,386
Quote:
Originally Posted by .StarSplash View Post
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 ?
Devsome is offline  
Old 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)
Bently. is offline  
Old 07/27/2015, 16:35   #14
 
PixelTree's Avatar
 
elite*gold: 13
Join Date: Feb 2010
Posts: 1,350
Received Thanks: 239
Quote:
Originally Posted by Devsome View Post
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 .
PixelTree is offline  
Old 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.

Bently. is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.