Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
sql geht nicht
#1
Ich schreibe dein Problem mal hier  rein weil es vieleicht noch andere gibt die das auch haben



<?php
error_reporting(E_ALL); 
ini_set('display_errors', true);
$pdo = new PDO('mysql:host=localhost:3306;dbname=auftrag', 'Name', 'Passwort');
?>
<!DOCTYPE html> 
<html> 
<head>
  <title>Hairlich | Registrierung</title> 
</head> 
<body>
<?php
$showFormular = true;
if(isset($_POST['register'])) {
 $error = false;
 $email = $_POST['email'];
 $preis = $_POST['preis'];
  $staff = $_POST['staff'];
 if(!filter_var($email)) {
 echo '<p class="error"><b>Bitte einen gültigen Benutzernamen angeben</b></p><br>';
 $error = true;
 } 
 if(!$error) { 
 $statement = $pdo->prepare("SELECT * FROM register WHERE email = :email");
 $result = $statement->execute(array('email' => $email));
 $user = $statement->fetch();
 if($user !== false) {
 echo '<p class="error"><b>Dieser Benutzername ist bereits vergeben</b></p>';
 $error = true;
 } 
 }
 if(!$error) { 
 $statement = $pdo->prepare("INSERT INTO register (email, preis, staff) VALUES (:email, :preis, :staff)");
 $result = $statement->execute(array('email' => $email, 'preis' => $preis, 'staff' => $staff));
 if($result) { 
 echo '
 
 <br><h1>Du wurdest erfolgreich registriert. </h1><a href="login.php"><button>zum Login</button></a>';
 $showFormular = false;
 } else {
 var_dump($result);
var_dump($statement);
 }
 } 
}
if($showFormular) {
?>
 <br><br><br><br>
 <br><br><br><br>
<form action="registrieren.php" method="post">
Benutzername:<br>
<input type="text" size="40" maxlength="250" name="email" placeholder="Wähle einen Benutzernamen..."><br><br>
Dein Passwort:<br>
<input type="text" size="40"  maxlength="250" name="passwort" placeholder="Wähle ein Passwort..."><br>
Passwort wiederholen:<br>
<input type="text" size="40" maxlength="250" name="passwort2" placeholder="weitere Infos"><br><br>
Eingeloggt bleiben?<br>
 <select class="" name="staff">
 <option value="false">Diese Option kommt bald</option>
 </select>
 <br><br>
 
 <input name="register" type="submit" value="Registrieren">
</form>
<?php
} //Ende von if($showFormular)
?>
 
<br>
 <a href="login.php" class="alreadyreg">Bereits registriert? -> Anmelden</a>
 
 <style>
