PHP Fehlermeldung bei Php und mySQL

reymysteriode

Cadet 3rd Year
Registriert
Nov. 2013
Beiträge
41
Code:
<!DOCTYPE html >

<html>



  <head>

    <title></title>

    <link rel="stylesheet" type="text/css" href="format.css"></link>

  </head>

  <body>





    <h1>ihre Kundendaten</h1>

    <?php

      //Daten verbindung herstellen

      $Server="localhost";

      $Benutzer = "root";

      $Kennwort = "";

      $Datenbank = "haro";

      //$dbVerbindung ist ein Datenbankverbindungsobjekt der Klasse mysqli, das auf die Datenbank zeugt

      $dbVerbindung = new mysqli($Server,$Benutzer,$Kennwort,$Datenbank);

  

      //Datenbankverbindung testen

      if(mysqli_connect_errno() == 0)

      {

          //datenübernahme aus der Forn

          $Kdnr = $_POST ['tfKdnr'];

          //SQL-Befehl erstellen

          $SQL = "Select * from kunden where kdnr ='$Kdnr';";

          //$AbfrageErbenis ist ein Erebnistabellenobjekt,

          //$AbfrageErbenis enthält die ausgewählten Datensätze aus der Datenbank

          $abfrageErgebnis =  $dbVerbindung->query($SQL);

          //enthält die Ergebnistabelle $abfrageErgebnis KEine Datensätze ?

          //num_rows liefert die anzahl der Datensätze von $AbfrageErbenis

          if($abfrageErbenis->num_rows == 0)

          {

              echo "<h2> leider konnten Ihre Kundendaten nicht gefunden werden.<h2>";

          

          }

          else

          {

          

              //$Aktuellerkunde ist ein objekt, das die Daten eines Datensatzes enthält

              $aktuellerKunde = $abfrageErbenis->fetch_object();

          

              //datenasuagbe in einer tabelle

          

              echo"<table>";

              echo"<tr><td>Name: </td><td>";

              echo htmlentities($aktuellerKunde->name);

              echo "</td></tr><tr><td>Strasse:</td><td>";

              echo $aktuellerKunde->strasse;

              echo "</td></tr><tr><td>PLZ:</td><td>";

              echo $aktuellerKunde->plz;

              echo "</td></tr><tr><td>Ort:</td><td>";

              echo $aktuellerKunde->ort;

              echo "</td></tr></table>";         

          }

          //Ergebnistabelle schließen

          $abfrageErgebnis-> close();

          //datenbank schlißen

          $dbVerbindung-> close();

      }

  

      else

      {

          echo "<h2>Keiner Datenbankverbindung</h2>";

          echo "<p>Fehler= ", mysqli_connect_error(), "</p>";

      

      

      }

      

      

      

      

  



    

    

      

    ?>

  </body>

</html>



Code:
<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" >

  <head>

    <title>Bitte geben Sie Ihre Kundennummer ein:</title>

    <link rel="stylesheet" type="text/css" href="format.css"></link>

  </head>

  <body>

    <h1>Hier können Sie kapital verdopplung berechnen</h1>

    <form action="kdsuch1.php" method="post">

  

      <p><input type="text" name="tfKdnr" size = "5"</p>

        

        

            <input type="submit" value ="Suchen" />

        

  

    </form>

  </body>

</html>

Die Datenbank ist schon erstellt wurden und da sind kunden usw.
Mit Dieser Fehlermeldung:
ihre Kundendaten


Notice: Undefined variable: abfrageErbenis in D:\S20\EigeneDateien\myPHP\kdsuch1\kdsuch1.php on line 33

Notice
: Trying to get property of non-object in D:\S20\EigeneDateien\myPHP\kdsuch1\kdsuch1.php on line 33
leider konnten Ihre Kundendaten nicht gefunden werden.
 

Anhänge

  • c4c2bdab48bcf254ee17b0b74339979b.png
    c4c2bdab48bcf254ee17b0b74339979b.png
    40,4 KB · Aufrufe: 345
