Entwickler-Ecke

Programmiersprachen (Server) - Website Anmeldung über PHP


Csharp-programmierer - Mo 19.09.16 17:02
Titel: Website Anmeldung über PHP
Hallo Community,
nachdem ich nachgedacht habe, ist es sinnvoller, das Registrierungsformular in einer Website rein zu bauen. Ich habe auf YouTube danach gesucht und das ist dabei rausgekommen:

PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
<?php require("db.php"); ?>
<!DOCTYPE html>
<html lang="de">
  <head>
    <title>Mainlysoft Anmeldeserver</title>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE-edge">
    <meta name="viewport" content="width-device-width, initial-scale=1">
    <link rel="stylesheet" href="css/bootstrap.min.css>
  </head>
  <body>
    <div class="
container">
      <?
        if(
$_GET['s'] == 1) {
          echo "
<div class='alert alert-danger'>Erfolg</div>";
        }  
      
    
          <if(isset(§_POST['submit']))
          {
        
$date = time();
        
$username = $db->real_escape_string($_POST['username']);
        
$email1 = $db->real_escape_string($_POST['email1']);
        
$email2 = $db->real_escape_string($_POST['email2']);
        
$password1 = $db->real_escape_string($_POST['password1']);
        
$password2 = $db->real_escape_string($_POST['password2']);

        
$sql = $db->query("SELECT ' FROM user WHERE username = '".$username."' OR email = '"$email1.'");
        $row = $sql->fetchassoc();

        if($username == $row['username']) {
          echo "<div class='alert alert-danger'>Dieser Benutzername ist bereits vergeben.</div>";
        } else {
          $check_username = true;
        }

        if($email1 != $email2) {
          echo "<div class='alert alert-danger'>Die Emails stimmen nicht überein.</div>";
        } else {
          $check_email1 = true;
        }

        if($email1 == $row['email']) {
          echo "<div class='alert alert-danger'>Die Emails ist bereits vergeben.</div>";
        } else {
          $check_email2 = true;
        }

        if(§password1 != $password2) {
          echo "<div class='alert alert-danger'>Die Passwörter stimmen nicht überein.</div>";
        } else {
          $check_password = true;
        }

        if($check_username == true
          && $check_email1 == true && $check_email2 == true
          && $check_password == true) {
          $pass1 = hash("sha512"$pass1);
          
          $db->query("INDERT INTO users ('date', username, email, password) VALUES ('".$date."', '".$username."', '".$email1."', '".$pass1."')");

          header("?s=1");
          
        }
          }
          
      ?>
    </div>
      <form method="post">
        <div class="form-group">
          <input type="text" name="username" class="form-control" placeholder="Benutzername" required>
        </div>
        <div class="form-group">
          <div class="row">
            <div class="col-md-6">
              <input type="email" name="email1" class="form-control" placeholder="E-Mail Addresse" required>
            </div>
            <div class="col-md-6">
              <input type="email" name="email2" class="form-control" placeholder="E-Mail Addresse bestätigen" required>
            </div>
          </div>
        </div>
        <div class="form-group">
          <div class="row">
            <div class="col-md-6">
              <input type="password" name="passwort1" class="form-control" placeholder="Passwort auswählen" required>
            </div>
            <div class="col-md-6">
              <input type="password" name="passwort2" class="form-control" placeholder="Passwort bestätigen" required>
            </div>
          </div>
        </div>
        <div class="from-group">
          <button type="submit" name="submit" class="btn btn-primary">Registrieren</button>
        </div>
      </form>
    <script src="https://ajax.googlealpis.com/ajax/libs/query/1.11.3/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>

  </body>
</html>


Soo. Nun habe ich aber das Problem, dass am Anfang der PHP Datei ein Verweis auf eine andere PHP Datei ausgeführt wird. Aber wie die andere Datei aussieht, wird im Video leider Gottes nicht gezeigt. Wie muss diese Datei aussehen?


Christian S. - Mo 19.09.16 20:05

Schau doch mal scharf nach, welche Variable in dem Code benutzt aber nirgendwo vorher zugewiesen wird. Dann weißt Du, was in der Datei gemacht werden muss ;)

Generell würde ich den Code mal als ersten Schritt sehen, wie man so etwas machen kann. Sonderlich hohe Qualität scheint der mir aber nicht zu haben (alleine, dass HTML und PHP gemischt sind, finde ich äußerst unschön). Da solltest Du noch dran arbeiten, bevor Du das produktiv einsetzt. Von den Tippfehlern mal abgesehen ;)


hydemarie - Mo 19.09.16 20:34

Nach Zeile 9 sollte der Browser nichts mehr rendern.


Csharp-programmierer - Mo 19.09.16 21:15

