Regestrieren/Login Script fehler finden

HTML-Tag_83

Grünschnabel
Hallo,

ich hab mir hier das Registrieren/Login Tutorial angesehen und habs so gemacht wie es im Video gesagt wurde.

Nun irgendwie Funktioniert das bei mir nicht so wie im Video und weiss gerade nicht weiter.

Geschrieben hab ich es mit Notepad++, danach hab ich die dateien mal in Phase5 geladen, der mir auch bischen was angezeigt hat, konnte aber nix damit anfangen.

Ich hab mich dann dazu durch gerungen NetBeans (so wie im Video) zu verwenden, der hat mir so einige fehler angezeigt, nach dem ausbessern und abermals das ansehen des Video Tutorials hab ich die meisten Fehler nun raus bekommen, sogar welche die im Video gemacht und nicht ausgebügelt wurden (laut NetBeans) ^^

egal lange rede kurzer sinn.

Fangen wir erstmal bei dem Registrierungs Script an und hab folgende Fragen:

1. Warum zeigt mir NetBeans den Fehler in Zeile 1 an, meines wissens ist das richtig oder der mag das nicht weil es eine PHP- und keine HTML-Datei ist
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

2. Im Head gehts weiter der mag den meta tag zusammenhang nicht und die kurz Version hab ich auch schon Probiert, Fehler bleibt der selbe, der mag den Charset utf8 nicht, mit dem ISO Charset hat er keine Probs
<meta http-equiv="content-type" content="text/html; charset=utf-8">

3. in der Datei register_marckup in Zeile 43 und 52 steht folgendes
Code:
43<?php if(isset($error_msg) && !empty($error_msg)) :  ?>
52<?php if(isset($success_msg) && !empty($success_msg)) : ?>

Meldung von NetBeans "Variable $error_msg seems to be uninitialized" bzw. "Variable $success_msg seems to be uninitialized"

4. in der datei register_logic in Zeile 54 und 64
PHP:
54 if(strpos($db->error, "duplicate") !== false) {

Meldung ""Variable $db seems to be uninitialized"

PHP:
64 $success_msg = "Das Benutzerkonto ",htmlspecialchars($_POST['username'])," wurde erfolgreich angelegt.";

Meldung "Syntax error: expected: instanceof, OR, XOR, AND, ?, ';', ||, &&, ....." usw.


5. In dem Video hat er auch gezeigt, wie die Felder username und email gefüllt bleiben bzw. leer bleiben wenn nix drin stand, das sah so aus:

Code:
<input type="text" name="username" maxlength="20" id="username" value="<?php  echo  (isset($_POST['username']))  ?  htmlspecialchars($_POST['username'])  :  '' ?>" >

nun also ich weiss nicht wie er das gemacht hat also bei mir zeigt er im jeweiligen feld den kompletten PHP-Code an egal ob ich das feld leer mache oder irgendwas rein schreibe, sobald ich auf Regestrieren klicken macht der den code da rein:
Code:
<?php  echo  (isset($_POST['username']))  ?  htmlspecialchars($_POST['username'])  :  '' ?>



Und dann hät ich da noch eine Frage, er meinte man sollte eine config.php anlegen und die Server Daten dort rein schreiben und nicht so wie er es geamcht hat in den Quellcode.
Wie muss ich das den in der config.php rein schreiben, dort zeigt mir NetBeans auch zwei fehler an, das alt bekannt "$db" scheint er nicht zu mögen und "$salt" mag der wohl auch nicht, ist NetBeans wohl zu salzig ^^

Die config.php sieht bei mir so aus:
Code:
<?php
// FRAME
//
//-----------------------------CONGIG-------------------------------------------------
sessions_start;
ini_set('include_path', 'X:\\xampp v1.7.7\\htdocs\\_mysql\\');
$db = new mysqli('localhost', 'Benutzername', 'Passwort', 'datenbankname');
$salt ="4L/7axkfZEo9FVMJIC8hIrbm6h0=e9QU7qHjN5UQGpCLHx6ub3tikAw=LitlM6gbwVQwz2XeRtwJfutbpww=";
//------------------------------------------------------------------------------------



kann mir da jemand weiter helfen?
Wenn ich auf Regestrieren bei mir klicke, lädt der die seite neu, die felder "Benutzername" und "Email" füllt er mir so aus wie in Punkt 5 Beschrieben und die Meldungen die er mir eigentlich auswerfen soll gibt er nicht aus, stattdessen hab ich unter den Regestrierungsformular ein Roten und Grünen kasten, die eigentlich nicht da sein sollten, also der rote soll nur auftauchen wenn das formular nicht korrekt ausgefüllt wurde mit einem Fehlertext drin und der grüne soll nur auftauchen wenn die Registrierung erfolgreich war mit einem Erfolgstext.

In die datenbank Schreibt der die Registrierung auch nicht rein, da hab ich auch irgendwo noch ein fehler.


Benutze Software:
*Notepad++ v5.9.1
*Phase5 v5.6.2.3
*NetBeans v7.1.2
*xampp v1.7.7



PS:
wenn alle fehler bei der Registrierung beseitigt sind und alles fehlerfrei Funktioniert, gehts weiter mit dem Login, weil das kann ich danach erst Testen :)
 
Hi

1, 2: Welche Fehlermeldungen?

3, 4a: Ohne den Code davor (oder besser den kompletten Code)
können wir auch nicht sagen, ob das stimmt

4b: Stringverkettung geht mit . statt , (bei Texttutorials gibts keine Auflösungsprobleme ;-])

5: Zuerst mal: wie ist die Dateiendung der Datei?
 
1. Die Meldung:
"Quirky doctype. Expected "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd>". From Line 1, column 1; to line 1, column 63 (rule Category: Doctype)"

2. Die Meldung:
"Internal encoding declaration "utf-8" disagrees with the actual encoding of the document ("windows-1252"). Form Line 4, Column 6; line 4, column 72 (rule Category: encoding)"

3. Der Code:
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
	    <meta http-equiv="content-type" content="text/html; charset=utf-8">
		<title></title>
	</head>
	<body>
	    <div style="margin:0 auto; width:1024pxs">
	    <!-- action: Ziel = Quelle = Ziel, Post: grössere länge, kann nicht manipuliert werden -->
	    <form action="" method="post" >
		   <fieldset>
		   <label for="username"> Benutzername: </label>
		   <br>
		   <input type="text" name="username" maxlength="20" id="username" value="<?php  echo  (isset($_POST['username']))  ?  htmlspecialchars($_POST['username'])  :  '' ?>" >
		   
		   <br>
		   
		   <label for="pass1"> Passwort: </label>
		   <br>
		   <!-- pass[] "[]" = wird dann als array übergaben -->
		   <input type="password" name="pass[]" id="pass1" value="">
		   
		   <br>
		   
		   <label for="pass2"> Passwort Wiederholung: </label>
		   <br>
		   <input type="password" name="pass[]" id="pass2" value="">
		   
		   <br>
		   
		   <label for="email"> E-Mail-Adresse: </label>
		   <br>
		   <input type="text" name="email" maxlength="20" id="email" value="<?php  echo  (isset($_POST['email']))  ?  htmlspecialchars($_POST['email'])  :  '' ?>" >
		   
		   <br>
		   <input type="submit" name="submit" value="Registrieren">
		   
		   
		   
		   </fieldset>
		   
		   
		</form>
		
		<?php if(isset($error_msg) && !empty($error_msg)) :  ?>
		  <div style="border:2px solid red; padding:10px">
		      <?php echo $error_msg; ?>
                  </div>
		<?php endif; ?>
		
		
	    <?php if(isset($success_msg) && !empty($success_msg)) : ?>
		  <div style="border:2px solid lawngreen; padding:10px">
		      <?php echo $success_msg; ?>
		  </div>
		
		<?php endif; ?>
		
		
		
		</div>
		
	</body>
</html>

4a. Der Code
Code:
<?php

if(!isset($_POST['submit'])) return;


if(!isset($_POST['username']) || !isset($_POST['pass']) || !isset($_POST['email']));
        empty($_POST['username']) || empty($_POST['pass']) || empty($_POST['email']); {
            $error_msg = "Das Formular wurde nicht vollständig ausgefüllt.";
         return;
}

// Wenn ja ... weiter

// "1" == 1  || TRUE      "1" === 1 || FALSE

// Passwort vergleich
if($_POST['pass'][0] !== $_POST['pass'][1]) {
    $error_msg = "Die Passwörter stimmen nicht überein.";
        return;
}
// Wenn ja ... dann weiter

// ***** = (sha256)=> "PoOxPZm/DebGveWsXKSuaHo9Rts="
$_POST['pass'] = hash('sha256', $_POST['pass'][0].$salt);

if(strien($_POST['username']) > 20) {
    $error_msg = "Der Benutzername ist zu lang, er darf Maximal 20 Zeichen haben.";
        return;
}

// * Vagiman * trim(* Vagiman *) => "Vagiman"
$_POST['username'] = trim($_POST['username']);

if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
   $error_msg = "Die E-Mail-Adresse ist ungültig";
   return;
}

// 25.125.44.32
$user_ip = ip2long($_SERVER['REMOTE_ADDR']);

$sql = '
        INSERT INTO
                           user
                                   (Username, Passwort, Email, IP, date)
        VALUES
                           (?, ?, ?, ?, NOW())';
$stmt = $db=
prepare($sql);
$stmt->bind_param('sssl', $_POST['username'], $_POST['pass'], $_POST['email'], $user_ip);

if(!$stmt->execute()) {

    if(strpos($db->error, "duplicate") !== false) {

             $error_msg = "Der Benutzername oder die E-Mail wurde bereits verwendet.";
                 } else {
    $error_msg = "Es ist ein Fehler aufgetreten.";
        }
        return;
}
$stmt->close();

$success_msg = "Das Benutzerkonto ".htmlspecialchars($_POST['username'])." wurde erfolgreich angelegt.";

4b. hab das geändert und nun kommt folgende Meldung:
"Variable $success_msg seems to be unused in its scope"

5. Das ist die Datei register_marckup.php, code findest bei Punkt 3.
denke aber mal das du eher die config meinst und das steht schon im ersten post config.php
 
1) Steht doch, da, we es richtig geht.
Dir fehlt der zweite Teil mit dem loose.
http://de.selfhtml.org/html/allgemein/grundgeruest.htm#dokumenttyp

2) Du musst die Datei schon auch als utf8 speichern, nicht nur reinschreiben, dass sie es sein soll.
Netbeans: Rechtsklick auf das Projekt in der Projektliste, da sollte es zu finden sein.
Dann neu speichern.

3)
Nirgends im Code davor werden die genannten Variablen gemacht.
Im anderen Code sind sie aber.
...du solltest das Tutorial wechseln.

4a)
Hier:
$db=prepare($sql);
gehört ein -> statt =
Und eine Verbindung herstellen muss man auch mal irgendwo...

4b)
Da ist eine Variable, die bei Punkt 3 fehlt.
In dieser Datei, wo sie ist, wird die aber nie verwendet.
Deshalb "Achtung, Überflüssig".
 
1. Erledigt, nun hab ich noch was, was ich bisher nicht erwähn habe und zwar zeigt der mir bei dem php-tag in zeile eins ein doctyp fehler an, versteh ich nicht so ganz.
"The X/HTML version of the code cannot be determined. Set to default X/HTML5. The default version cannot be overridden since the file is not in the project. Non-space character not found without seeing a doctype first. Expected "<!DOCTYPE html>". From Line1, column 1; line1, column 3 (Rule Category: Unexpected Characters)"