Zuletzt bearbeitet:
Der Code ist ja abenteuerlich! Dazu auch noch saugefährlich, da keinerlei Prüfung erfolgt vor Übergabe an den SQL-Server (Stichwort: SQL Injection). Könntest dir diesbezüglich auch mal PDO näher anschauen.

Verwende doch bitte hier im Forum die Code-Tags, damit deine Helfer den Code leichter überblicken können. So hingerotzt hingeklatscht bekommt man ja Kopfschmerzen - sollte für jemanden, der hier seit 7 Jahren dabei ist, eigentlich selbstverständlich sein. Etwas mehr Mühe bei der Fehlerbeschreibung wäre ebenfalls wünschenswert.

Wenn du es etwas übersichtlicher präsentierst, macht sich bestimmt auch jemand die Mühe den Code für dich zu debuggen.
 
  • Gefällt mir
Reaktionen: [ChAoZ] und GroMag
TLDR: Du hat gravierendere Probleme als deine Fehlermeldungen!

Quelltext und generell alles wo es auf Einrückungen ankommt bitte in <CODE></CODE> (<> durch [] ersetzen!) einbetten!
Code:
ich bin
    ein Code
        Block

Allgemeiner Tip, Kommentare, Variablennamen und alles Andere in englischer Sprache zu verfassen. Die aller meisten Programmiersprachen basieren auf Englisch genauso wie die Eigennamen der Sprachkonzepte/Eigenarten der Programmiersprache wie auch der originalen Dokumentation.

Dein Debugging via printf echo, auch das ist schlechter Stil. Lass Fehlerausgaben in ein Logfile schreiben aber NIE (auch zu Entwicklungszwecken) in Richtung Nutzerinterface! Fehlermeldungen freut Angreifer und ein "das lösche ich noch bevor es live geht" geht regelmäßig schief.

Deine Kommentare.. Du kommentierst solche Sachen wie "Neue Verbindung". Was der Code macht, geht aus dem Code hervor, gerade wenn es simpelste Einzeiler sind. Zum Lernen mag das in Ordnung sein, an sich ist der Kommentar jedoch sinnlos. Zudem enthalten deine Kommentare immer wieder kleinere Rechtschreibfehler (Quellcode inkl. Kommentare sollte bestmöglich durchsuchbar sein. Kleine Rechtschreibfehler erschweren die Suche!)

SQL Abfrage, nutze stored Procedures und/oder prepared Statements! Das SQL Statement so zusammenzubauen wie du es implementiert hast erlaubt SQL Injection.

Benutzernamen "root" AHHHHHHHHHH
NEIN! "root" NIE NIE NIE NIE NIE verwenden egal wo. Alles was nach Außen zeigt MUSS über Nutzer erfolgen, die gerade so genügend Rechte auf der Datenbank/dem System haben dass die Anwendung funktioniert und niemals mehr!

Was die Fehlermeldung angeht. Ohne DB-Schema lässt sich da wenig zu sagen. Alles in allem, solltest du das alles sowieso neu schreiben.

Edit:
Wenn du schon dabei bist. Richtig guter Stil wäre es noch HTML und PHP so gut wie möglich zu trennen. Das macht die Sache zum einen übersichtlicher, erlaubt es Funktionalitäten zu kapseln und erleichtert das Arbeiten mit Versionsverwaltung. Macht es am Anfang etwas aufwendiger, lohnt aber recht schnell.
 
Zuletzt bearbeitet: (Typo und Ergänzung)
  • Gefällt mir
Reaktionen: [n]ARC und Der Lord
Rein aus der Fehlermeldung raus, würde ich sagen, dein Forumlar enthält kein Feld mit dem Namen "tfKdnr".
PHP:
$Kdnr = $_POST ['tfKdnr'];

Versuch einfach mal das POST komplett auszugeben, dann siehst du, was alles enthalten ist. Lt. Deinem Code sollte es das Feld ja geben.

Daraus ergeben sich die Folgefehler, da das Ergebnis keine Werte enthält.
 
  • Gefällt mir
Reaktionen: reymysteriode
michi174 schrieb:
Rein aus der Fehlermeldung raus, würde ich sagen, dein Forumlar enthält kein Feld mit dem Namen "tfKdnr".
PHP:
$Kdnr = $_POST ['tfKdnr'];

Versuch einfach mal das POST komplett auszugeben, dann siehst du, was alles enthalten ist. Lt. Deinem Code sollte es das Feld ja geben.

Daraus ergeben sich die Folgefehler, da das Ergebnis keine Werte enthält.
Wie meinst POST komplett auszugeben ? nur zum test echo befehl rein machen?
Ergänzung ()

Der Lord schrieb:
Der Code ist ja abenteuerlich! Dazu auch noch saugefährlich, da keinerlei Prüfung erfolgt vor Übergabe an den SQL-Server (Stichwort: SQL Injection). Könntest dir diesbezüglich auch mal PDO näher anschauen.

Verwende doch bitte hier im Forum die Code-Tags, damit deine Helfer den Code leichter überblicken können. So hingerotzt hingeklatscht bekommt man ja Kopfschmerzen - sollte für jemanden, der hier seit 7 Jahren dabei ist, eigentlich selbstverständlich sein. Etwas mehr Mühe bei der Fehlerbeschreibung wäre ebenfalls wünschenswert.

Wenn du es etwas übersichtlicher präsentierst, macht sich bestimmt auch jemand die Mühe den Code für dich zu debuggen.

Niemals benutzt ^^
Ergänzung ()

Piktogramm schrieb:
TLDR: Du hat gravierendere Probleme als deine Fehlermeldungen!

Quelltext und generell alles wo es auf Einrückungen ankommt bitte in <CODE></CODE> (<> durch [] ersetzen!) einbetten!
Code:
ich bin
    ein Code
        Block

Allgemeiner Tip, Kommentare, Variablennamen und alles Andere in englischer Sprache zu verfassen. Die aller meisten Programmiersprachen basieren auf Englisch genauso wie die Eigennamen der Sprachkonzepte/Eigenarten der Programmiersprache wie auch der originalen Dokumentation.

Dein Debugging via printf echo, auch das ist schlechter Stil. Lass Fehlerausgaben in ein Logfile schreiben aber NIE (auch zu Entwicklungszwecken) in Richtung Nutzerinterface! Fehlermeldungen freut Angreifer und ein "das lösche ich noch bevor es live geht" geht regelmäßig schief.

Deine Kommentare.. Du kommentierst solche Sachen wie "Neue Verbindung". Was der Code macht, geht aus dem Code hervor, gerade wenn es simpelste Einzeiler sind. Zum Lernen mag das in Ordnung sein, an sich ist der Kommentar jedoch sinnlos. Zudem enthalten deine Kommentare immer wieder kleinere Rechtschreibfehler (Quellcode inkl. Kommentare sollte bestmöglich durchsuchbar sein. Kleine Rechtschreibfehler erschweren die Suche!)

SQL Abfrage, nutze stored Procedures und/oder prepared Statements! Das SQL Statement so zusammenzubauen wie du es implementiert hast erlaubt SQL Injection.

Benutzernamen "root" AHHHHHHHHHH
NEIN! "root" NIE NIE NIE NIE NIE verwenden egal wo. Alles was nach Außen zeigt MUSS über Nutzer erfolgen, die gerade so genügend Rechte auf der Datenbank/dem System haben dass die Anwendung funktioniert und niemals mehr!

Was die Fehlermeldung angeht. Ohne DB-Schema lässt sich da wenig zu sagen. Alles in allem, solltest du das alles sowieso neu schreiben.

Edit:
Wenn du schon dabei bist. Richtig guter Stil wäre es noch HTML und PHP so gut wie möglich zu trennen. Das macht die Sache zum einen übersichtlicher, erlaubt es Funktionalitäten zu kapseln und erleichtert das Arbeiten mit Versionsverwaltung. Macht es am Anfang etwas aufwendiger, lohnt aber recht schnell.