Also es müssen ja Servername, Passwort, Username und Datenbankname mitgegeben werden. Aber ich weiß nicht, wie man die PHP DATEI so schreibt, dass die dynamisch miteinander laufen :(


Christian S. - Mo 19.09.16 21:29

Wenn ich nach Suche bei Google PHP REQUIRE suche, kommt als erster Hit das hier [http://php.net/manual/de/function.require.php]. Da steht, dass das bis auf der Verhalten im Fehlerfall dasselbe tut wie include [http://php.net/manual/de/function.include.php]. Und da gibt es Beispiele. So schwer ist das nicht zu finden ...


Csharp-programmierer - Di 20.09.16 19:30

Ah okay. Ich habe jetzt HTML und PHP getrennt. Aber leider gibt es immernoch Fehler.


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
<?php
  $host = "localhost";
  $usermame = "web26282455";  
  $password = "";
  $database = "usr_web26282455_1";

  $conn = new mysqli_connect($Server$Username,$Password,$Database);
  if($conn )
{
    $username = $_POST['username'];
    $geburtsdatum = $_POST['geburtsdatum'];
    $vorname = $_POST['vorname'];
    $nachname = $_POST['lastname'];
    $email = $_POST['email_one'];
    $safequestion = $_POST['safequestion'];
    $question_answer = $_POST['question_answer'];
    $password = $_POST['passwort1'];
               echo '.$username.';


    $sql_query = "INSERT INTO MsUser (`Username`, `Geburtsdatum`, `Vorname`, `Nachname`, `Email`, `Sicherheitsfrage`, `FrageAntwort`, `Passwort`)
            VALUES('
$username', '$geburtsdatum', '$vorname', '$nachname', '$email', '$safequestion', '$safequestion_answer', '$password');
    if (
$conn->query($sql) === TRUE) {
      echo "
New record created successfully";
  } else {
      echo "
Error HERE: " . $sql . "<br>" . $conn->error;
  } else
{
    echo "
Access danied";
  }


Ich rufe die Datei über <form action="..."> auf. Als Fehler kommt dann:
Parse error: syntax error, unexpected 'New' (T_NEW) in /var/www/web26282455/html/Mainlysoft/registration.php on line 24

Woran liegt das?

PS: auf dem Server ist der Fehler bei VALUES('.....');


Christian S. - Di 20.09.16 19:39

Selbst durch die Farbgebung im Forum wird doch schon deutlich, dass Du den String mit der SQL-Anweisung nicht geschlossen hast ... Ein bisschen mehr Eigeninitiative, bitte. :mahn:

Ach ja: https://xkcd.com/327/


Csharp-programmierer - Di 20.09.16 20:57

Ah okay :D
Nun gibt es einen sehr komischen Fehler. Anscheindend sind die Zugangsdaten falsch. Da dies nur ein Testaccount ist, und dieser nur zum Test da ist, kann ich ruhig die Daten hier veröffentlichen:
1
2


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
<?php
  
  $servername = "localhost";
  
  $usermame = "web26282455";  
  
  $password = "feuerwehr01";
  
  $database = "usr_web26282455_1";

  

  $sql_query = mysqli_connect($servername$username,$password,$database);

  if($sql_query)
{
        
    $username = $_POST['username'];
  
    $geburtsdatum = $_POST['geburtsdatum'];
  
    $vorname = $_POST['vorname'];
  
    $nachname = $_POST['lastname'];
  
    $email = $_POST['email_one'];
    
    $safequestion = $_POST['safequestion'];
  
    $question_answer = $_POST['question_answer'];
  
    $password = $_POST['passwort1'];

    

    $sql_queryy = "INSERT INTO MsUser (`Username`, `Geburtsdatum`, `Vorname`, `Nachname`, `Email`, `Sicherheitsfrage`, `FrageAntwort`, `Passwort`)
  
              VALUES('
$username', '$geburtsdatum', '$vorname', '$nachname', '$email', '$safequestion', '$safequestion_answer', '$password')";
    

    if ($sql_query->query($sql) === TRUE) {
      
      echo "New record created successfully";
  
  } else {
      
      echo "Error HERE: " . $sql_query . "<br>" . $conn->error;
  
    } 
  }
  else 
{
    
    echo "Access danied";
  
  }


?>


Aber dann kommt dieser Fehler:
Warning: mysqli_connect(): (HY000/1045): Access denied for user ''@'localhost' (using password: YES) in /var/www/web26282455/html/Mainlysoft/registration.php on line 13
Access danied

Wie kann das sein?


Christian S. - Di 20.09.16 21:06

$usermame = "web26282455"; Langsam habe ich keine Lust mehr :?


Csharp-programmierer - Di 20.09.16 21:12

Tut mir echt leid, Christian. Aber ich dachte man deklariert in PHP auch Variablen so, wie in C#. Ich dachte eigentlich die Rechschreibung ist egal :(


Christian S. - Di 20.09.16 21:14

Wenn Du die Variable als $usermame deklarierst und als $username benutzt, kann das wohl kaum egal sein.


Csharp-programmierer - Di 20.09.16 21:17

Okay. Da hast du wohl recht :oops: Man ist das jetzt peinlich


Palladin007 - Mi 21.09.16 01:40

Das ist der Punkt, der mich bei PHP am meisten nervt: Man ist nicht gezwungen eine Variable zu deklarieren.
Dazu kommt noch die schwache Typisierung.

Ich persönlich würde eine php-Datei mit folgenden Methoden schreiben:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
function CreateConnection() {
  
  $servername = "localhost";
  $username = "username";
  $password = "password";
  $dbname = "myDB";
  
  $connection = new mysqli($servername$username$password$dbname);
  
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }
  
  return $connection;
}

function CreateUser($email$username$password) {
  
  $passwordHash = password_hash($password, PASSWORD_DEFAULT);
  
  $connection = CreateConnection();
  
  $statement = $conn->prepare("INSERT INTO Users (Email, Username, PasswordHash) VALUES (?, ?, ?)");
  $statement->bind_param("sss"$email$username$passwordHash);
  
  $statement->execute();
  
  $statement->close();
  $connection->close();
}

function ExistsEmail($email) {
    
  $connection = CreateConnection();
  
  $statement = $conn->prepare("SELECT COUNT(id) FROM Users WHERE Email = ? GROUP BY id");
  $statement->bind_param("s"$email);
  $statement->execute();
  
  $statement->bind_result($count);
  $statement->fetch();
  
  $statement->close();
  $connection->close();
  
  return $count > 0;
}

function ValidateLoginData($email$password) {
    
  $passwordHash = password_hash($password, PASSWORD_DEFAULT);
  
  $connection = CreateConnection();
  
  $statement = $conn->prepare("SELECT COUNT(id) FROM Users WHERE Email = ? AND PasswordHash = ? GROUP BY id");
  $statement->bind_param("ss"$email$passwordHash);
  $statement->execute();
  
  $statement->bind_result($count);
  $statement->fetch();
  
  $statement->close();
  $connection->close();
  
  return $count > 0;
}


Ich bin bei Weitem kein PHP-Profi und kann das nicht testen, also verzeiht mir bitte eventuelle Fehler :D
Ich korrigiere sie aber gerne, wenn mich wer darauf aufmerksam macht.
Was ich nicht eingebaut habe: Wenn irgendwo was auf die Nase fällt, müssen Statement und Connection geschlossen werden.


Damit kannst Du dann prüfen ob es die Email schon gibt und wenn nicht, einen neuen User erstellen.
Und für den Login kannst Du damit prüfen ob email und passwort korrekt sind.

Sollte so ungefähr reichen.
Wenn der User sich mit Email oder Username einloggen können soll, musst Du das eben entsprechend beachten.


Wenn es um sicherheitsrelevante Daten geht, würde ich sogar noch mit einbauen, dass in der Datenbank hinterlegt wird, wann sich der User eingeloggt hat und dieses Datum bei Aktivitäten regelmäßig aktualisiert wird. Tut der User lang genug nix, dann ist die letzte Aktualisierung irgendwann so lange her, dass er automatisch ausgeloggt wird.


Die Prüfung, ob das Passwort und Username korrekt widerholt wurde, würde ich übrigens via JavaScript machen. So kannst Du das dem User noch während er schreibt mitteilen ohne einen Request zum Server schicken zu müssen. Geht einfach schneller und angenehmer beim Benutzen, finde ich.


Csharp-programmierer - Fr 23.09.16 18:41

Hallo Palladin,
dein Code soll genau das machen, was ich gerade möchte. Kannst du mir noch bitte kurz erkären, wie ich die einzelnen functions aufrufe?


Delete - Fr 23.09.16 22:11

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - So 02.10.16 22:19

Soooo. Da ich die Abfrage, ob die Passwörter und die Emails übereinstimmen, nun per JavaScript gemacht habe und damit den HTML-Tag <form method="post"> gelöscht habe, weiß ich nicht, wie man jetzt die Daten der PHP Datei auf dem Server übergibt. Kann man das irgendwie so machen, dass HTML wartet bis JavaScript alles ausgewertet hat und dann (wenn alles korrekt ist), eine POST request zu dem Server stellt?


Palladin007 - So 02.10.16 23:09

HTML wartet nicht, HTML tut garnichts, es beschreibt nur, wie die Website aussehen soll.

Wenn der Benutzer eine Eingabe tätigt, würde ich jedes mal 200ms warten.
Bei jedem erneuten Tastendruck wird das unterbrochen und es wartet wieder 200ms.
Wenn die 200ms ohne Unterbrechnung durch gelaufen sind, prüfst Du, ob alle Daten eingegeben wurde und schickst dann den POST-Request an den Server.

Und ich würde trotzdem eine form verwenden, die macht das Senden von einem POST-Request per JavaScript schlicht einfacher.
Jede einzelne Antwort zu der Frage [http://stackoverflow.com/questions/133925/javascript-post-request-like-a-form-submit], wie man einen POST-Request per JavaSCript sendet, baut intern eine Form auf und macht ein submit.
Du lässt dann eben den Submit-Button weg und machst das per JavaScript.


Csharp-programmierer - Mo 03.10.16 12:07

So ganz verstehe ich das nicht. Ich habe das jetzt mal zusammengestellt:

HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
<form action="registration.php" method="post">
      <table>
         <tr>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="text" placeholder="Benutzername eingeben" name="username" id="username" required></input></td>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="text" placeholder="Geburtsdatum eingeben" name="geburtsdatum" id="geburtsdatum" required></input></td>
         </tr>
         <tr>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px"  type="text" placeholder="Vorname" name="vorname" id="vorname" required></input></td>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="text" placeholder="Nachname" name="lastname" id="name" reqired></input></td>
         </tr>
        <tr>
        <td> </td>
        </tr>
         <tr>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="email" id="email1" placeholder="E-Mail eingeben" name="email_one" required></input></td>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="email" id="email2" placeholder="E-Mail bestätigen" name="email_two" required></input></td>
         </tr>
         <tr>
        <td> </td>
         </tr>
        <tr>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="text" placeholder="Sicherheitsfrage" name="safequestion" id="question" required></input></td>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="text" placeholder="Antwort" name="question_answer" id="answer" reqired></input></td>
        </tr>
         <tr>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="password" id="pass1" placeholder="Passwort" name="password1" required></input></td>
          <td><input class="wsite-form-input wsite-input wsite-input-width-370px" type="password"  id="pass2" placeholder="Passwort bestätigen" name="password2" required></input></td>
        </tr>
         <tr>
          <td><font color="white"><input type="checkbox" id="cb_agb" name="agb" onclick="DisableButton()">   Ich habe die <a style="color:#ffffff;" href="">AGB's</a> gelesen</input></font></td>
         </tr>
      <tr>
          <td> </td>
      </tr>
         <tr>
          <td><a class="blue-button" onkeydown="CheckAllData()"><span>Absenden</span></a></td>
         </tr>
  </form>



JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
function CheckAllData() {
        alert("hier");
      var pas1 = document.getElementById("pass1");
      var pas2 = document.getElementById("pass2");
      var username = document.getElementById("username");
      var sicherheitsfrage = document.getElementById("question");
      var sicherantwort = document.getElementById("answer");
      var name = document.getElementById("name");
      var vorname = document.getElementById("vorname");
      var geburtsdatum = document.getElementById("geburtsdatum");
      var em1 = document.getElementById("email1");
      var em2 = document.getElementById("email2");
      var pass_correct = false;
      var email_correct = false;

      if (pas1.value != pas2.value) {
        document.getElementById("pass_error").innerHTML = "Die eingegebenen Passwörter stimmen nicht überein";
        document.getElementById("pass_error").style.color = "#FFFFFF";
        document.getElementById("message_block").style.backgroundColor = "#FA5858";
        pass_correct = false;
      } else {
        pass_correct = true;
        document.getElementById("pass_error").innerHTML = "";
      }

      if (em1.value != em2.value) {
        document.getElementById("email_error").innerHTML = "Die eingegebenen E-Mail Adressen stimmen nicht überein";
        document.getElementById("email_error").style.color = "#FFFFFF";
        document.getElementById("message_block").style.backgroundColor = "#FA5858";
        email_correct = false;
      } else {
        email_correct = true;
        document.getElementById("email_error").innerHTML = "";
      }
      if (pass_correct == true && email_correct == true) {
        if(pas1.value.length >= 6) {
          if(pas1.value != "" && pas2.value != "" && username.value != "" && sicherheitsfrage.value != "" && sicherantwort.value != "" && name.value != "" && vorname.value != "" && geburtsdatum.value != "" 

&& em1.value != "" && em2.value != "") {
            document.getElementById("pass_error").innerHTML = "";
            document.getElementById("best_msg").innerHTML = "Alle Daten sind korrekt. Es wird nun die Verbindung zu den Mainlysoft SQL-Servern hergestellt.";
            document.getElementById("email_error").innerHTML = "";
            document.getElementById("best_msg").style.color = "#FFFFFF";
            document.getElementById("message_block").style.backgroundColor = "#A9F5BC";
          } else {
            document.getElementById("pass_error").innerHTML = "Bitte füllen Sie alle Eingabefelder aus.";
            document.getElementById("message_block").style.backgroundColor = "#FA5858";
            document.getElementById("email_error").innerHTML = "";
          }
        } else {
          document.getElementById("pass_error").innerHTML = "Das Passwort muss mindestens 6 Zeichen lang sein.";
          document.getElementById("pass_error").style.color = "#FFFFFF";
          document.getElementById("message_block").style.backgroundColor = "#FA5858";
        }
      }


Aber mit dem Timer verstehe ich das nicht :(


hydemarie - Mo 03.10.16 12:14

Was genau verstehst du nicht?

(Übrigens: Typo. "reqired". ;))


Csharp-programmierer - Mo 03.10.16 12:29

Vielen Dank ;)

Ich habe ja jetzt alle Elemente in die Form gepackt und es wird weiter der JavaScript Code ausgeführt. Also soll der PC nach jedem Tastendruck (alle Textboxen) 200ms warten? Und dann soll er das überprüfen? Wenn ja, wo muss ich dann den Timer positionieren?


hydemarie - Mo 03.10.16 12:32

Musst du doch wissen, ob er das soll. Wenn ja: setTimeout() oben in die Funktion einfügen und dabei eine Variable setzen, die jedes Mal geprüft wird, um nicht jedes Mal einen neuen Timer zu starten. :)


Csharp-programmierer - Mo 03.10.16 12:46


JavaScript-Quelltext
1:
2:
3:
function CheckDataForTime() {
      variable = setTimeout(CheckAllData(), 200));
    }


Das sind ja jetzt 200ms und die Funktion CheckAllData wird aufgerufen. Dabei wird auch eine Variable (Boolean?) gesetzt. Muss ich dann jetzt jedes Eingabefeld mit dem TextChanged-Event und der CheckDataFortime() Funktion verknüpfen?


Delete - Mo 03.10.16 13:14

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Mo 03.10.16 13:54

Upps. Naja ich habe jetzt einen Button zum Überprüfen und einen zum Absenden. Wenn ich die Daten an den Server schicke, bekomme ich folgende Fehlermeldung: Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 107
Username and Email exists

Das ist der verkürzte PHP Code:

PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
if($sql_query)

    {
  

      $username = $_POST['username'];
  
  

      $geburtsdatum = $_POST['geburtsdatum'];
  


      $vorname = $_POST['vorname'];
  
  

      $nachname = $_POST['lastname'];
  
  

      $chem1 = $_POST['email_one'];
  

      $chem2 = $_POST['email_two'];  


      $safequestion = $_POST['safequestion'];
  
  

      $question_answer = $_POST['question_answer'];
  


      $chpass1 = $_POST['password1'];

  
  
      $chpass2 = $_POST['password2'];

  

      if($chpass1 === $chpass2
      {  
        $password = true;
  
      } 
      else 
      {
      
        echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter 

stimmen nicht überein.</div>"
;

      }

    

      if($chem1 === $chem2)
      {
    
        $em = true;
    
      } 
      else 
      {
    
        echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen 

nicht überein.</div>"
;
    
      }

    

      if($password == true && $em == true) 
      {
  
        $search = mysqli_query($sql_query," SELECT `username`,`email` FROM `Users` FROM 

WHERE `username`='
$username' AND `email`='$email'");

        $row = mysqli_fetch_row($search);

        if($row[0]==$username ||$row[1]==$email)

        {
          
echo "Username and Email exists ";
      
  }

        else

        {

  
  
        $mysqli = mysqli_query($sql_query,"INSERT INTO Users (`email`, `username`, 

`password`, `sicherheitsfrage`, `antwort`, `name`, `vorname`, `acc_bestätigt`, `geburtsdatum`)
 
                      VALUES ('
$em1', 

'
$username', '$chpass1', '$safequestion', '$question_answer', '$nachname', '$vorname', 'false', 

'
$geburtsdatum')");



  
          if ($mysqli)
          {
        
    echo "New record created successfully";
  

  
        }
          else
          {
      
    
  
          echo "Error HERE: " . $sql_query . "<br>" . $conn->error;
  
  
        }

        }
      }

  
    } 
    else 
    {
  
      echo "<div class='alert alert-danger'>Die Daten konnten nicht in die Datenbank eingetragen 

werden.</div>"
;
    
    }


hydemarie - Mo 03.10.16 13:57

Prima, dass du den Code so verkürzt, dass es uns unmöglich ist zu wissen, was in Zeile 107 steht.


Csharp-programmierer - Mo 03.10.16 14:04

Upps.
$row = mysqli_fetch_row($search); Ist der Code, der in der Zeile steht


hydemarie - Mo 03.10.16 14:12

Dann hat $search kein Ergebnis zurückgegeben. Das prüfst du ja auch nicht.


Christian S. - Mo 03.10.16 14:29

Hallo,

Du hast in Deinem SQL-Statement zweimal "FROM" drin, da stimmt was nicht. Du solltest Dir außerdem ganz dringend überlegen, was passiert, wenn jemand einen Benutzernamen mit Hochkomma eingibt! (Stichwort: SQL Injection) Oder, wie bereits woanders gepostet, als Comic: https://xkcd.com/327/ mit Erklärung https://www.explainxkcd.com/wiki/index.php/Little_Bobby_Tables

Grüße
Christian


Ralf Jansen - Mo 03.10.16 14:29


SQL-Anweisung
1:
SELECT `username`,`email` FROM `Users` FROM WHERE `username`='$username' AND `email`='$email'                    


Die Probleme in diesem Thread beruhen hauptsächlich auf irgendwas zwischen Rechtschreibschwäche und Schlampigkeit :cry: Gibt es für PHP keine IDE die sowas wie Syntax- und oder Rechtschreibprüfung beinhaltet (am besten auch für embedded SQL) ?


hydemarie - Mo 03.10.16 14:33

Doch, PhpStorm zum Beispiel. Aber ich kann nicht empfehlen, ein IDE als Ersatz für wesentliches Codeverständnis zu benutzen. Das macht eher neue Probleme als sie zu lösen.


Csharp-programmierer - Mo 03.10.16 14:54

@Ralf Jansen
FROM WHERE... Ich habe aus Verzweiflung irgendjemanden auf Instagram angeschrieben, der PHP kann. Von Ihm habe ich auch diesen Code. Also muss das FROM WHERE durch WHERE geändert werden?

@hydemarie
Ja. Die Datenbank ist im Moment noch leer. Ich werde mich da jetzt noch einmal ranklotzen.


hydemarie - Mo 03.10.16 14:58

Instagram, das bekannte soziale Netzwerk für Technikaffine. Hinterher kommt sowas dabei raus. "FROM WHERE" ist natürlich Unsinn.


Csharp-programmierer - Mo 03.10.16 15:01

Das habe ich jetzt geändert. Jetzt kommt nur noch die Meldung, dass Username und Email bereits existieren. Wie kann ich mir die row-Variable vorstellen? Hängen die Zahlen in den eckigen Klammern von der Tabellenstruktur ab?


hydemarie - Mo 03.10.16 15:13

Ja. Zum Verständnis wäre mysqli_fetch_assoc() deshalb vermutlich besser geeignet.


Csharp-programmierer - Mo 03.10.16 16:10

Naja er meinte mit row sei besser. Ich habe nun auch die Werte in den eckigen Klammer geändert.

1


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
$search = mysqli_query($sql_query," SELECT `username`,`email` FROM `Users` WHERE `username`='$username' AND `email`='$email'");

        $row = mysqli_fetch_row($search);

        if($row[3]==$username ||$row[2]==$email)

        {
          
echo "Username and Email exists ";
      
  }

        else

        {

  
  
        $mysqli = mysqli_query($sql_query,"INSERT INTO Users (`email`, `username`, `password`, `sicherheitsfrage`, `antwort`, `name`, `vorname`, `acc_bestätigt`, `geburtsdatum`)
 
                      VALUES ('
$chem1', '$username', '$chpass1', '$safequestion', '$question_answer', '$nachname', '$vorname', 'false', '$geburtsdatum')");



  
          if ($mysqli)
          {
        
    echo "New record created successfully";
  

  
        }
          else
          {
      
    
  
          echo "Error HERE: " . $sql_query . "<br>" . $conn->error;
  
  
        }

        }


Ralf Jansen - Mo 03.10.16 18:38

Aus der Doku zu mysqli_fetch_row
Zitat:
Fetches one row of data from the result set and returns it as an enumerated array, where each column is stored in an array offset starting from 0 (zero). Each subsequent call to this function will return the next row within the result set, or NULL if there are no more rows.


Zitat:
Naja er meinte mit row sei besser. Ich habe nun auch die Werte in den eckigen Klammer geändert.

Warum? Versuche dir Try&Error Programmierung abzugewöhnen. Ja manchmal muss man probieren aber die Doku lesen ist meist hilfreicher.

Das was mysqli_fetch_row liefert ist ein Array. Und der Index bezieht sich auf das was dein SQL abfragt. Ein Sql bezieht sich möglicherweise auf viele Tabellen. Die Reihenfolge in der Quelltabelle ist dabei völlig egal. Denn wen ich eine Ergebnis aus 3 Tabellen hole könnte ich dreimal eine erste Spalte haben. Macht also keinen Sinn. Der Index bezieht sich einfach auf die Liste der Spalten so wie du sie im SQL angegeben hast. Da PHP (laut Doku) 0-basiert arbeitet, laut Doku, ist also die erste Spalte bei dir (username) Index 0 und die zweite Spalte (email) Index 1. Es ist aber auch furchtbar egal welchen Index die Spalten haben für das was du da versuchst. Du gibst doch username und email im Sql mit. Also wenn du ein Ergebnis bekommst weißt du eh was in Username und Email steht denn das war dein Filterkriterium im Sql Statement. Du musst nur wissen ob du Ergebnis bekommst oder keins. Und wiederum, laut Doku, wenn es kein Ergebnis gibt ist das Ergebnis NULL. Du musst also nur prüfen ob row NULL ist oder nicht egal was in den Spalten steht die aus der Abfrage zurückkommen.


Csharp-programmierer - Mo 03.10.16 19:28

So jetzt habe ich den Code mal überarbeitet


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
if($sql_query)
    {
      $username = $_POST['username'];
      $geburtsdatum = $_POST['geburtsdatum'];
      $vorname = $_POST['vorname'];
      $nachname = $_POST['lastname'];
      $chem1 = $_POST['email_one'];
      $chem2 = $_POST['email_two'];  
      $safequestion = $_POST['safequestion'];
      $question_answer = $_POST['question_answer'];
      $chpass1 = $_POST['password1'];
      $chpass2 = $_POST['password2'];

      if($chpass1 === $chpass2
      {  
        $password = true;
      } 
      else 
      {
        echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
      }

      if($chem1 === $chem2)
      {
        $em = true;
      } 
      else 
      {
        echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
      }
      
      if($password == true && $em == true) 
      {
        $search = mysqli_query($sql_query," SELECT `username`,`email` FROM `Users` WHERE `username`='$username' AND `email`='$chem1'");
        $row = mysqli_fetch_row($search);

        if($row[0]==$username || $row[1]==$chem1)
        {
          echo "Username and Email exists ";
        }
        else
        {
        $mysqli = mysqli_query($sql_query,"INSERT INTO Users (`email`, `username`, `password`, `sicherheitsfrage`, `antwort`, `name`, `vorname`, `acc_bestätigt`, `geburtsdatum`)
                      VALUES ('
$chem1', '$username', '$chpass1', '$safequestion', '$question_answer', '$nachname', '$vorname', 'false', '$geburtsdatum')");
  
          if ($mysqli)
          {
            echo "New record created successfully";
          }
          else
          {
            echo "HALLO ERROR XD";
          }
        }
      }
    } 
    else 
    {
      echo "<div class='alert alert-danger'>Die Daten konnten nicht in die Datenbank eingetragen werden.</div>";
    }


Jetzt kommt immer der Fehler: HALLO ERROR XD


Christian S. - Mo 03.10.16 19:36

Schau Dir mal an, welche Typen die Datenbankspalten haben und welche Daten Du versuchst, dort einzutragen. Wenn eine SQL-Anweisung nicht funktioniert, kannst Du auch einfach mal versuchen, sie in PhpMyAdmin direkt abzusetzen, das Ergebnis ist dann meist recht informativ.

Was Trial & Error angeht, kann ich mich Ralf nur anschließen. Genauer gesagt neige ich gerade dazu, diesen Thread zu schließen, wenn Du nicht sehr bald zeigst, dass Du ernsthaft versuchst, Dir Grundlagen anzueignen.


Csharp-programmierer - Mo 03.10.16 20:38

Okay, also ich habe jetzt bemerkt, dass mein "boolean" in der Datenbank letzendlich nur eine Zahl war. Jetzt habe ich alle Daten außer ID in dem Datentyp varchar. Auch den acc_bestätigt habe ich jetzt geändert.

sql


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
if($sql_query)
    {
      $username = $_POST['username'];
      $geburtsdatum = $_POST['geburtsdatum'];
      $vorname = $_POST['vorname'];
      $nachname = $_POST['lastname'];
      $chem1 = $_POST['email_one'];
      $chem2 = $_POST['email_two'];  
      $safequestion = $_POST['safequestion'];
      $question_answer = $_POST['question_answer'];
      $chpass1 = $_POST['password1'];
      $chpass2 = $_POST['password2'];

      if($chpass1 === $chpass2
      {  
        $password = true;
      } 
      else 
      {
        echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
      }

      if($chem1 === $chem2)
      {
        $em = true;
      } 
      else 
      {
        echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
      }
      
      if($password == true && $em == true) 
      {
        $search = mysqli_query($sql_query," SELECT `username`,`email` FROM `Users` WHERE `username`='$username' AND `email`='$chem1'");
        $row = mysqli_fetch_row($search);

        if($row[0]==$username || $row[1]==$chem1)
        {
          echo "Username and Email exists ";
        }
        else
        {
          $b="false";
          $mysqli = mysqli_query($sql_query,"INSERT INTO Users (`email`, `username`, `password`, `sicherheitsfrage`, `antwort`, `name`, `vorname`, `accbestatigt`, `geburtsdatum`)
                      VALUES ('
$chem1', '$username', '$chpass1', '$safequestion', '$question_answer', '$nachname', '$vorname', '$b', '$geburtsdatum')");
  
          if ($mysqli)
          {
            echo "New record created successfully";
          }
          else
          {
            echo "HALLO ERROR XD";
          }
        }
      }
    } 
    else 
    {
      echo "<div class='alert alert-danger'>Die Daten konnten nicht in die Datenbank eingetragen werden.</div>";
    }


Nun habe ich den Wert false per Variable in die Datenbank gepackt, aber es funktioniert immer noch nicht. Ich weiß langsam nicht mehr, was da noch falsch sein kann.


PS: Der Fehler ist jetzt weg. Da war t bei accbestatig. Nun funktioniert es :oops: :oops: :autsch:


Csharp-programmierer - Di 04.10.16 11:02

Soo. Jetzt habe ich mich nochmal über SQL Injections informiert. Vielen Dank, dass ihr mich darauf aufmerksam gemacht habt. Ich habe jetzt versucht, diesen Code noch ein wenig sicherer zu machen (z.B. gegen SQL Injections und bei einem Fehler soll die Verbindung abgebrochen werden).


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
if($sql_query)
    {
      $username = mysql_real_escape_string($_POST['username']);
      $geburtsdatum = mysql_real_escape_string($_POST['geburtsdatum']);
      $vorname = mysql_real_escape_string($_POST['vorname']);
      $nachname = mysql_real_escape_string($_POST['lastname']);
      $chem1 = mysql_real_escape_string($_POST['email_one']);
      $chem2 = mysql_real_escape_string($_POST['email_two']);  
      $safequestion = mysql_real_escape_string($_POST['safequestion']);
      $question_answer = mysql_real_escape_string($_POST['question_answer']);
      $chpass1 = mysql_real_escape_string($_POST['password1']);
      $chpass2 = mysql_real_escape_string($_POST['password2']);

      if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "")
      {
        if($chpass1 === $chpass2
        {  
          $password = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
        }

        if($chem1 === $chem2)
        {
          $em = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
        }
      
        if($password == true && $em == true) 
        {
          $search = mysqli_query($sql_query," SELECT `username`,`email` FROM `Users` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b="false";
            $mysqli = mysqli_query($sql_query,"INSERT INTO Users (`email`, `username`, `password`, `sicherheitsfrage`, `antwort`, `name`, `vorname`, `accbestatig`, `geburtsdatum`)
                      VALUES ('
$chem1', '$username', '$chpass1', '$safequestion', '$question_answer', '$nachname', '$vorname', '$b', '$geburtsdatum')");
  
            if ($mysqli)
            {
              echo "Alle Daten wurden erfolgreich in die Datenbank eingetragen.";
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
      } 
      else 
      {
        echo "Füllen Sie bitte alle Datenfelder aus.";
      }
    }
    else
    {
      die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.');
    }



Jetzt werden ja alle potentiellen Daten, die in die Datenbank geschrieben werden, gefiltert und gefiltert in die Datenbank eingetragen, oder? Kann ich diesen Code jetzt so unbedenklich freigeben?
Die Methode mit dem mysql_real_escape_string() habe ich auf YouTube in einem Tutorial gesehen. Wenn ich diesen Code bei mir so ausführe, erscheint diese Fehlermeldung: Warning: mysql_real_escape_string(): Access denied for user ''@'localhost' (using password: NO) in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 10

Aber alle Authentifizierungsdaten sind exakt die, die ich gestern auch verwendet habe.


Delete - Di 04.10.16 12:01

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Di 04.10.16 12:05

Eine Vermischung von mysql_ und mysqli_ würde ich tunlichst zu vermeiden raten.


Palladin007 - Di 04.10.16 14:36

Warum nutzt Du keine Parameter?
So kümmert sich die msqli-Library um SQL Injection und um alles andere gleich mit.
In meinem Code, den ich dir ganz zu Beginn gegeben habe, habe ich das genutzt.

Zitat:
Die Gültigkeit der Daten bzw. ihre Vollständigkeit, richtet sich an der Eingabe des Nutzers. Diese Überprüfung sollte mit Hilfe von JavaScript erfolgen, im Zusammenspiel mit Ereignissen von input-Feldern aus dem HTML.


Ich würde dennoch auf beiden Seiten gegenprüfen und eine vorzeigbare Fehlermeldung generieren.

Klar, JavaScript ist da schöner, aber wenn ein User das ausgeschaltet hat, sollte der PHP-Code den Fehler ebenfalls entsprechend behandeln.

Ich würde dafür für die Login-Seite - die ja ebenfalls via PHP generiert werden kann - entsprechende GET_Parameter anbieten, sodass Du im Login-PHP-Code diese Seite aufrufen und ein Flag setzen kannst, dass die Fehler-Meldung angezeigt werden soll. In die POST-Variable sollten dann wieder alle zuvor eingegebenen Daten rein.

Wenn der Nutzer dann ohne JavaScript falsche Daten eingibt, dann lädt die Seite neu, alle zuvor eingegeben Daten werden eingetragen und es wird eine Meldung angezeigt, dass diese falsch sind.


Delete - Di 04.10.16 16:43

- Nachträglich durch die Entwickler-Ecke gelöscht -


hydemarie - Di 04.10.16 16:54

Es ist ausgesprochen rücksichtslos, Javascript beim Besucher zwingend vorauszusetzen, wenn dies aus technischen Gründen nicht unbedingt nötig (und das ist es nie) ist.


Csharp-programmierer - Do 06.10.16 09:17

Hallo Forum, ich wollte mich nochmal entschuldigen, dass ich in diesem Thread sehr vorschnell und unüberlegt gehandelt habe. Ich wollte nur, dass alles funktioniert. Jetzt hapert es nur noch an einer kleinen Sache. Ich habe mir den Code gestern nochmal angesehen und ihn jetzt auch verstanden.

Zu dem kleinen Problem:
In der PHP Datei, wo die Daten in die Datenbank geschrieben werden, möchte ich, dass dem User eine Email mit einem Bestätigungslink gesendet wird. Das ist schonmal mein Code:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
if ($mysqli)
            {
              $nachricht = "Vielen Dank für die Registrierung in dem Mainlysoft netzwerk.";
              $subject = "Anmeldebestätigung";
              mail($chem1$subject$nachricht);
              
              header("Location: reg_succes.html");
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }


Erst soll die Email versendet werden und danach soll eine andere Website geöffnet werden. Wenn ich dies so aber mache, bleibt der Browser bei der PHP Datei stehen, er zeigt nichts an und leitet auch nicht weiter. Eine Email bekomme ich auch nicht. Woran liegt es jetzt noch?


Palladin007 - Do 06.10.16 09:22

Warum mail nicht klappt, kann ich nicht sagen.

Für den Redirect, schau mal hier:
http://stackoverflow.com/questions/768431/how-to-make-a-redirect-in-php
Da werden auch ein paar Besonderheiten angesprochen, die Du beachten musst.


Csharp-programmierer - Do 06.10.16 14:22

Oder kann es sein, dass sich ein anderer Fehler eingeschlichen hat? Wenn ich mich registrieren kommt immer dieser Fehler: [echo "Ueberpruefen Sie alle Daten";]


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
if($sql_query)
    {
      $username = mysqli_real_escape_string($sql_query$_POST['username']);
      $geburtsdatum = mysqli_real_escape_string($sql_query$_POST['geburtsdatum']);
      $vorname = mysqli_real_escape_string($sql_query$_POST['vorname']);
      $nachname = mysqli_real_escape_string($sql_query$_POST['lastname']);
      $chem1 = mysqli_real_escape_string($sql_query$_POST['email_one']);
      $chem2 = mysqli_real_escape_string($sql_query$_POST['email_two']);  
      $safequestion = mysqli_real_escape_string($sql_query$_POST['safequestion']);
      $question_answer = mysqli_real_escape_string($sql_query$_POST['question_answer']);
      $chpass1 = mysqli_real_escape_string($sql_query$_POST['password1']);
      $chpass2 = mysqli_real_escape_string($sql_query$_POST['password2']);
      $gender = mysqli_real_escape_string($sql_query$_POST['gender']);
      $language = mysqli_real_escape_string($sql_query$_POST['language']);

      $checked_password = false;
      $checked_email = false;
      $checked_agb = false;
      
      if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "" && language != "" && gender != "")
      {
        if($chpass1 == $chpass2
        {  
          $password = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
          $checked_password = false;
        }
        
        
        if(isset($_POST['agb']))
        {
          $checked_agb = true;
        }
        else 
        {
          echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>";
          $checked_agb = false;
        }

        
        if($chem1 == $chem2)
        {
          $checked_email = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
          $checked_email = false;
        }
      
        if($checked_password === true && $checked_email === true && $checked_agb === true) 
        {
          $search = mysqli_query($sql_query,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b = "false";
            $regDatum = date(Y-M-D);
            $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]);
            $anzMeld = "0";
            $emBest = "false";
            
            $mysqli = mysqli_query($sql_query"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");
  
            if ($mysqli)
            {
              header("Location: reg_succes.html");
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
        else
        {
          echo "Ueberpruefen Sie alle Daten";
        }
      } 
      else 
      {
        echo "Füllen Sie bitte alle Datenfelder aus.";
      }
    }
    else
    {
      die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.');
    }


1

Kann es vielleicht damit zusammenhängen, dass die Email nicht gesendet wird, aber ich finde den Fehler wirklich nicht :(


hydemarie - Do 06.10.16 14:28

Hast du kein error_log?


Csharp-programmierer - Do 06.10.16 14:30

Meinst du, wie viele fehlgeschlagene Loginversuche der User hatte?


hydemarie - Do 06.10.16 14:48

Nein, ich meine ein PHP-Fehlerprotokoll. Da würde dann auch sowas wie "mail() kaputt, weil..." drinstehen.


Csharp-programmierer - Do 06.10.16 15:05

Stimmt. An sich ist es ja eine gute Idee, aber trotzdem muss man ja das Problem lösen, dass die Daten wieder in die Datenbank geschrieben werden... :(


Csharp-programmierer - Do 06.10.16 20:40

Soo Leute. Ich habe jetzt erkannt, dass der Code nicht ausgeführt wird, weil irgendetwas mit der IF-Abfrage nicht stimmt.

Zur Erklärung: auf dem HTML Formular befindet sich eine CheckBox (für die AGB) und die Eingabefelder für die Daten. In der PHP Datei soll nun abgefragt werden, ob die Emails gleich sind, ob die Passwörter gleich sind und ob die CheckBox gecheckt ist. Dann soll erst ein Eintrag in die Datenbank vorgenommen werden. Soweit so gut. Ich habe mal diesen Code:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
if($sql_query)
    {
      $username = mysqli_real_escape_string($sql_query$_POST['username']);
      $geburtsdatum = mysqli_real_escape_string($sql_query$_POST['geburtsdatum']);
      $vorname = mysqli_real_escape_string($sql_query$_POST['vorname']);
      $nachname = mysqli_real_escape_string($sql_query$_POST['lastname']);
      $chem1 = mysqli_real_escape_string($sql_query$_POST['email_one']);
      $chem2 = mysqli_real_escape_string($sql_query$_POST['email_two']);  
      $safequestion = mysqli_real_escape_string($sql_query$_POST['safequestion']);
      $question_answer = mysqli_real_escape_string($sql_query$_POST['question_answer']);
      $chpass1 = mysqli_real_escape_string($sql_query$_POST['password1']);
      $chpass2 = mysqli_real_escape_string($sql_query$_POST['password2']);
      $gender = mysqli_real_escape_string($sql_query$_POST['gender']);
      $language = mysqli_real_escape_string($sql_query$_POST['language']);
      
      if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "" && language != "" && gender != "")
      {
        if($chpass1 == $chpass2
        {  
          $password = 'true';
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
          $checked_password = 'false';
        }
        
        
        if(isset($_POST['agb']))
        {
          $checked_agb = true;
        }
        else 
        {
          echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>";
          $checked_agb = false;
        }

        
        if($chem1 == $chem2)
        {
          $checked_email = 'true';
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
          $checked_email = 'false';
        }
        
        if($checked_agb == 'true' && $checked_email == 'true' && $checked_password == 'true')
        {
          $search = mysqli_query($sql_query,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b = "false";
            $regDatum = date(Y-M-D);
            $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]);
            $anzMeld = "0";
            $emBest = "false";
            
            $mysqli = mysqli_query($sql_query"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");
  
            if ($mysqli)
            {
              $mail = "Eine Email";
              mail($chem1'hallo''tscgüss');
              
              header("Location: reg_succes.html");
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
        else
        {
          echo "Fehler";
        }
      } 
      else 
      {
        echo "Füllen Sie bitte alle Datenfelder aus.";
      }
    }
    else
    {
      die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.');
    }


Aber egal was ich mache, es wird mit der If- Agfrage immer "FEHLER" geechoed. Aber es soll ja geprüft werden, ob die übereinstimmen. Woran hapert es?


FinnO - Do 06.10.16 21:00

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:

PHP-Quelltext
1:
if($checked_agb == 'true' && $checked_email == 'true' && $checked_password == 'true')                    


gewöhne dir bitte Vergleiche der Form $sth == 'true' oder ähnliches ab. Das macht in wirklich keinerlei Hinsicht Sinn. Du vergleichst deine Variable mit dem Stringwert 'true', das funktioniert in Sprachen wie PHP oder JavaScript nur an Dienstagen, weil der ==-Operator die Typen coerciert [http://stackoverflow.com/questions/19915688/what-exactly-is-type-coercion-in-javascript].

Außerdem hat dieser Vergleich logisch wenig nutzen. Eine If-Abfrage erwartet einen booleschen Wert als "Eingabe":


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (true) {
  echo "wird immer ausgeführt."
}

if (false) {
  echo "wird nie ausgeführt." 
}


Ein Statement der Form:

PHP-Quelltext
1:
$var && $var2                    

evaluiert zu einem booleschen Wert und ist daher mehr als ausreichend für eine If-Abfrage.

Ich möchte eigentlich gar nicht im Detail verstehen, was PHP genau macht, wenn du die o.g. Abfrage ausführst, aber wenn da jemals etwas vernünftiges herauskommt, wäre ich schon leicht verwundert.

Gruß
Finn


Christian S. - Do 06.10.16 21:02

Zusätzlich zu dem, was FinnO schreibt: Es gibt keinen Grund, Wahrheitswerte als String zu speichern, für sowas sind bool'sche Werte da.


Csharp-programmierer - Do 06.10.16 21:09


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
if($chpass1 == $chpass2
        {  
          $password = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
          $checked_password = false;
        }
        
        
        if(isset($_POST['agb']))
        {
          $checked_agb = true;
        }
        else 
        {
          echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>";
          $checked_agb = false;
        }

        
        if($chem1 == $chem2)
        {
          $checked_email = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
          $checked_email = false;
        }
        
        if($checked_agb && $checked_email && $checked_password)
        {
          $search = mysqli_query($sql_query,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b = "false";
            $regDatum = date(Y-M-D);
            $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]);
            $anzMeld = "0";
            $emBest = "false";
            
            $mysqli = mysqli_query($sql_query"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");
  
            if ($mysqli)
            {
              $mail = "Eine Email";
              mail($chem1'hallo''tscgüss');
              
              header("Location: reg_succes.html");
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
        else
        {
          echo "Fehler";
        }
      }


Soo. Jetzt habe ich alle Variablen in booleans umgewandelt, aber es kommt immer noch "Fehler" als echo :oops:


Christian S. - Do 06.10.16 21:17

Zeile 3


Csharp-programmierer - Fr 07.10.16 13:31

Upps, dass ist echt peinlich :oops:
Jetzt funktioniert es. Auf die Email mit dem Bestätigungslink wird jetzt abgesendet.

Dazu hatte ich die Idee, einen Link zu erstellen, der eine PHP Datei anfunkt und dieser über die $_GET Variable eine ID mitschickt. In dieser PHP Datei soll denn der Datensatz geändert werden, der die ID hat. Dazu habe ich diesen Lösungsansatz:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
if ($mysqli)
            {
              function getUsetId($email)
              {[color=red]
                $result=  mysqli_query($sql_query"SELECT ID FROM MainlysoftBenutzer WHERE `email`='$email'");
                $row = mysqli_fetch_row($result);
                $id = $row['id'];[/color]
                return $id;
              }                     

              $calc_id = getUsetId($chem1);
              $to = $chem1;
              $subject = 'Subject...';
              
              $message = '<html><body>';
              $message .= '<a href="http://www.mainlysoft.com/VerifyUser.php?ID=$calc_id">Bestätigungslink</a><br><br>';
              $message .= '<label>Mit freundlichen Grüßen,</label><br>';
              $message .= '<label>Das Mainlysoft Team</label>';
              $message .= '</body></html>';
              
              $em_res = mail($to$subject$message$headers);
              if ($em_res)
              {
                [color=red]header("Location: reg_succes.html");[/color]
              }
              else
              {
                echo "Fehler beim Senden der Email";
              }
            }



PHP-Quelltext
1:
2:
3:
4:
<?php
  $ID = $_GET['Id'];
  echo $ID;
?>


Aber wenn ich diesen Script nun so ausführe, bekomme ich diesen Fehler: Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 82

Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, null given in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 83

Warning: Cannot modify header information - headers already sent by (output started at /var/www/web23442894/html/Mainlysoft/InsertData.php:82) in /var/www/web23442894/html/Mainlysoft/InsertData.php on line 111


Delete - Fr 07.10.16 15:30

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Fr 07.10.16 15:50

Ich verstehe es nicht so recht, da es in diesem Code eine Funktion gibt, die genau das selbe nur mit anderen Werten. Anscheinend fehlt irgendein Argument, aber ich weiß nicht welches :oops:


Delete - Fr 07.10.16 17:01

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Fr 07.10.16 17:11

Naja das wusste ich ja, dass das erste Argument die Connection sein muss.

PHP-Quelltext
1:
$conn = mysqli_connect($servername$username,$password,$database);                    


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
if($checked_agb && $checked_email && $checked_password)
        {
          $search = mysqli_query($conn,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b = "false";
            $regDatum = date(Y-M-D);
            $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]);
            $anzMeld = "0";
            $emBest = "false";
            
            $mysqli = mysqli_query($conn"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");
  
            if ($mysqli)
            {
              function getUsetId($email)
              {
                $search = mysqli_query($conn"SELECT ID FROM MainlysoftBenutzer WHERE `email`='$email'");
                $row = mysqli_fetch_row($search);
                $id = $row[0];
                return $id;
              }                     

              $calc_id = getUsetId($chem1);
              $to = $chem1;
              $subject = 'MS Network Registrierung';
              
              $em_res = mail($to$subject$message$headers);
              if ($em_res)
              {
                header("Location: reg_succes.html");
              }
              else
              {
                echo "Fehler beim Senden der Email";
              }
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
        else
        {
          echo "Fehler";
        }
      }


Das ist ja die Verbindung im ersten Argument. Aber es funktioniert nicht :oops:


Delete - Fr 07.10.16 17:56

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Fr 07.10.16 18:08

An der Serververbindung liegt es keinesfaalls.


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
$conn = mysqli_connect($servername$username,$password,$database);

    if($conn)
    {
      $username = mysqli_real_escape_string($conn$_POST['username']);
      $geburtsdatum = mysqli_real_escape_string($conn$_POST['geburtsdatum']);
      $vorname = mysqli_real_escape_string($conn$_POST['vorname']);
      $nachname = mysqli_real_escape_string($conn$_POST['lastname']);
      $chem1 = mysqli_real_escape_string($conn$_POST['email_one']);
      $chem2 = mysqli_real_escape_string($conn$_POST['email_two']);  
      $safequestion = mysqli_real_escape_string($conn$_POST['safequestion']);
      $question_answer = mysqli_real_escape_string($conn$_POST['question_answer']);
      $chpass1 = mysqli_real_escape_string($conn$_POST['password1']);
      $chpass2 = mysqli_real_escape_string($conn$_POST['password2']);
      $gender = mysqli_real_escape_string($conn$_POST['gender']);
      $language = mysqli_real_escape_string($conn$_POST['language']);
      
      if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "" && language != "" && gender != "")
      {
        if($chpass1 == $chpass2
        {  
          if(strlen($chpass1) >= 6)
          {
            $checked_password = true;
          }
          else
          {
            echo "Das Passwort muss mindestens 6 Zeichen enthalten.";
            $checked_password = false;
          }
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
          $checked_password = false;
        }
        
        
        if(isset($_POST['agb']))
        {
          $checked_agb = true;
        }
        else 
        {
          echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>";
          $checked_agb = false;
        }

        
        if($chem1 == $chem2)
        {
          $checked_email = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
          $checked_email = false;
        }
        
        if($checked_agb && $checked_email && $checked_password)
        {
          $search = mysqli_query($conn,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b = "false";
            $regDatum = date(Y-M-D);
            $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]);
            $anzMeld = "0";
            $emBest = "false";
            
            $mysqli = mysqli_query($conn"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");
  
            if ($mysqli)
            {
              function getUsetId($email)
              {
                $search = mysqli_query($conn"SELECT `ID` FROM `MainlysoftBenutzer` WHERE 'email'='$chem1'");
                $row = mysqli_fetch_row($search);
                $id = $row[0];
                return $id;
              }                     

              $calc_id = getUsetId($chem1);
              $to = $chem1;
              $subject = 'MS Network Registrierung';
              
              
              $em_res = mail($to$subject$message$headers);
              if ($em_res)
              {
                header("Location: reg_succes.html");
              }
              else
              {
                echo "Fehler beim Senden der Email";
              }
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
        else
        {
          echo "Fehler";
        }
      } 
      else 
      {
        echo "Füllen Sie bitte alle Datenfelder aus.";
      }
    }
    else
    {
      die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.');
    }


Das kurriose ist ja, dass die Daten trotzdem in die Datenbank geschrieben werden. Es wird auch verglichen, ob es den Username schon gibt. Aber ich weiß auch nicht, warum genau an der Funktion hapert, die die ID ausliest, ich meine die obigen Funktionen funktionieren ja auch tadellos :nixweiss:


Delete - Fr 07.10.16 19:10

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Fr 07.10.16 21:49

$server = "localhost";
$database = "usr_web23442894_1";

Die anderen beiden möchte ich aus Sicherheitsgründen nicht sagen. Aber ich verstehe nicht, warum erst die Daten rausgesucht werden, und dann nicht :(


Christian S. - Fr 07.10.16 21:58

Hallo,

wenn Du innerhalb einer Funktion eine Variable benutzen willst, die außerhalb zugewiesen wurde (wie $conn in getUserId), musst Du das mittels global $conn; bekannt machen.

Grüße
Christian


Csharp-programmierer - Fr 07.10.16 22:19

Ahh. Ich habe die Variable jetzt globalisiert:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
<?php
  $servername = "";
  $username = "";
  $password = "";
  $database = "";
  global $conn;
    $conn = mysqli_connect($servername$username,$password,$database);

    if($conn)
    {
      $username = mysqli_real_escape_string($conn$_POST['username']);
      $geburtsdatum = mysqli_real_escape_string($conn$_POST['geburtsdatum']);
      $vorname = mysqli_real_escape_string($conn$_POST['vorname']);
      $nachname = mysqli_real_escape_string($conn$_POST['lastname']);
      $chem1 = mysqli_real_escape_string($conn$_POST['email_one']);
      $chem2 = mysqli_real_escape_string($conn$_POST['email_two']);  
      $safequestion = mysqli_real_escape_string($conn$_POST['safequestion']);
      $question_answer = mysqli_real_escape_string($conn$_POST['question_answer']);
      $chpass1 = mysqli_real_escape_string($conn$_POST['password1']);
      $chpass2 = mysqli_real_escape_string($conn$_POST['password2']);
      $gender = mysqli_real_escape_string($conn$_POST['gender']);
      $language = mysqli_real_escape_string($conn$_POST['language']);
      
      if($username != "" && $geburtsdatum != "" && $vorname != "" && $chem1 != "" && $chem2 != "" && $safequestion != "" && $question_answer != "" && chpass1 != "" && $chpass2 != "" && language != "" && gender != "")
      {
        if($chpass1 == $chpass2
        {  
          if(strlen($chpass1) >= 6)
          {
            $checked_password = true;
          }
          else
          {
            echo "Das Passwort muss mindestens 6 Zeichen enthalten.";
            $checked_password = false;
          }
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen Passwörter stimmen nicht überein.</div>";
          $checked_password = false;
        }
        
        
        if(isset($_POST['agb']))
        {
          $checked_agb = true;
        }
        else 
        {
          echo "<div class='alert alert-danger'>Sie müssen die AGB lesen.</div>";
          $checked_agb = false;
        }

        
        if($chem1 == $chem2)
        {
          $checked_email = true;
        } 
        else 
        {
          echo "<div class='alert alert-danger'>Die von Ihnen eingegebenen E-Mails stimmen nicht überein.</div>";
          $checked_email = false;
        }
        
        if($checked_agb && $checked_email && $checked_password)
        {
          $search = mysqli_query($conn,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1)
          {
            echo "Username and Email exists ";
          }
          else
          {
            $b = "false";
            $regDatum = date(Y-M-D);
            $dbPass = password_hash("$chpass1", PASSWORD_DEFAULT, ['cost' => 12]);
            $anzMeld = "0";
            $emBest = "false";
            
            $mysqli = mysqli_query($conn"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$dbPass', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");
  
            if ($mysqli)
            {
              function getUsetId($email)
              {
                $search = mysqli_query($conn"SELECT `ID` FROM `MainlysoftBenutzer` WHERE `email`='$chem1'");
                $row = mysqli_fetch_row($search);
                $id = $row[0];
                return $id;
              }                     

              $calc_id = getUsetId($chem1);
              $to = $chem1;
              $subject = 'MS Network Registrierung';
              
              $headers = "From: " . strip_tags('yannicmair@mainlysoft.com') . "\r\n";
              
              $em_res = mail($to$subject$message$headers);
              if ($em_res)
              {
                header("Location: reg_succes.html");
              }
              else
              {
                echo "Fehler beim Senden der Email";
              }
            }
            else
            {
              echo "Ein Fehler ist aufgetreten. Die Daten konnten nicht in die Datenbank eingetragen werden. Bitte versuchen Sie es erneut.";
            }
          }
        }
        else
        {
          echo "Fehler";
        }
      } 
      else 
      {
        echo "Füllen Sie bitte alle Datenfelder aus.";
      }
    }
    else
    {
      die('Es konnte keine Verbindung zu dem Mainlysoft Registrationsserver hergestellt werden.');
    }
?>


Aber der Fehler kommt an der selben Stelle :(


Christian S. - Fr 07.10.16 22:38

Lies Dir bitte durch, was global tut und an welcher Stelle man es verwendet.


Csharp-programmierer - Fr 07.10.16 22:44

DANKE CHRISTIAN, DU BIST DER BESTE. Jetzt funktioniert es endlich :eyecrazy: :beer: :beer:


hydemarie - Fr 07.10.16 22:55

Hast du es denn verstanden? Und, was noch wichtiger ist, weißt du, wo du nächstes Mal nachgucken solltest, bevor du drauflosprogrammierst?


Csharp-programmierer - Sa 08.10.16 12:29

Ja, ich denke schon. Man definiert eine Variable $conn. Aber in functions muss man dann global $conn definieren. Aber vielen Dank für jeden einzelnen, der mit geholfen hat :)


Csharp-programmierer - Sa 08.10.16 22:58

Also soweit funktioniert jetzt erstmal alles. Jetzt ist nur noch das Problem, dass keine Usernames und Emails mehrmals vorkommen fürfen. Ich weiß nicht so recht, wie man die korrekte Abfrage dazu macht:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
$search = mysqli_query($conn,"SELECT `username`,`email` FROM `MainlysoftBenutzer` WHERE `username`='$username' AND `email`='$chem1'");
          $row = mysqli_fetch_row($search);

          if($row[1]==$chem1 && $row[0] == $username)
          {
            echo "Username and Email exists ";
          }


Ich habe das jetzt mal ausgeführt und ich habe 2 mal die selben Emails in der Datenbank. Aber das darf nicht sein. Wie kann man das beheben?


hydemarie - Sa 08.10.16 23:00

Zitat:
dass keine Usernames und Emails mehrmals vorkommen fürfen


Dann setz' die Spalten in der Datenbank doch auf Unique. ;-)


Csharp-programmierer - Sa 08.10.16 23:15

Danke! Ich habe email und username jetzt auf Unique gesetzt. Ich vertraue echt auf SQL, dass das alles sicher zu 100% funktioniert


Delete - So 09.10.16 06:00

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Mo 10.10.16 11:48

Soo. Also die Registrierung funktioniert jetzt einwandfrei. Jetzt habe ich mir auf YouTube ein Tutorial angesehen, wie man einen Login baut. Folgendes ist dabei herausgekommen:


PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
if($conn)
  {
    $benutzername = mysqli_real_escape_string($conn$_POST['user']);
    $passwort = mysqli_real_escape_string($conn$_POST['pass']);
    $loginButton = mysqli_real_escape_string($conn$_POST['login']);
    
    if ($loginButton)
    {
      if($benutzername AND $password)
      {
        mysqli_select_db($conn"MainlysoftBenutzer");
            
        $query = mysqli_query($conn"SELECT * FROM `MainlysoftBenutzer` WHERE `username`='$benutzername'");
        $num = mysqli_num_rows($query);
            
        if($num != 0)
        {
          WHILE ($row = mysqli_fetch_assoc($query))
          {
            $dbbenutzer = $row['username'];
            $dbpasswort = $row['passwort'];
          }
          
          if($dbbenutzer == $username AND $dbpasswort == $passwort)
          {
            echo "Login erfolgreich";
          }
          else
          {
            echo "Ihre Daten sind nicht korrekt. Bitte geben Sie richtige Daten ein.";
          }
        }
        else
        {
          echo "Der eingegebene Benutzer existiert nicht.";
        }
      }
      else
      {
        echo "Füllen Sie alle Datenfelder aus.";
      }
    }
  }


Wenn ich einen Benutzer eingebe, der gar nicht existiert, wird mir auch die Fehlermeldung angezeigt, dass dieser Benutzer nicht existiert. Wenn ich jedoch das richtige Passwort eingebe, bekomme ich die Meldung, dass die Daten nicht korrekt sind. Ich dachte erst, es liegt an password_hash. Das habe ich dann entfernt, also ist in der Datenbank jetzt das Passwort unverschlüsselt - aber die Benutzerdaten sind immernoch inkorrekt.

Zusammenfassung: Den Benutzer erkennt er, also ob es ihn gibt oder nicht. Bei dem Passwort jedoch nicht. Woran liegt das?


hydemarie - Mo 10.10.16 11:54

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
also ist in der Datenbank jetzt das Passwort unverschlüsselt


Aua.

Mach' das nie, niemals, unter keinen Umständen. Nicht mal, wenn man dich mit vorgehaltener Waffe dazu zu zwingen versucht.

Gib doch mal die beiden Variablen aus, die du versuchst zu vergleichen. Wir wissen nämlich auch nicht, was da drinsteht.


Csharp-programmierer - Mo 10.10.16 12:16

In den Variablen in der Benutzername und das Passwort. So sieht es jetzt erstmal in der Datenbank aus:

1

Sowohl der Login Script als auch der InsertData Script verschlüsseln das Passwort über die selbe Methode. Wenn ich mir das Passwort im Login ausgeben lasse, kommt dieses Konstrukt: $2y$10$jzQRdyFfAdHXsK/lA1YGXeFAq3FvLkByzUKK9typUJQrqglOZiu1m

Ganz anders als in der Datenbank. Aber als ich es in Plain Text versucht habe und die Passwörter identisch waren, hat's auch nicht geklappt. Hier einmal die Verschlüsselung: $passwordHash = password_hash($passwort, PASSWORD_DEFAULT);


Delete - Mo 10.10.16 12:24

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Mo 10.10.16 13:27

Ah upps. Hier sind mal die Daten:

Benutzer: 'yanma'
Passwort: '$2y$10$/pJKmDP90nGP.9FV43'Ihre Daten sind nicht korrekt. Bitte geben Sie richtige Daten ein.

Bei diesem Code:

PHP-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
if($benutzername AND $password)
      {
        mysqli_select_db($conn"MainlysoftBenutzer");
            
        $query = mysqli_query($conn"SELECT * FROM `MainlysoftBenutzer` WHERE `username`='$benutzername'");
        $num = mysqli_num_rows($query);
            
        if($num != 0)
        {
          WHILE ($row = mysqli_fetch_assoc($query))
          {
            $dbbenutzer = $row['username'];
            $dbpasswort = $row['passwort'];
          }
          
          echo "Benutzer: '$dbbenutzer' <br>Passwort: '$dbpasswort'";
          
          if($dbbenutzer == $username AND $dbpasswort == $passwordHash)
          {
            echo "Login erfolgreich";
          }
          else
          {
            echo "Ihre Daten sind nicht korrekt. Bitte geben Sie richtige Daten ein.";
          }
        }
        else
        {
          echo "Der eingegebene Benutzer existiert nicht.";
        }
      }


EDIT: Ich habe jetzt auch das gehashte Passwort ausgegeben, was der User in den Login eingibt:

Benutzer: 'yanma'
Passwort: '$2y$10$/pJKmDP90nGP.9FV43'
eingegebenes Passwort: '$2y$10$jDPYBp4oU94v4XSNa6NKneV9fsfSOQKWtn2pcX.DkU8MT8diKWJbu'

Es wird also irgendwie ganz anders gehasht


hydemarie - Mo 10.10.16 13:32

Zitat:
Es wird also irgendwie ganz anders gehasht


Na also. Deine Aufgabe ist es, herauszufinden, was.

Hast du in der Datenbank eigentlich eine Zeichenbegrenzung für den Passworthash?


Csharp-programmierer - Mo 10.10.16 13:37

Naja. In der Spalte "Passwort" in der Datenbank habe ich max 25 Zeichen eingegeben, sonst aber nichts. Ich glaube ich ändere das jetzt in 100


hydemarie - Mo 10.10.16 13:38

Zitat:
eingegebenes Passwort: '$2y$10$jDPYBp4oU94v4XSNa6NKneV9fsfSOQKWtn2pcX.DkU8MT8diKWJbu'


Sieht das für dich nach 25 Zeichen aus?


Csharp-programmierer - Mo 10.10.16 13:46

Nicht wirklich :(

Ich habe das jetzt auf 125 geändert, einen neuen Benutzer angelegt (der hat in der Datenbank jetzt natürlich mehr Zeichen) und einen Login versucht. Diesmal kam das heraus:

Benutzer: 'test1'
Passwort: '$2y$10$K5ehPqJvnOC2pCGhbm.wj.4xRVkqmt8DKqJuAVVeoWejmvMh0PoV6'
eingegebenes Passwort: '$2y$10$veYtq1kfaN5TvzsDiUZMMelsTQWdV5E22tyDyVulC0Awl6fM7k4Ma'
Ihre Daten sind nicht korrekt. Bitte geben Sie richtige Daten ein.

Also von den Zeichenlängen gleich, aber vom Inhalt anders :(


hydemarie - Mo 10.10.16 13:50

Wie hast du das Passwort denn in die Datenbank reingeschrieben?


Csharp-programmierer - Mo 10.10.16 13:53


PHP-Quelltext
1:
2:
3:
4:
$passwordHash = password_hash($chpass1, PASSWORD_DEFAULT);
            
            $mysqli = mysqli_query($conn"INSERT INTO `MainlysoftBenutzer`(`name`, `vorname`, `passwort`, `email`, `accbest`, `username`, `geburtsdatum`, `registrierungsdatum`, `anzMeld`, `sicherheitsfrage`, `antwort`, `gender`, `language`, `embest`)
                                        VALUES('
$nachname', '$vorname', '$passwordHash', '$chem1', '$b', '$username', '$geburtsdatum', '$regDatum', '$anzMeld', '$safequestion', '$question_answer', '$gender', '$language', '$emBest')");


So. Erst hashen und dann reinschreiben


Martok - Mo 10.10.16 14:09

Und jetzt schaust du mal, wie man mit password_hash() [http://php.net/manual/de/function.password-hash.php] generierte Hashes prüft...


Csharp-programmierer - Sa 19.11.16 21:11

Soo. Im Moment werden die Daten noch über <form...> an die Datenbank übergeben. Das gefällt mir nicht, da dann eine neue Seite aufkommt und ich den Prozess selbst nicht lenken kann, so wie ich es will. Jetzt bin ich der Meinung, man sollte die Daten lieber über JavaScript senden lassen. Auf YouTube habe ich mit ein Tutorial angesehen und habe dann folgendes geschrieben:


JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function SendData() {
        var name = $('#lastname1').val();
        var vorname = $('#vorname1').val();
        
        $.post('http://www.network.mainlysoft.com/MSNetWebsite/test.php', {email1:name, email2:vorname},
        function(data) {
          $('#result').html(data);
        });
      }]


Nicht wundern, die PHP Datei ist noch ein Test. Wenn ich diesen Script aber über das onclick Event aufrufe, passiert nichts. Wo ist der Fehler?


Delete - Sa 19.11.16 21:33

- Nachträglich durch die Entwickler-Ecke gelöscht -


Csharp-programmierer - Sa 19.11.16 23:31

Ich möchte die Daten bzw. die jQuery Funktion erst starten, wenn JavaScript die Genehmigung gegeben hat. Erst dann soll eine Serververbindung hergestellt werden.


JavaScript-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
function CheckData() {
        var em1 = document.getElementById('em1').value;
        var em2 = document.getElementById('em2').value;
        
        var pass1 = document.getElementById('pass1').value;
        var pass2 = document.getElementById('pass2').value;
        
        var error_string = "";
        
        if(em1 != ""
        {
          if(em1 != em2) {
            document.getElementById('em1').style.borderLeft = "7px solid red";
            document.getElementById('em1').style.borderTop = "1px solid red";
            document.getElementById('em1').style.borderRight = "1px solid red";
            document.getElementById('em1').style.borderBottom = "1px solid red";
            document.getElementById('em1').style.color = "red";
            
            document.getElementById('em2').style.borderLeft = "7px solid red";
            document.getElementById('em2').style.borderTop = "1px solid red";
            document.getElementById('em2').style.borderRight = "1px solid red";
            document.getElementById('em2').style.borderBottom = "1px solid red";
            document.getElementById('em2').style.color = "red";
            
            error_string += "Die E-Mail Adressen stimmen nicht überein.<br>";
          }   
        
          if(pass1 != pass2) {
            document.getElementById('pass1').style.borderLeft = "7px solid red";
            document.getElementById('pass1').style.borderTop = "1px solid red";
            document.getElementById('pass1').style.borderRight = "1px solid red";
            document.getElementById('pass1').style.borderBottom = "1px solid red";
            document.getElementById('pass1').style.color = "red";
            
            document.getElementById('pass2').style.borderLeft = "7px solid red";
            document.getElementById('pass2').style.borderTop = "1px solid red";
            document.getElementById('pass2').style.borderRight = "1px solid red";
            document.getElementById('pass2').style.borderBottom = "1px solid red";
            document.getElementById('pass2').style.color = "red";
            
            error_string += "Die Passwörter stimmen nicht überein.<br>";
          }
          
          
        } 
        else
        {
          error_string += "Sie müssen erst alle Datenfelder ausfüllen";
        }
        
        if(error_string != "") {
          document.getElementById('error_text').style.color = "red";
          document.getElementById('error_text').innerHTML = error_string;
          document.getElementById('error_div').style.backgroundColor = "#F8E0E0";
        } else {
          document.getElementById('error_text').style.color = "green";
          document.getElementById('error_text').innerHTML = "Alle Daten wurden korrekt eingegeben.<br>Es wird eine Serveranfrage vorgenommen.";
          document.getElementById('error_div').style.backgroundColor = "#F8E0E0";
          
          $(document).ready(function(){
            $("input").keyup(function(){
              var txt = $("input").val();
              $.post("http://www.network.mainlysoft.com/MSNetWebsite/test.php", {email1: txt}, function(result){
                $("error_text").html(result);
                alert(html(result));
              });
            });
          });
        }
      }


Jetzt meckert der Browser aber in der ersten Zeile von jQuery. Und das Ergebnis, also die txt Variable, die die PHP zurückgibt, wird auch nicht angezeigt. Woran liegt dies?


hydemarie - So 20.11.16 00:18

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Jetzt meckert der Browser aber in der ersten Zeile von jQuery.


Steht irgendwo "mäh-äh-äh"? Ansonsten ist das, wie gewohnt, nicht annähernd präzise genug.


Csharp-programmierer - So 20.11.16 01:32

Als Antwort sagt mein Browser (Chrome) folgendes: Uncaught TypeError: $ is not a function(…)

Und das ist genau die Zeile, wo jQuery anfängt.


hydemarie - So 20.11.16 01:34

Dann ist jQuery nicht geladen.


Csharp-programmierer - So 20.11.16 11:50

Hä? Wie geht sowas? Was muss ich machen, damit es lädt?


Narses - So 20.11.16 13:28

Moin!

Klick mal hier auf den Link: Suche bei Google JQUERY TUTORIAL und dann lies die ersten beiden Einträge, dann weißt du das. :les: :zustimm:

cu
Narses


Csharp-programmierer - So 20.11.16 13:52

Achso man muss sich das erst herunterladen..
Ich habe mir jetzt die Datei heruntergeladen und auf den Webserver gezogen. Den Script habe ich dementsprechend auf den Pfad angepasst und den jQuery Code hinzugefügt.Das sieht jetzt so aus:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<script src="jquery-3.1.1.min.js">
      $(document).ready(function(){
            $("input").keyup(function(){
              var txt = $("input").val();
              $.post("http://www.network.mainlysoft.com/MSNetWebsite/test.php", {email1: txt}, function(result){
                $("error_text").html(result);
                alert(html(result));
              });
            });
          });
    </script>


Ich weiß jetzt nicht ob das so hinhaut. Erst soll der JavaScript Algorithmus die Daten überprüfen und demnach den Startschuss für jQuery geben. Wie ich den jQuery Code verstehe, wird dieser erst gefeuert, wenn der Button geklickt wird?


hydemarie - So 20.11.16 16:09

Was, glaubst du, macht script src und wie kommst du darauf?


Csharp-programmierer - So 20.11.16 20:02

Ich kam darauf, weil das auf der Website, die jQuery erklärt hat, das war das auch so. Ich habe mir die jQuery Datei nun heruntergeladen und auf den Server geladen. Im selben Ordner befindet sich auch die HTML Datei, die die JavaScript Funktion enthält. Wenn ich den jQuery Code jetzt aufrufe, kommt immer noch der Fehler, dass $ keine Funktion ist. Aber ich habe ja die jQuery Datei auf dem Server?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
} else {
          document.getElementById('error_text').style.color = "green";
          document.getElementById('error_text').innerHTML = "Alle Daten wurden korrekt eingegeben.<br>Es wird eine Serveranfrage vorgenommen.";
          document.getElementById('error_div').style.backgroundColor = "#F8E0E0";
          
          $(document).ready(function(){
            $("input").keyup(function(){
              var txt = $("input").val();
              $.post("http://www.network.mainlysoft.com/MSNetWebsite/test.php", {email1: txt}, function(result){
                $("error_text").html(result);
                alert(html(result));
              });
            });
          });
        }


Narses - So 20.11.16 20:05

Moin!

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich den jQuery Code jetzt aufrufe, kommt immer noch der Fehler, dass $ keine Funktion ist. Aber ich habe ja die jQuery Datei auf dem Server?
Wenn der Fehler immer noch auftritt und dieser bedeutet, dass jQuery nicht zur Verfügung steht, was folgerst du dann daraus? Dass es ausreichend ist, die Datei auf den Webserver in irgendein Verzeichnis zu legen? Das stand so wirklich in den Tutorials? :lupe: :suspect:

cu
Narses


Csharp-programmierer - So 20.11.16 20:30

Jetzt habe ich den Script im Head eingefügt. Aber jetzt urplötzlich kommt dieser Fehler:

1

Moderiert von user profile iconNarses: Beiträge zusammengefasst

Ich habe jetzt diesen einen Script rausgelöscht und dann auch noch diesen Script:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
(function(jQuery){
    function initFlyouts(){
      initPublishedFlyoutMenus(
        [{"id":"826364194751186547","title":"Mainlysoft","url":"index.html","target":"","nav_menu":false,"nonclickable":false},{"id":"514928754758950662","title":"Download","url":"download.html","target":"","nav_menu":false,"nonclickable":false},{"id":"486165369991853972","title":"Das Team","url":"das-team.html","target":"","nav_menu":false,"nonclickable":false},{"id":"273175372425062801","title":"Support","url":"support.html","target":"","nav_menu":false,"nonclickable":false},{"id":"894191733844720900","title":"Mainlynet","url":"mainlynet.html","target":"","nav_menu":false,"nonclickable":false}],
        "709674401632149909",
        '',
        'active',
        false,
        {"navigation\/item":"<li {{#id}}id=\"{{id}}\"{{\/id}} class=\"wsite-menu-item-wrap\">\n\t<a\n\t\t{{^nonclickable}}\n\t\t\t{{^nav_menu}}\n\t\t\t\thref=\"{{url}}\"\n\t\t\t{{\/nav_menu}}\n\t\t{{\/nonclickable}}\n\t\t{{#target}}\n\t\t\ttarget=\"{{target}}\"\n\t\t{{\/target}}\n\t\t{{#membership_required}}\n\t\t\tdata-membership-required=\"{{.}}\"\n\t\t{{\/membership_required}}\n\t\tclass=\"wsite-menu-item\"\n\t\t>\n\t\t{{{title_html}}}\n\t<\/a>\n\t{{#has_children}}{{> navigation\/flyout\/list}}{{\/has_children}}\n<\/li>\n","navigation\/flyout\/list":"<div class=\"wsite-menu-wrap\" style=\"display:none\">\n\t<ul class=\"wsite-menu\">\n\t\t{{#children}}{{> navigation\/flyout\/item}}{{\/children}}\n\t<\/ul>\n<\/div>\n","navigation\/flyout\/item":"<li {{#id}}id=\"{{id}}\"{{\/id}}\n\tclass=\"wsite-menu-subitem-wrap {{#is_current}}wsite-nav-current{{\/is_current}}\"\n\t>\n\t<a\n\t\t{{^nonclickable}}\n\t\t\t{{^nav_menu}}\n\t\t\t\thref=\"{{url}}\"\n\t\t\t{{\/nav_menu}}\n\t\t{{\/nonclickable}}\n\t\t{{#target}}\n\t\t\ttarget=\"{{target}}\"\n\t\t{{\/target}}\n\t\tclass=\"wsite-menu-subitem\"\n\t\t>\n\t\t<span class=\"wsite-menu-title\">\n\t\t\t{{{title_html}}}\n\t\t<\/span>{{#has_children}}<span class=\"wsite-menu-arrow\">><\/span>{{\/has_children}}\n\t<\/a>\n\t{{#has_children}}{{> navigation\/flyout\/list}}{{\/has_children}}\n<\/li>\n"},
        {}
      )
    }
    if (jQuery) {
      jQuery(document).ready(function() { jQuery(initFlyouts); });
    }else{
      <!--if (Prototype.Browser.IE) window.onload = initFlyouts;-->
      <!--else document.observe('dom:loaded', initFlyouts);-->
    }
  })(window._W && _W.jQuery)


Keine Ahnung. Den hat weebly generiert, ich hoffe der ist nicht wichtig. Desweiteren habe ich den Script jetzt in den Body Bereich geschoben:


HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
<script>
function CheckData() {
        var em1 = document.getElementById('em1').value;
        var em2 = document.getElementById('em2').value;
        
        var pass1 = document.getElementById('pass1').value;
        var pass2 = document.getElementById('pass2').value;
        
        var error_string = "";
        
        if(em1 != ""
        {
          if(em1 != em2) {
            document.getElementById('em1').style.borderLeft = "7px solid red";
            document.getElementById('em1').style.borderTop = "1px solid red";
            document.getElementById('em1').style.borderRight = "1px solid red";
            document.getElementById('em1').style.borderBottom = "1px solid red";
            document.getElementById('em1').style.color = "red";
            
            document.getElementById('em2').style.borderLeft = "7px solid red";
            document.getElementById('em2').style.borderTop = "1px solid red";
            document.getElementById('em2').style.borderRight = "1px solid red";
            document.getElementById('em2').style.borderBottom = "1px solid red";
            document.getElementById('em2').style.color = "red";
            
            error_string += "Die E-Mail Adressen stimmen nicht überein.<br>";
          }   
        
          if(pass1 != pass2) {
            document.getElementById('pass1').style.borderLeft = "7px solid red";
            document.getElementById('pass1').style.borderTop = "1px solid red";
            document.getElementById('pass1').style.borderRight = "1px solid red";
            document.getElementById('pass1').style.borderBottom = "1px solid red";
            document.getElementById('pass1').style.color = "red";
            
            document.getElementById('pass2').style.borderLeft = "7px solid red";
            document.getElementById('pass2').style.borderTop = "1px solid red";
            document.getElementById('pass2').style.borderRight = "1px solid red";
            document.getElementById('pass2').style.borderBottom = "1px solid red";
            document.getElementById('pass2').style.color = "red";
            
            error_string += "Die Passwörter stimmen nicht überein.<br>";
          }
          
          
        } 
        else
        {
          error_string += "Sie müssen erst alle Datenfelder ausfüllen";
        }
        
        if(error_string != "") {
          document.getElementById('error_text').style.color = "red";
          document.getElementById('error_text').innerHTML = error_string;
          document.getElementById('error_div').style.backgroundColor = "#F8E0E0";
        } else {
          document.getElementById('error_text').style.color = "green";
          document.getElementById('error_text').innerHTML = "Alle Daten wurden korrekt eingegeben.<br>Es wird eine Serveranfrage vorgenommen.";
          document.getElementById('error_div').style.backgroundColor = "#BEF781";
          
          $(document).ready(function(){
            $("input").keyup(function(){
              var txt = $("input").val();
              $.post("http://www.network.mainlysoft.com/MSNetWebsite/test.php", {email1: txt}, function(result){
                $("error_text").html(result);
              });
            });
          });
        }
      }
      
    </script>

    
        <form action="http://network.mainlysoft.com/MSNetScripts/InsertData.php" method="post"><table cellspacing="15px">
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Name:</label></font></td>
            <td><input type="text" id="lastname1" onblur="TextBoxLeave('lastname1');" onselect="TextBoxActive('lastname1');" onclick="TextBoxActive('lastname1');" name="lastname" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Vorname:</label></font></td>
            <td><input type="text" id="vorname1" onblur="TextBoxLeave('vorname1');" onselect="TextBoxActive('vorname1');" onclick="TextBoxActive('vorname1');" name="vorname" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Username:</label></font></td>
            <td><input type="text" id="username1" onblur="TextBoxLeave('username1');" onclick="TextBoxActive('username1');" onselect="TextBoxActive('username1');" name="username" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Wohnort:</label></font></td>
            <td><input type="text" id="wohnort1" onblur="TextBoxLeave('wohnort1');" onclick="TextBoxActive('wohnort1');" onselect="TextBoxActive('wohnort1');" name="wohnort" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Geburtsdatum:</label></font></td>
            <td><input type="date" id="date" onblur="TextBoxLeave('date');" onclick="TextBoxActive('date');" onselect="TextBoxActive('date');" name="geburtsdatum" placeholder="dd.mm.yyyy"/></td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>E-Mail Adresse:</label></font></td>
            <td><input type="text" id="em1" onblur="TextBoxLeave('em1');" onclick="TextBoxActive('em1');" onselect="TextBoxActive('em1');" name="email_one" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>E-Mail Adresse bestätigen:</label></font></td>
            <td><input type="text" id="em2" onblur="TextBoxLeave('em2');" onclick="TextBoxActive('em2');" onselect="TextBoxActive('em2');" name="email_two" /></td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Kurzbeschreibung:</label></font></td>
            <td><font face="calibri" size="+1" color="#818181"><textarea name="shortDescription" id="sd" onblur="TextBoxLeave('sd');" onclick="TextBoxActive('sd');" onselect="TextBoxActive('sd');" rows="4" cols="50"></textarea></font></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Homepage:</label></font></td>
            <td><input type="text" id="hp" onblur="TextBoxLeave('hp');" onclick="TextBoxActive('hp');" onselect="TextBoxActive('hp');" name="website" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Interessen:</label></font></td>
            <td>
              <select name="interessen" id="sel" onblur="TextBoxLeave('sel');" onclick="TextBoxActive('sel');" onselect="TextBoxActive('sel');">
                <option value="Informatik und Sport">Informatik und Sport</option>
                <option value="Design und Informatik">Design und Informatik</option>
                <option value="Rennsport">Rennsport</option>
              </select>
            </td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Passwort:</label></font></td>
            <td><input type="password" id="pass1" onblur="TextBoxLeave('pass1');" onclick="TextBoxActive('pass1');" onselect="TextBoxActive('pass1');" name="password1" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Passwort bestätigen:</label></font></td>
            <td><input type="password" id="pass2" onblur="TextBoxLeave('pass2');" onclick="TextBoxActive('pass2');" onselect="TextBoxActive('pass2');" name="password2" /></td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Sicherheitsfrage:</label></font></td>
            <td>
              <select name="safequestion" id="sel2" onblur="TextBoxLeave('sel2');" onclick="TextBoxActive('sel2');" onselect="TextBoxActive('sel2');">
                <option value="Was war Ihr erstes Haustier?">Was war Ihr erstes Haustier?</option>
                <option value="Geburtsname Mutter">Wie war der Geburtsname Ihrer Mutter</option>
              </select>
            </td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Antwort:</label></font></td>
            <td><textarea name="question_answer" id="ans" onblur="TextBoxLeave('ans');" onclick="TextBoxActive('ans');" onselect="TextBoxActive('ans');" rows="2" cols="50"></textarea></td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Geschlecht:</label></font></td>
            <td>
              <select name="gender" id="sel3" onblur="TextBoxLeave('sel3');" onclick="TextBoxActive('sel3');" onselect="TextBoxActive('sel3');">
                <option value="male">männlich</option>
                <option value="female">weibllich</option>
              </select>
            </td>
          </tr>
          <tr>
            <td><font color="#818181" face="calibri" size="+1"><label>Sprache:</label></font></td>
            <td>
              <select name="language" id="sel4" onblur="TextBoxLeave('sel4');" onclick="TextBoxActive('sel4');" onselect="TextBoxActive('sel4');">
                <option value="german">Deutsch</option>
                <option value="english">Englisch</option>
              </select>
            </td>
          </tr>
          <tr>
            <td colspan="2"><input type="checkbox" name="agb"><font color="#818181" face="calibri" size="+1"><label>   Ich habe die AGB gelesen</label></font></td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td><input type="submit" class="gray-button" value="Absenden"></input></td>
            <td><input type="button" class="gray-button" value="Daten überprüfen" onclick="CheckData();"></input></td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td colspan="2">
              <div colspan="2" id="error_div" class="error_text">
                <h3 style="padding-left:20px; padding-top:15px; padding-bottom: 15px;" colspan="2" id="error_text"><span></span></h3>
              </div>
            </td>
          </tr>
        </table></form>


Jetzt werden zwar keine Fehler angezeigt, aber es passiert nichts :(


hydemarie - So 20.11.16 20:55

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Ich kam darauf, weil das auf der Website, die jQuery erklärt hat, das war das auch so.


Keine mir bekannte Website behauptet, dass das so funktionieren sollte. Du hast entweder ein <script src> - dann steht der Code, den du ausführen möchtest, in der Datei, die du als src angibst - oder Inlinescripts. Oder beides als separate Tags.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

user profile iconCsharp-programmierer hat folgendes geschrieben Zum zitierten Posting springen:
Keine Ahnung. Den hat weebly generiert, ich hoffe der ist nicht wichtig.


Warum kopierst du Code, den du nicht verstehst, in deine Dateien?


Csharp-programmierer - So 20.11.16 21:07

Ich habe die Website mit weelbly erstellt, entferne die Werbung und veröffentliche diese auf dem Server, der die volle Domain besitzt. Aber weebly hat beim Erstellen diesen Code erzeugt.


Csharp-programmierer - Mo 21.11.16 22:52

Problem ist gelöst.


hydemarie - Mo 21.11.16 22:55

Und wie?


Csharp-programmierer - Mo 21.11.16 23:11

Ich habe den Code von Wwebly rausgelöscht, mich hingesetzt und den Fehler gesucht. Der Fehler lag in dem input von jQuery.