also wie kann ich die dateien, die schon fertig sind, dem Projekt hinzufügen und warum möchte er das ich in Line 1 ein doctype angebe, wenn ich mir andere php-dateien ansehe, fängt das auch nur mit <?php an ohne doctype.

2. Also ich hab den code ja über Notepad++ geschrieben und in Notepad++ folgendes Eingestellt (Einstellungen/Neu_Öffnen_Speichern/Kodierung/ UTF-8 und Standardsprache PHP) also sollte er es eigentlich in utf-8 speichern, was er wohl nicht getan hat.
Wo kann ich das genau unter NetBeans machen, ich bin in Englisch nicht so fit und kann NetBeans auch niergends in Deutsch umstellen, zumindest hab ich es bisher noch nicht gefunden, hab mir das volle packet mit Java ect. gedownloadet.

3. Also hier auf tutorials.de gibts nur ein Tuto-Video mit 6 Parts für die Registrierung und 2 Parts dann fürs Login. Ich hab noch ein Text Tuto gefunden da ist der code aber völlig anders und nichts groß erläutert, der code ist auch völlig anders und kürzer. Möchte was sicheres mit Meldungen wenn was schief läuft, kannst du mir was empfehlen?

4a. so behoben, deine Lösung aus Zeile 48 wurde mir gar nicht angezeigt, hab es aber geändert. der fehler war in Zeile 54 und da war es genau umgedreht da kam ein "=" statt "->" hin, trotzdem danke für den tip hab beide zeilen geändert.

Stellt er keine Verbindung über die config.php her? Dort stehen eigentlich alle datenbankdaten zum connecten drin, vielleicht ist da der fehler?

ich hab noch eine register.php, dort steht folgendes drin:
Code:
<?php
require_once('config.php');

require_once('register_logic.php');
require_once('register_markup.php');

4b. Du sagtest das die Variable fehlt? in der datei register_marckup.php gehört eigentlich was zu der zeile, meiner meinung, verbesser mich wenn ich falsch liege.

register_marckup.php
error_msg in zeile 45-49
success_msg in Zeile 52-57

dazu gehörige in register_logic.php
error_msg in Zeile 52-62
success_msg in Zeile 63
 
Zuletzt bearbeitet:
1: Wer genau gibt die Fehlermeldung?
Netbeans? W3C-Validator?

Am Ende würde ich mich eher auf den Validator und die PHP-Meldungen beim Ausführen verlassen
(wobei man dem Validator HTML ohne PHP geben muss).
Eine IDE wie Netbeans hat das nicht zu 100,00% gleich wie die "echten" Sachen drin.

(Hab Eclipse auch schon mal melden sehen, dass ein (Java-)Programmcode
keine korrekte englische Rechtschreibung ist...)

2: Properties-Source

4a, 4b: Ah, jetzt hast du die requires gepostet. Problem erledigt.

...
Wie gesagt, vllt. erkennt Netbeans einfach nicht, dass die nicht bekannten Variablen in den require vorhanden sind. Probiers einfach aus und schau, ob PHP selbst sich beschwert.
 
1. Die Meldung gibt NetBeans, mit dem Validator hab ich es noch nicht probiert.

2. Encoding utf-8 und PHP-Version 5.3 hab ich gleich nach der installation eingestellt, nur wenn ich was an den Dateien änder und speicher ab, zeigt er mir das trotzdem noch an, wie kann ich das beheben? Also speichert er das den nun in utf-8, habs eigentlich überall eingestellt.


5. der punkt ist noch nicht abgearbeitet, warum schreibt der mir den php-code in das eingabefeld? und die verbindung zur datenbank stellt der auch nicht her, könntest du mir dabei auch noch helfen :)
 
Zurück