es ist schon in zwei verschiedene datein getrennt.
wie meinst du kein root mit was denn sonst ?

Und dieser code der php teil ist schon geschrieben wurden und ich wolte nur die abfrage testen ob es überhaupt geht weil in den nächsten aufgaben kommen noch pw und noch andere geschichten...
 
Zuletzt bearbeitet:
reymysteriode schrieb:
Notice: Undefined variable: abfrageErbenis in D:\S20\EigeneDateien\myPHP\kdsuch1\kdsuch1.php on line 33
Du nennst es mal $abfrageErbenis und mal $abfrageErgebnis
reymysteriode schrieb:
$abfrageErgebnis = $dbVerbindung->query($SQL);
if($abfrageErbenis->num_rows == 0)
 
  • Gefällt mir
Reaktionen: reymysteriode
reymysteriode schrieb:
wie meinst du kein root mit was denn sonst ?
Datenbanknutzer anlegen, der nur für die notwendigen Datenbanken (und nicht wie root tendenziell das ganze DBS!) Rechte besitzt und diese Rechte soweit wie möglich beschränken. Gleiches für den darunter liegenden Webserver, der sollte im Kontext eines Nutzers laufen, der ausschließlich berechtigt ist die notwendigen Daten für den Webservice zu lesen (und nur wenn es sein muss zu schreiben!).
Da es bei dir etwas nach Schule/uni klingt. Grüße an die Lehrkraft, die Nutzerverwaltung von Servern, Datenbanken und generell allem sollte die aller erste Übung sein. Falsch gesetzte Berechtigungen sind ein Kardinalfehler.

Und dieser code der php teil ist schon geschrieben wurden und ich wolte nur die abfrage testen ob es überhaupt geht weil in den nächsten aufgaben kommen noch pw und noch andere geschichten...
Die Person die den Mist verzapft hat auffordern diesen Fehler zu beseitigen. Gerade wenn danach solche Sachen wie Nutzerkennungen kommen. Mit so ner Lücke können Angreifer Nutzernamen, Kennung und sonstige Daten exportieren und dann fröhlich Passwörter knacken.
Es sollte auch im Ansinnen als Lernender sein sowas ab zu stellen. Das ist für jeden Abgang der Lehreinrichtung rufschädigend, wenn bei umliegenden Firmen bekannt wird, dass die Lehre derart beschissen ist oO

PS: Den Quelltext jetzt noch mit sinnvollen Einrückungen und Zeilenumbrüchen. Denk dran, du willst, dass Andere deinen Code lesen. Mach es jenen die helfen wollen so einfach wie möglich.
 
  • Gefällt mir
Reaktionen: Der Lord
Piktogramm schrieb:
Datenbanknutzer anlegen, der nur für die notwendigen Datenbanken (und nicht wie root tendenziell das ganze DBS!) Rechte besitzt und diese Rechte soweit wie möglich beschränken. Gleiches für den darunter liegenden Webserver, der sollte im Kontext eines Nutzers laufen, der ausschließlich berechtigt ist die notwendigen Daten für den Webservice zu lesen (und nur wenn es sein muss zu schreiben!).
Da es bei dir etwas nach Schule/uni klingt. Grüße an die Lehrkraft, die Nutzerverwaltung von Servern, Datenbanken und generell allem sollte die aller erste Übung sein. Falsch gesetzte Berechtigungen sind ein Kardinalfehler.


Die Person die den Mist verzapft hat auffordern diesen Fehler zu beseitigen. Gerade wenn danach solche Sachen wie Nutzerkennungen kommen. Mit so ner Lücke können Angreifer Nutzernamen, Kennung und sonstige Daten exportieren und dann fröhlich Passwörter knacken.
Es sollte auch im Ansinnen als Lernender sein sowas ab zu stellen. Das ist für jeden Abgang der Lehreinrichtung rufschädigend, wenn bei umliegenden Firmen bekannt wird, dass die Lehre derart beschissen ist oO
aso das haben wir schon längst gemacht ist ja erst nur dafür da zum lernen.
weis net ob das hier klar ist aber ich will keine firma oder irgendwas anderes gründen :D
Ergänzung ()