body {font-family: Arial, Helvetica, sans-serif; text-align: center; background-color: #E6E6E6;}
input[type=text], select, textarea {
 width: 30%;
 padding: 12px;
 border: 1px solid #ccc;
 border-radius: 4px;
 box-sizing: border-box;
 margin-top: 6px;
 margin-bottom: 16px;
 resize: vertical;
}
 
 input[type=password]{
 width: 30%;
 padding: 12px;
 border: 1px solid #ccc;
 border-radius: 4px;
 box-sizing: border-box;
 margin-top: 6px;
 margin-bottom: 16px;
 resize: vertical;
}
input[type=submit] {
   background-color: #578e8c;
 color: white;
 padding: 12px 20px;
 border: none;
 border-radius: 4px;
 cursor: pointer;
 opacity: 0.8;
}
input[type=submit]:hover {
 background-color: #578e8c;
 opacity: 1.0;
}
.container {
 border-radius: 5px;
 background-color: #f2f2f2;
 padding: 20px;
}
 
 
 
 button{
  background:#1AAB8A;
  color:#fff;
  border:none;
  position:relative;
  height:60px;
  font-size:1.6em;
  padding:0 2em;
  cursor:pointer;
  transition:800ms ease all;
  outline:none;
}
button:hover{
  background:#E6E6E6;
  color:#1AAB8A;
}
button:before,button:after{
  content:'';
  position:absolute;
  top:0;
  right:0;
  height:2px;
  width:0;
  background: #1AAB8A;
  transition:400ms ease all;
}
button:after{
  right:inherit;
  top:inherit;
  left:0;
  bottom:0;
}
button:hover:before,button:hover:after{
  width:100%;
  transition:800ms ease all;
}
 .error{
 color: red;
 
 }
 .alreadyreg{
 text-decoration: none;
 font-size: 10pt;
 color: black;}
 
 .alreadyreg:hover{
 text-decoration: none;
 font-size: 12pt;
 color: red;}
 
</style>
</body>
</html>


Jetzt aber, oder? Wo liegt der Fehler?


Error:

Code

  1. [/url]Notice: Undefined index: preis in /var/www/.php on line 18
  2. [url=https://=10533#codeLine_2_6c506f]bool(false) object(PDOStatement)#3 (1) { ["queryString"]=> string(74) "INSERT INTO register (email, preis, staff) VALUES (:email, :preis, Confusedtaff)" }


SoBig Grinu solltest erstmal kucken wo du preis definierst ? Gar nicht. also muß da erstmal ein Preis Feld dazu ,oder du nimmst den Preiss aus den Sql abfrage raus.

Mach das erstmal dann sehen wir weiter
Zitieren
#2
Links habe ich raus genommen weil weiß ja nicht ob du die veröffentlichen wolltest. Aber spielen hier auch keine rolle. Mach mal preis feld damit rein
Zitieren
#3
Warum speicherst du benutzernamen unter email ? Nagut mußt du wissen. Wie sieht den deine Datenbank aus ? Welche einträge hast du den da ?
Weil du speicherst keine Passwörter. Wandelst die Passwörter nicht um . Also da fehlt immer noch die hälfte. Warum immst du den nicht erstmal ein fertiges script was du nur noch bearbeiten mußt. Weil ich glaube das du noch nicht soweit bist das alleine hinzubekommen weil deine ersten versuchen haben mir gazeigt das du nicht weißt was du da machst.
Ist auch nicht schlimm,so haben alle mal angefangen,nur du solltest weiter unten anfangen und nicht mitten drinne.

Sql hat mich am Anfang auch aufgeregt und habe da auch gar nicht durchgeblickt. Habe den Laptop auf den Tisch geschraubt sonst hätte ich den Scheiß aparat an der Wand geklatscht. Aber nach der Zeit lernt man auch das.

Was kannst du den überhaupt in Php ? Kriegst du da ein anmelde Formular hin , so das deine Abfragen mit einen echo zurück kommen? Versuch erstmal das weil wie gesagt du hast keinen Passwort vergleich ,du fragst kein Preis ab ( was bei der registrierung wohl auch nicht gebraucht wird ).

Ansonsten speichert dein vorhandener Code das auch in der Db ,aber an der falschen stelle und ohne Passwort und Namen
Zitieren
#4
Also ich hasse ja PDO. Wollte dir das da mal hinfummeln und komischer weise klappt das ie. Die Fehlermeldungen von PDO kann man auch nicht gebrauchen da steht nie das drinne was man brauch.. Bei mysqli stehteht zumindest was falsch ist und kann es dann auch beheben.



Naja ich habe dein Kram mal versucht so zumachen das es geht und vor allem auch alles an der stelle ist wo es hingehöhrt.
Wie weit das vom Code her richtig ist oder was man nicht mehr nehmen sollte kann ich dir nicht richtig sagen.
Am besten frag mal rum ob du das Script so nehmen kannst.
Damit ich mir nicht anhöhren muß was ich für ein Scheiß poste schreibe ich gleich dabei das ich nur zeige wie man es nicht machen tut.
Das Script geht aber frag mal ein Profi was noch geändert werden müßte OK???????

<!DOCTYPE html> 
<html> 
<head>
<title>Hairlich | Registrierung</title>    
</head> 
<body>
<?php
$showFormular = true;
if(isset($_POST['register'])) {
        $error = false;
        $email = $_POST['email'];
        $passwort = $_POST['passwort'];
        $preis = $_POST['preis'];
        $name = $_POST['name'];
        $staff = $_POST['staff'];
        
        if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>';
            $error = true;
        }     
        if(strlen($passwort) == 0) {
            echo 'Bitte ein Passwort angeben<br>';
            $error = true;
        }
        if($passwort != $_POST['passwort2']) {
            echo 'Die Passwörter müssen übereinstimmen<br>';
            $error = true;
       }
       
       $mysqli = mysqli_connect('localhost', 'sebastian1012_test', 'ACABITW', 'sebastian1012_test');
       if (mysqli_connect_errno())      die ("Connect failed: " . mysqli_connect_error($mysqli));     
       mysqli_set_charset($mysqli, "utf8"); 
      
       $query = "Select name FROM register WHERE name='$name'";
       $result= mysqli_query($mysqli, $query) OR die("Query: <pre>".$query ."</pre>\n"."Antwort: ". mysqli_error($mysqli));
       if (mysqli_num_rows($result)>0){
                      echo "- Der Eingegeben Name  ".$name ." ist Bereits in unserer Datenbank vorhanden";
                      $error = true;
       }
       $query1 = "Select email FROM register WHERE email='$email'";
       $result1= mysqli_query($mysqli, $query1) OR die("Query: <pre>".$query1 ."</pre>\n"."Antwort: ". mysqli_error($mysqli));
       if (mysqli_num_rows($result1)>0){
                      echo "- Die Eingegeben E-Mail Adresse ".$email ." ist Bereits in unserer Datenbank vorhanden";
                      $error = true;
       }
       
       if(!$error) {    
             $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
             $query = "Insert  into  `register`  (`name`,`passwort`, `preis`,`email`,`staff`)   values  ('%s','%s','%s','%s','%s')";
             $query = sprintf($query, mysqli_real_escape_string($mysqli,$name),
             mysqli_real_escape_string($mysqli, $passwort_hash),
             mysqli_real_escape_string($mysqli, $preis),
             mysqli_real_escape_string($mysqli, $email),  
             mysqli_real_escape_string($mysqli, $staff));  
             $result = mysqli_query($mysqli, $query)  or die ("MySQL-Error: " . mysqli_error($mysqli));
             if($result) {         
                  echo  '<span style="color:green;font-weight:bold;">Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a></span>';
             } else {
                  echo '<span style="color:red;font-weight:bold;">Beim speichern ist ein Fehler aufgetreten. </span>';
             }
       }
}
if($showFormular) {
?>
<style>
body {font-family: Arial, Helvetica, sans-serif; text-align: center; background-color: #E6E6E6;}
input[type=text], select, textarea {
    width: 30%;
    padding: 12px;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-sizing: border-box;
    margin-top: 6px;
    margin-bottom: 16px;
    resize: vertical;
}
        
input[type=password]{
    width: 30%;
    padding: 12px;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-sizing: border-box;
    margin-top: 6px;
    margin-bottom: 16px;
    resize: vertical;
}
input[type=submit] {
   background-color: #578e8c;
    color: white;
    padding: 12px 20px;
    border: none;
    border-radius: 4px;
    cursor: pointer;
    opacity: 0.8;
}
input[type=submit]:hover {
    background-color: #578e8c;
        opacity: 1.0;
}
.container {
    border-radius: 5px;
    background-color: #f2f2f2;
    padding: 20px;
}
button{
  background:#1AAB8A;
  color:#fff;
  border:none;
  position:relative;
  height:60px;
  font-size:1.6em;
  padding:0 2em;
  cursor:pointer;
  transition:800ms ease all;
  outline:none;
}
button:hover{
  background:#E6E6E6;
  color:#1AAB8A;
}
button:before,button:after{
  content:'';
  position:absolute;
  top:0;
  right:0;
  height:2px;
  width:0;
  background: #1AAB8A;
  transition:400ms ease all;
}
button:after{
  right:inherit;
  top:inherit;
  left:0;
  bottom:0;
}
button:hover:before,button:hover:after{
  width:100%;
  transition:800ms ease all;
}
.error{
  color: red;
            
}
.alreadyreg{
    text-decoration: none;
    font-size: 10pt;
    color: black;}
        
.alreadyreg:hover{
    text-decoration: none;
    font-size: 12pt;
    color: red;}
form{
  margin-top:160px;      
}
</style>
<form action="loginscript2.php" method="post">
Email-Adresse :<br>
<input type="text" size="40" maxlength="250" name="email" placeholder="Wähle einen Benutzernamen..."><br><br>

Benutzername:<br>
<input type="text" size="40" maxlength="250" name="name" placeholder="Wähle einen Benutzernamen..."><br><br>

Dein Passwort:<br>
<input type="text" size="40"  maxlength="250" name="passwort" placeholder="Wähle ein Passwort..."><br>

Passwort wiederholen:<br>
<input type="text" size="40" maxlength="250" name="passwort2" placeholder="weitere Infos"><br><br>

Preis:<br>
<input type="text" size="40" maxlength="250" name="preis" placeholder="weitere Infos"><br><br>

Eingeloggt bleiben?<br>
<select class="" name="staff">
 <option value="false">Diese Option kommt bald</option>
</select>
<br><br>
<input name="register" type="submit" value="Registrieren">
</form>
<?php
} //Ende von if($showFormular)
?>    
<br>
<a href="login.php" class="alreadyreg">Bereits registriert? -> Anmelden</a>
</body>
</html> 

Außerdem mußt du dir auch nochmal das Html Grundgerüßt anschaun weil du hattest deine style angaben ganz unten im Script und da gehöhren sie aufjedenfall nicht hin.
Zitieren
#5
basti1012, höre auf den Leuten so einen Sch.... zu servieren! Du brauchst echt einen Aufpasser, damit du dein gefährliches Halbwissen nicht verbreitest!

Ungefiltert Daten an die DB senden, ist ein No Go
Zitieren
#6
was meinst du den jetzt schon wieder mit ungefiltert
Zitieren
#7
ysqli_real_escape_string
Zitieren
#8
Ja habe ich jetzt auch rausgefunden. Ich vergesse immer das bei Pdo nicht gebraucht wird.
Da es im AnfangsScript noch Pdo wahr und ich pdo hasse hatte ich beim umbauen daran nicht mehr gedacht.

Ändere das gleich. Ist da noch was scheiße dran ?
Zitieren
#9
SO Code in POST4 wurde geändert.
So besser?
Ich frage mich eigentlich, ob man da überhaupt das EVA Prinzip verbessern kann ? Zumindest wüsste ich nicht wie. Bei meinem Chat fallen mir sofort Sachen auf die man ändern müsste, aber bei dem kleinen Script hier fällt mir nix weiter ein, außer vielleicht noch Funktionen zu verwenden ,nur ob das der richtige weg ist ??????
Zitieren
#10
Zuerst einmal, kann man nicht den erweiterten Editor als Default einstellen, immer auf Beitragsvorschau zu klicken, um den zu bekommen ist lästig

Dann zu deinem Quellcode. Du solltest dir grundsätzlich mehr Mühe mit deinen Quellcodes geben. Die Lesbarkeit leidet bei dir zu sehr. Beispiel:
$query = sprintf($query, mysqli_real_escape_string($mysqli,$name),
mysqli_real_escape_string($mysqli, $passwort_hash),
mysqli_real_escape_string($mysqli, $preis),
mysqli_real_escape_string($mysqli, $email),  
mysqli_real_escape_string($mysqli, $staff));  
Das ist einfach nur Käse. So ist das deutlich besser zu lesen:

$query = sprintf($query, mysqli_real_escape_string($mysqli,$name),
                         mysqli_real_escape_string($mysqli, $passwort_hash),
                         mysqli_real_escape_string($mysqli, $preis),
                         mysqli_real_escape_string($mysqli, $email),  
                         mysqli_real_escape_string($mysqli, $staff));  
Und glaubst du wirklich, dass dein Script jemals zu dieser Ausgabe kommt:

echo '<span style="color:red;font-weight:bold;">Beim speichern ist ein Fehler aufgetreten. </span>';


Ich bin bei dir fürs Erste mal raus, es gibt nicht einen Quellcode, der keine Macken hat. Ob größere oder kleinere Macken ist wurscht, fehlerfrei ist da bisher nichts dabei gewesen. Und viele Macken sind völlig unnötig, weil du zu wenig mitdenkst oder du keine Sorgfalt walten lässt. Das macht alles keinen Spaß.

Nachtrag: Und wenn man dir Dinge erklärt und du trotzdem noch in einem anderen Forum nachfragst (https://www.php.de/forum/webentwicklung/...charts-usw) dann ist das auch nicht gerade förderlich für eine Hilfsbereitschaft.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste