Mein Loginsystem - (Communitysystem)

Nur mal das klassische php.net Beispiel in den Raum werf *
als Name O'reily sowas muss man einfach zulassen. Und bei einer Loseseite sind auch Ami´s ;)
 
Also ich habe jetzt das ganze neu gemacht (ja habe sachen vom alten kopiert und überprüft) und einiges verändert!
[HIER]
 
Zuletzt bearbeitet:
Also ich habe jetzt das ganze neu gemacht (ja habe sachen vom alten kopiert und überprüft) und einiges verändert!
[HIER]

Zahlen sind immer noch keine Strings:
PHP:
$string = '1'; // Ist ein String (siehe Highlighting)
$string = 1; // Ist eine Zahl

Php ist da nicht streng, aber man sollte es sich trotzdem angewöhnen (gerade für andere Sprachen).
Sieht ansonsten auf den ersten Blick aber schon besser aus :)
 
  • Zahlen sind keine Strings..

Ich hab noch was lustiges für dich, in bestimmten Situation - wenn Zahlen im Spiel sind und du sie als Strings vergleichen möchtest, musst du höllisch aufpassen, dann musst du bei Vergleichen immer $a===$b statt $a==$b machen.
Warum, dann kopier doch folgenden Code raus:
PHP:
$string_a = '0X2BAD';
$string_b = '11181';
if ($string_a == $string_b) {
	echo "'$string_a' und '$string_b' SIND GLEICH<br>\r\n";
} else {
	echo "'$string_a' und '$string_b' sind unterschiedlich<br>\r\n";
}
Da erhält man (zumindest auf den Phpversionen die ich am Laufen habe), wenn man den Code ausführt:
'0X2BAD' und '11181' SIND GLEICH
Selbst ein if ( (string)"0X2BAD" == (string)"11181" ) würde nicht weiterhelfen, lediglich ein ===.

Was zum Nachschlagen:
https://www.php.net/manual/de/language.operators.comparison.php
Ps war damit selbst schon mal auf die Schnauze geflogen als ich mit dem == Operator '01' und '0001' als String vergleichen wollte und sie komischerweise immer gleich waren
 
Zuletzt bearbeitet:
'0X2BAD' und '11181' SIND GLEICH
Ein klasse Beispiel :mrgreen: Das muss ich mir glatt mal merken :D

Sonst hab ich nur den MySQL-Stringvergleich auf Lager:
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] 111>12, '111'>'12';
[/FONT][FONT=Courier New]+--------+------------+
| 111>12 | '111'>'12' |
+--------+------------+
|      1 |          0 |
+--------+------------+
1 row in set (0.00 sec)[/FONT]
 
theHacker, du hast nix zu meiner neuen Version zu sagen?

Ich kopiere es jetzt das 3. mal ohne eine Antwort:
Aber was ich nicht so verändern konnte ist:
PHP:
CREATE TABLE `login` (
  `id` int(11) NOT NULL auto_increment,
  `lastlogin` datetime NOT NULL,
  `nickname` text collate latin1_general_ci NOT NULL,
  `passwort` varchar(32) collate latin1_general_ci NOT NULL default '',
  `vorname` text collate latin1_general_ci NOT NULL,
  `nachname` text collate latin1_general_ci NOT NULL,
  `mail` text collate latin1_general_ci NOT NULL,
  `aktiviert` char(1) collate latin1_general_ci NOT NULL default '',
  `aktivierungscode` int(15) NOT NULL default '0',
  `ip` varchar(18) collate latin1_general_ci NOT NULL default '0',
  `regtime` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=9 ;
Da kommen Fehlermeldungen!?! :biggrin:
 
Ich kopiere es jetzt das 3. mal ohne eine Antwort:

du musst schon sagen was du willst ;) wenn du jetzt wissen willst ob das so sinnvoll ist nein... die datentypen sind großteils fehl am platz.

`nickname` text <- wie lang sollen die nicknames werden? bin der meinung varchar(20) sollte reichen
`passwort` varchar(32) <- speicherst du die passwörter als hash ab? wenn ja nimmst du am besten je nach hash die passende größe zb bei md5 char(32), ansonsten bei klartext passwörtern würde ich auch 20 als grenze ansehen
`vorname` text <- selbes spiel wie nickname
`nachname` text <- gleich
`mail` <- ne mail adresse hat auch nur ne begrenzte länge... mit varchar(100) bist du auf der sichernen seite
`aktiviert` char(1) <- ist ok... andere mögichkeiten wären noch unsigned tinyint(1), oder enum
`ip` varchar(18) <- ne ipv4 adresse ist 7-15 zeichen lang. also varchar(15), ansonsten ipv6 ist maximal 39zeichen lang wenn mans als zeichenkette speichert. alternativ für ipv4 könnte man auch int(11) benutzen... und die ip adresse bei speichern und auslesen konvertieren.
 
Die von der du sagst das sie auftaucht...

Also jetzt hats funktioniert. Nur mit dem Enum vorschlag von hacker ging nicht..
Neue version:
PHP:
CREATE TABLE `login` (
  `id` int(11) NOT NULL auto_increment,
  `lastlogin` datetime NOT NULL,
  `nickname` varchar(20) collate latin1_general_ci NOT NULL,
  `passwort` char(32) collate latin1_general_ci NOT NULL,
  `vorname` varchar(20) collate latin1_general_ci NOT NULL,
  `nachname` varchar(20) collate latin1_general_ci NOT NULL,
  `mail` varchar(100) collate latin1_general_ci NOT NULL,
  `aktiviert` tinyint(1) unsigned NOT NULL,
  `aktivierungscode` text collate latin1_general_ci NOT NULL,
  `ip` varchar(18) collate latin1_general_ci NOT NULL default '0',
  `regtime` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=17 ;
 
Nur mit dem Enum vorschlag von hacker ging nicht..
Wieso soll das nicht gehen ? :hö:
Du wirst halt im PHP-Code nichts ausgebessert haben :roll:

Ich hab deshalb nicht auf deinen Post geantwortet, weil ich weder ne Fehlermeldung, noch ne Verbesserung gesehen hab - also dachte ich, die kommt noch. ZeroCCC's Ausführungen hab ich ja in ähnlicher Form schon gepostet gehabt.

Für den neuen PHP-Code hab ich noch keine Zeit gehabt, den genauer anzugucken.
 
Wieso soll das nicht gehen ? :hö:
Du wirst halt im PHP-Code nichts ausgebessert haben :roll:

[..]

Wie ausgebessert? Der übernimmt das nicht mal in die DB:
PHP:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL' at line 1

Noch ne allgemeine Frage, wann kann/sollte ich ' ', " " oder garnix verwenden? Bei Zahlen weiß ich jetzt garnix.. Aber sonst?8)

Und sollte ich jetzt wirklich immer === benutzen?
 
Zuletzt bearbeitet:
Noch ne allgemeine Frage, wann kann/sollte ich ' ', " " oder garnix verwenden? Bei Zahlen weiß ich jetzt garnix.. Aber sonst?8)

wo in php? quoten tust du immer wenn es sich um einen string handelt.
Und sollte ich jetzt wirklich immer === benutzen?
nein... nur wenn du ein expliziten typen vergleich wünschst, was in der praxis aber recht selten vorkommt.