Coolinger schrieb:
Du nennst es mal $abfrageErbenis und mal $abfrageErgebnis
DANKE das hab ich gebraucht mehr auch net :)
ich dacht schon hab grundlegende Sachen falsch gemacht aber vielen dank das paar leute gescheite hilfe geben :)
 
Zuletzt bearbeitet:
Das was du lernst ist teils gefährlich und schlechter Stil und über einmal gelerntes drüber zu lernen ist tendenziell schwerer als es gleich richtig zu lernen.

Respekt an @Coolinger, dass er sich den Code so genau angetan hat.
 
  • Gefällt mir
Reaktionen: Hayda Ministral und yodatierchen
Guten Abend zusammen.
reymysteriode schrieb:
DANKE das hab ich gebraucht mehr auch net :)
ich dacht schon hab grundlegende Sachen falsch gemacht aber vielen dank das paar leute gescheite hilfe geben :)

Ich finde schon das @Piktogramm gescheite Hilfe gegeben hat - gerade weil es vielleicht eine "Hausaufgabe" oder eine "Übung" ist, sollte man's schon richtig machen - auch hier einen Gruß an die Lehrkraft!

Und auch dein Eröffnung-Post hat nicht mal wirklich eine Frage "intus".

Schade das immer mehr einfach hingeschmissene Sachlagen vorgesetzt werden,
ohne auch nur mal ansatzweise Anderen einen Kontext zu geben. :(

Dann wäre Dir der Typo auch aufgefallen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Der Lord
yodatierchen schrieb:
Guten Abend zusammen.


Ich finde schon das @Piktogramm gescheite Hilfe gegeben hat - gerade weil es vielleicht eine "Hausaufgabe" oder eine "Übung" ist, sollte man's schon richtig machen - auch hier einen Gruß an die Lehrkraft!

Und auch dein Eröffnung-Post hat nicht mal wirklich eine Frage "intus".

Schade das immer mehr einfach hingeschmissene Sachlagen vorgesetzt werden,
ohne auch nur mal ansatzweise Anderen einen Kontext zu geben. :(

Dann wäre Dir der Typo auch aufgefallen.
Wie gesagt der code ist schon geschrieben man solte es erweitern in den folgenden aufgaben.
Und es wird Später noch weiter vertieft warum das ganze usw.
mein einziges anliegen war das es klappen soll und mir klar ist da wichtige sachen wie Benutzerverwaltungen usw fehlen.
aber wenn du es so schade findes dann kannst du ruhig selber ein script erstellen wo du dieses thema erklärst, aufgaben dazu, vertiefungen usw. :)
 
reymysteriode schrieb:
Wie gesagt der code ist schon geschrieben man solte es erweitern in den folgenden aufgaben.
Das war im Anfangsposting nicht erwähnt. Da wurde einfach nur Code, anfangs sogar ohne Formatierung, hingeklatscht ohne sich auch nur ansatzweise Mühe dabei zu geben das Thema für die Helfer etwas genauer zu beschreiben.

reymysteriode schrieb:
mir klar ist da wichtige sachen wie Benutzerverwaltungen usw fehlen.
Du hast offensichtlich die berechtigte Kritik am Code nicht verstanden. Es ging nicht um den Funktionsumfang des gezeigten Codes, sondern um dessen absolut schlechte Qualität. Es werden beispielsweise Aspekte wie SQL-Injection, sinnvolle Benennung der Variablen, usw. nicht behandelt. Und da es offensichtlich um Kundendaten geht, ist diese Vorgehenweise einfach fatal und grob fahrlässig, da liegt es doch auf der Hand, dass bei einigen hier die Alarmglocken läuten.
Verstehe diese Kritik nicht falsch oder nimm es gar persönlich, vielmehr soll es als Motivation dienen den Code zu verbessern bzw. verbessern zu lassen! :)
 
Zurück
Oben