Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] sql Tabelle mittels php ausgeben, wo ist der fehler?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] sql Tabelle mittels php ausgeben, wo ist der fehler?

    Hallo Liebe Community,

    für ein Schulkonzert entschieden wir das Ticketing mittels einer SQL-DB zu vereinfachen.
    Nun treten allerdings einige Fehler auf, welche ich mit meinen mageren php-Kenntnissen nicht beseitigt bekomme.

    Das folgende Script soll mittels einer HTML-Maske die Bestellungen durchsuchen, ganz gleich ob man nun die Kunden-Nr., Name oder E-Mail weiß:

    PHP-Code:
    $verbindung mysql_connect("---""---" "---")
    or die(
    "Verbindung zur Datenbank konnte nicht hergestellt werden");

    mysql_select_db("---") or die ("Datenbank konnte nicht ausgewählt werden");

    //Diese Daten kommen aus dem HTML-Formular
    $kunde $_POST["kunde"];
    $name $_POST["name"];
    $first_name $_POST["first_name"];
    $email $_POST["email"];


    $erg mysql_query('SELECT * FROM `brecords_medien.Bestellungen` WHERE `Name` = "$name%" or `Kd.Nr` = "$kunde%" or `Vorname` = "$first_name%" or `E-Mail` = "$email%"');
    $row mysql_num_rows($erg);  


    if (
    $row 1)
    {
    echo 
    "Keine Datensätze gefunden";
    }

    else    
    {
    echo 
    "<table border =\"1\">\n"
    echo 
    "<tr>\n";
    echo 
    "<th>Kd.Nr</th><th>Name</th><th>Vorname</th>
    <th>E-Mail</th><th>Tag1</th><th>Tag2</th><th>Bezahlt</th>\n"

    echo 
    "</tr>\n"

    while(
    $ausgabe mysql_fetch_object($erg))
    {
    echo 
    "<tr>\n";
    for(
    $i=0$i<mysql_num_fields($erg); $i++)
    {
    echo 
    "<td>" $ausgabe[$i] . "</td>\n";    
    }
    echo 
    "</tr>\n";
    }
    echo 
    "</table>\n";    

    }

    mysql_close()


    ?> 
    Leider bekomme ich immer die Fehler-Meldung "Keine Datensätze gefunden"

    Für Hilfe wäre ich unendlich dankbar!


  • #2
    Variablen in einem String, der mit ' begrenzt wird, werden nicht geparst. Deshalb bekommt dein DB-Server diese Anfrage:

    SELECT * FROM `brecords_medien.Bestellungen` WHERE `Name` = "$name%" or `Kd.Nr` = "$kunde%" or `Vorname` = "$first_name%" or `E-Mail` = "$email%"
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Laut der SQL -Konsole der Datenbank funktioniert genau dieser Befehl

      Kommentar


      • #4
        Hi,

        PHP-Code:
        $erg mysql_query('SELECT * FROM `brecords_medien.Bestellungen` WHERE `Name` = "$name%" or `Kd.Nr` = "$kunde%" or `Vorname` = "$first_name%" or `E-Mail` = "$email%"'); 
        SQL Injection Problem + mysql_* ist veraltet. Ihr soltlet auf PDO oder mysqli umsteigen. Zudem sollte * nur in den seltensten Fällen genutzt werden, da man meist nicht alle Spalten als Rückgabe benötigt!!

        Schreib mal so:

        PHP-Code:
        $erg mysql_query("SELECT * FROM brecords_medien.Bestellungen WHERE Name = '%".mysql_real_escape_string($name)."%' or Kd.Nr = '%".mysql_real_escape_string($kunde)."%' or Vorname = '%".mysql_real_escape_string($first_name)."%' or E-Mail = '".$email."%'") or die("Error: ".mysql_error()); 
        mfg wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          @dickesB

          Ein Beispiel:
          PHP-Code:
          <?php

             $var 
          "Welt";
             
             echo 
          "Hallo $var<br>";
             
             echo 
          'Hallo $var<br>';
             
          ?>
          Ausgabe:
          Hallo Welt
          Hallo $var
          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

          Kommentar


          • #6
            @uha
            Ich habe es jetzt so geschrieben:
            PHP-Code:
            $erg mysql_query("SELECT * FROM `brecords_medien.Bestellungen` WHERE `Name` = '$name%' or `Kd.Nr` = ‚$kunde%' or `Vorname` = '$first_name%' or `E-Mail` = '$email%'"); 
            was leider auch nicht funktionierte und die selbe Fehlermeldung zurück gab.

            @wolf29
            Ich habe die zeile so übernommen, leider gibt er jetzt nicht mal mehr die Fehlermeldung der Schleife zurück

            Vielen Danks chon mal für die schnellen Antowrten!

            Kommentar


            • #7
              PHP-Code:
              WHERE `Name` = '$name%' or `Kd.Nr` = ‚$kunde%
              Hast dich vertippt.
              Relax, you're doing fine.
              RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

              Kommentar


              • #8
                Wenn ich die zeile so schreibe:
                PHP-Code:
                $erg mysql_query("SELECT * FROM brecords_medien.Bestellungen WHERE Name = '%".mysql_real_escape_string($name)."%' or Kd.Nr = ‚%".mysql_real_escape_string($kunde)."%' or Vorname = '%".mysql_real_escape_string($first_name)."%' or E-Mail = '".$email."%'") or die("Error: ".mysql_error()); 
                dann bekomme ich die Fehlermeldung: Error: Unknown column 'Kd.Nr' in 'where clause'

                Kommentar


                • #9
                  dann bekomme ich die Fehlermeldung: Error: Unknown column 'Kd.Nr' in 'where clause'
                  ...hast Dich auch vertippt! Schau Dir nochmal die Zeile an

                  ...Kd.Nr =%".mysql_real_escape_string($kunde)."%'...

                  warum hast du meine Zeile nicht einfach kopiert?
                  while (!asleep()) sheep++;

                  Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                  Kommentar


                  • #10
                    @wolf29 ...tatsächlich, sorry ich benutze derzeit Editra (Mac) und beim kopieren wandelt das immer sämtliche Hochkommas um :/
                    dennoch kommt die selbe Fehlermeldung

                    Mit dieser Zeile konnte ich jetzt einen Erfolg erzielen:
                    PHP-Code:
                    $erg mysql_query("SELECT * FROM `Bestellungen` WHERE `Name` = '$name%' or `Kd.Nr` = ‚$kunde%' or `Vorname` = '$first_name%' or `E-Mail` = '$email%'"); 
                    Wenn ich keine / falsche Daten eingebe, kommt die Fehlermeldung „Keine Datensätze...“
                    gebe ich aber was korrektes ein, so bekomme ich den Tabellen Kopf mit allen Spalten, leider bisher OHNE Inhalt

                    Kommentar


                    • #11
                      Du fetchst ein Objekt, greifst aber auf ein Array zu. In meiner Signatur siehst du, wie man Error_Reporting aktiviert und Fehler anzeigen lässt.

                      Standardtext für die Datenbankverbindung:
                      Die mysql_* Erweiterung ist veraltet und wird in der nächsten PHP-Version entfernt.
                      Durch einen Wechsel auf mysqli_* oder PDO greifst du auf die modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections schützen.
                      Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
                      Relax, you're doing fine.
                      RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                      Kommentar


                      • #12
                        Mit dieser Zeile konnte ich jetzt einen Erfolg erzielen:
                        ...wundert mich nicht, ist ja auch syntaktisch falsch. Ich verweise nochmal auf meine Post's und Anmerkungen von VPh.

                        EDIT: ist Kd.Nr ein Spaltenname oder gibt es die Tabelle Kd??
                        while (!asleep()) sheep++;

                        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

                        Kommentar


                        • #13
                          PHP-Code:
                          $kunde mysql_real_escape_string($_POST["kunde"]);
                          $name mysql_real_escape_string($_POST["name"]);
                          $first_name mysql_real_escape_string($_POST["first_name"]);
                          $email mysql_real_escape_string($_POST["email"]);


                          $query "SELECT
                                        `Name`,
                                        `Kd.Nr`,
                                        `Vorname`
                                       FROM 
                                         `Bestellungen` 
                                       WHERE 
                                         `Name` = '
                          $name
                                        or 
                                         `Kd.Nr` = '
                          $kunde
                                        or 
                                         `Vorname` = '
                          $first_name
                                        or 
                                         `E-Mail` = '
                          $email%'";
                                         
                          $result mysql_query($query)
                            or die (
                          "MySQL-Error: " mysql_error()); 
                          Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

                          Kommentar


                          • #14
                            @wolf29 „Kd.Nr“ ist ein Spaltenname die Tabelle heißt nur „Bestellungen“

                            @uha, werde es gleich probieren, vielen Dank

                            Ergebnis:
                            Wie vorher wenn kein Daten/Fehlerhaft = Keine Datensätze gefunden
                            Wenn richtige Daten = Tabellen Kopf OHNE Inhalt

                            der von VPh empfohlenen Error-Report gibt folgendes aus:
                            Fatal error: Cannot use object of type stdClass as array in /customers/0/a/0/brecords-medien.de/httpd.www/avh-Konzert/suchen.php on line 69

                            das ist folgende Zeile im Script:
                            PHP-Code:
                            echo "<td>" $ausgabe[$i] . "</td>\n"

                            Kommentar


                            • #15
                              PHP-Code:
                              echo "<td>" $ausgabe[$i] . "</td>\n"

                              hier benutzt du
                              PHP-Code:
                              mysql_fetch_array() 
                              und in der while-schleife haste deine
                              PHP-Code:
                              $ausgabe 
                              mit
                              PHP-Code:
                              mysql_fetch_object() 
                              deklariert

                              Kommentar

                              Lädt...
                              X