Ankündigung

Einklappen
Keine Ankündigung bisher.

Form gibt eingaben nicht weiter liegts am operator ?

Einklappen

Neue Werbung 2019

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

  • Form gibt eingaben nicht weiter liegts am operator ?

    hi leute wieder mal ein kleines prob vielleicht könnt ihr mir helfen

    ich habe ein textform mit 2 eingabefeldern und füge diese nach abschicken zusammen
    wenn ich die werte eingebe und abschicke kommt bei der php seite nichts an warum?

    Code:
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Unbenanntes Dokument</title>
    </head>
    <body>
    Bitte geben Sie Ihre Schlüsselnummern zu 2.1 und zu 2.2 ein
    
    <form action = "test.php" method = "post">
    <input type="text" maxlength="4" name="zu21"> zu2.1<p>
    <input type="text" maxlength="3" name="zu22"> zu2.2</p>
    <input type="submit" name="submit" value="Submit" />
    <input type="reset">
    </form>
    </body>
    </html>


    hier die test.php

    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
     
    require_once (
    'dbconnect.php');

    $a '$_POST["zu21"]'
    $b '$_POST["zu22"]';


    $db_link mysqli_connect (MYSQL_HOST
                               
    MYSQL_BENUTZER
                               
    MYSQL_KENNWORT
                               
    MYSQL_DATENBANK);

    mysqli_set_charset($db_link'utf8');

    echo 
    $sql "SELECT * FROM kba WHERE KBANR= '$a' . '$b'"
     
    $db_erg mysqli_query$db_link$sql );
    if ( ! 
    $db_erg )
    {
      die(
    'Ungültige Abfrage: 'mysqli_error());
    }
     
    echo 
    '<table border="5">';
    while (
    $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC))
    {
      echo 
    "<tr>";
      echo 
    "<td>"$zeile['HERSTELLER'] . "</td>";
      echo 
    "<td>"$zeile['MODELL'] . "</td>";
      echo 
    "<td>"$zeile['TYP'] . "</td>";
      echo 
    "<td>"$zeile['CCM'] . "</td>";
      echo 
    "<td>"$zeile['KW'] . "</td>";
      echo 
    "<td>"$zeile['PS'] . "</td>";
      echo 
    "<td>"$zeile['ZYL'] . "</td>";
      echo 
    "</tr>";
    }
    echo 
    "</table>";
     
      
    mysqli_free_result$db_erg );




    ?>
    danke schonmal im vorraus

  • #2
    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
    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
      PHP-Code:
      $a '$_POST["zu21"]';  
      $b '$_POST["zu22"]'
      zu:

      PHP-Code:
      $a $_POST["zu21"];  
      $b $_POST["zu22"]; 
      - Strings in ' ' werden nicht geparst, dh in deiner Variable $a steht genau der String $_POST["zu21"] Du willst aber auf das $_POST-Array zugreifen.

      - Im Zweifelsfall nen print_r() oder var_dump() auf $_POST machen und schauen das "drinnen" ist und dann halt noch korrekt darauf zugreifen.

      PHP-Code:
      echo $sql "SELECT * FROM kba WHERE KBANR= '$a' . '$b'"
      SQL-INjection-Gefahr! http://php-de.github.io/jumpto/sql-injection/

      LG
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        hi danke für die antworten

        @ uha

        hab vieles versucht deswegen steht auch noch das "echo" vor $sql im code

        @ hausl

        danke für den tip mit ' ' (stimmt da war was) was die sql abfrage betrifft weiß ich das sie so nicht sicher ist im fertigen script frag ich die betreffende zeile direkt ab leider ist die spalte bei den meisten datensätzen noch leer weshalb ich zu SELECT * gegriffen hab aber trotzdem danke werd das gleichmal versuchen

        grüße




        hab das grad versucht mit ' ' jetzt übernimmt er die eingaben auch in die sql abfrage muß ich bei dem operator noch was beachten das er das richtig zusammenfügt denn jetzt gibt er mir das aus

        0591384
        SELECT * FROM kba WHERE KBANR= '0591' . '384'
        Warning: mysqli_error() expects exactly 1 parameter, 0 given in D:\xampp\htdocs\test.php on line 22
        Ungültige Abfrage:

        line 22 = Ungültige Abfrage:




        Läuft hab grad noch was geändert jetzt gehts
        hab variablen $a und $b zu $c zusammengesetzt vor der sql abfrage und nur $c in die sql abfrage reingenommen

        für alle die es interessiert hier der code

        PHP-Code:
        <?php
        error_reporting
        (E_ALL);
         
        require_once (
        'dbconnect.php');

        echo 
        $a $_POST["zu21"];
        echo 
        $b $_POST["zu22"];
        echo 
        $c "$a"$b";

         
        $db_link mysqli_connect (MYSQL_HOST
                                   
        MYSQL_BENUTZER
                                   
        MYSQL_KENNWORT
                                   
        MYSQL_DATENBANK);

         
        mysqli_set_charset($db_link'utf8');

        echo 
        $sql "SELECT * FROM kba WHERE KBANR= '$c'"
         
         
        $db_erg mysqli_query$db_link$sql );
        if ( ! 
        $db_erg )
        {
          die(
        'Ungültige Abfrage: 'mysqli_error());
        }
         
        echo 
        '<table border="5">';
        while (
        $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC))
        {
          echo 
        "<tr>";
          echo 
        "<td>"$zeile['HERSTELLER'] . "</td>";
          echo 
        "<td>"$zeile['MODELL'] . "</td>";
          echo 
        "<td>"$zeile['TYP'] . "</td>";
          echo 
        "<td>"$zeile['CCM'] . "</td>";
          echo 
        "<td>"$zeile['KW'] . "</td>";
          echo 
        "<td>"$zeile['PS'] . "</td>";
          echo 
        "<td>"$zeile['ZYL'] . "</td>";
          echo 
        "</tr>";
        }
        echo 
        "</table>";
         
          
        mysqli_free_result$db_erg );




        ?>

        Kommentar


        • #5
          Immer noch! Bitte lass das nicht ausser Acht!

          Nutze zumindest mysqli_real_escape_string() oder besser Prepared Statements, Info zB: http://www.peterkropff.de/site/mysql...statements.htm

          Und als Anmerkung noch: http://php-de.github.io/jumpto/code-smells/#select-

          LG
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Hey Hausl,

            wieso nicht mysqli_fetch_array ?
            Was sind Prepared Statements ?

            Danke LG

            Kommentar


            • #7
              Lies dir bitte mal den ersten Absatz in meinem Link oben durch: http://php-de.github.io/jumpto/sql-injection/

              mysqli_fetch_array() hat damit nichts zu tun, da ist es schon zu spät, weil die query schon "gelaufen" ( mysqli_query() ) ist.

              Es geht darum das eine unabgesicherte Query über Parameter von "aussen" (hier POST) mit allen möglichem Mist gefüttert und ausgeführt werden kann.
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Achso. Ich war verwirrt.
                Vielen Dank.

                Kommentar


                • #9
                  Mit allem möglichen mist meint hausl insbesondere das sich jemand seinen eigenen MYSQL Admin Account für deine Datenbank anlegen kann oder seine eigenen Dateien auf den Server hochläd die ihm dann ermöglichen deinen gesamten Server zu übernehmen.

                  Also für dich ziemlich unschöne Dinge

                  Kommentar


                  • #10
                    geht das (sql injection) auch wenn man text felder mit maxlength sagt zb nur 4 oder 3 zeichen?
                    mit mysqli_real_escape_string müßte ich ja dann auf die variablen beziehen ($a und $b) oder soll ich as auf die $sql variable legen ?

                    grüße

                    Kommentar


                    • #11
                      geht das (sql injection) auch wenn man text felder mit maxlength sagt zb nur 4 oder 3 zeichen?
                      Ja, das ist keine Hürde, weil ich ja zB ein manipuliertes Formlar (ich bastle mir selbst eines in eine HTML-Datei) verwenden kann und an deine Seite schicken kann die als action-Ziel definiert ist. Oder ich mache einen Post-Request über AJAX, oder cURL auf deine Seite, da greift die maxlenght nicht, weil die ja nur im Form da ist.

                      mysqli_real_escape_string müßte ich ja dann auf die variablen beziehen
                      Auf die Variablen, die du dann in der Query verwendest, also nicht die Vars an sich ändern nur deren Ausgabe in die Query escapen, zB so:

                      PHP-Code:
                      $sql "SELECT * FROM kba WHERE KBANR= '".mysqli_real_escape_string($db_link$c)."'"
                      Mit einem Augenzwinkern: Falls dir der lange Name der Funktion stört, kannst die ja wrappen

                      Übrigens - Info zu SELECT * http://php-de.github.io/jumpto/code-smells/#select-

                      LG
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        ah ok das das so einfach möglich ist wußte ich nicht
                        teste die scripte erst bei mir aufm rechner deswegen hab ich SELECT * drin
                        wenn die datei aufm server kommt dann sieht sie so aus

                        PHP-Code:
                        <?php


                        require_once ('dbconnect.php');



                         
                        $a $_POST["zu21"];
                         
                        $b $_POST["zu22"];
                         
                        $c "$a"$b";

                         
                        $db_link mysqli_connect (MYSQL_HOST
                                                   
                        MYSQL_BENUTZER
                                                   
                        MYSQL_KENNWORT
                                                   
                        MYSQL_DATENBANK);

                         
                        mysqli_set_charset($db_link'utf8');

                         
                        $sql "SELECT HERSTELLER, MODELL, CCM, KW, PS, ZYL FROM kba WHERE KBANR='" mysqli_real_escape_string($db_link$c) . "'"
                         
                         
                        $db_erg mysqli_query$db_link$sql );
                        if ( ! 
                        $db_erg )
                        {
                          die(
                        'Ungültige Abfrage: 'mysqli_error());
                        }
                         

                        while (
                        $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC))
                        {
                          echo 
                        "<tr>";
                          echo 
                        "<td>"$zeile['HERSTELLER'] . "</td>";
                          echo 
                        "<td>"$zeile['MODELL'] . "</td>";
                          echo 
                        "<td>"$zeile['CCM'] . "</td>";
                          echo 
                        "<td>"$zeile['KW'] . "</td>";
                          echo 
                        "<td>"$zeile['PS'] . "</td>";
                          echo 
                        "<td>"$zeile['ZYL'] . "</td>";
                          echo 
                        "</tr>";
                        }
                          
                        mysqli_free_result$db_erg );




                        ?>
                        trotzdem danke für den tip

                        aber mal was anderes wie bekomme ich es hin das mir das abfrage ergebnis in ein popup geladen wird und ohne das es mir die "test.php" als normal seite anzeigt

                        grüße

                        Kommentar


                        • #13
                          Zitat von Bigbossmen Beitrag anzeigen
                          teste die scripte erst bei mir aufm rechner deswegen hab ich SELECT * drin
                          Das ist kein Grund. Gewöhn dir an immer die Spalten hinzuschreiben die du brauchst.

                          PHP-Code:
                          $a $_POST["zu21"];
                           
                          $b $_POST["zu22"];
                           
                          $c "$a"$b"
                          Variablen werden weder durch sinnloses Umkopieren noch durch einfassen in Anführungszeichen schöner - wozu die Umkopiererei und die Anführungszeichen um $a und $b? Die drei Zeilen lassen sich auch zu einer zusammenfassen die genau das gleiche macht: $c = $_POST["zu21"].$_POST["zu22"]; - wobei $c ein ziemlich dämlicher Name für eine Variable ist, da weiß niemand was da drinsteht …

                          die('Ungültige Abfrage: '. mysqli_error());
                          Mal abgesehen davon dass die() eine genauso sinnvolle Methode zur Fehlerbehandlung ist wie Suizid eine Heilmethode ist: mysqli_error() erwartet einen Parameter.

                          while ($zeile = mysqli_fetch_array( $db_erg, MYSQL_ASSOC))
                          mysqli_fetch_assoc() wäre zu einfach, oder?

                          aber mal was anderes wie bekomme ich es hin das mir das abfrage ergebnis in ein popup geladen wird und ohne das es mir die "test.php" als normal seite anzeigt
                          Was meinst du mit "als normal seite anzeigt"? Willst du ein neues Fenster öffnen oder einfach nur eine Dialogbox über die Seite legen? Ich halte allerdings beides nicht wirklich für sinnvoll …

                          Kommentar


                          • #14
                            das ding mit SELECT * hab ich glaub weiter oben schon gepostet das nicht jede spalte (meistens die die ich brauche) auch daten hat deshalb mache ich das so nehme ich aber daten wie zum beispiel bei einem dropdown dann wähle ich explizit nur das an was ich brauche mehr nicht geht meistens nur darum das die abfrage funktioniert

                            ich mach immer als erstes die abfrage im groben fertig und danach kommt der feinschliff

                            so kann ich bei änderungen besser den überblick behalten wenns dann mal nicht mehr funktioniert

                            was den operator angeht habe ich damit zum ersten mal gearbeitet wenn das so geht wie du es gepostet hast dann werde ich das gleichmal berücksichtigen denn das script soll ja übersichtlich bleiben ^^

                            danke für die tips

                            zu dem popup

                            ich möchte mittels dem obigen script daten aus der db holen diese in einem popup anzeigen wo der nutzer die daten nochmal einsehen kann und mittels button nochmal bestätigt und dann von da zu der seite hinkommt wo er hin will

                            Kommentar


                            • #15
                              Zitat von Bigbossmen Beitrag anzeigen
                              ich möchte mittels dem obigen script daten aus der db holen diese in einem popup anzeigen wo der nutzer die daten nochmal einsehen kann und mittels button nochmal bestätigt und dann von da zu der seite hinkommt wo er hin will
                              Definiere »popup«. Und warum leitest du den User nicht direkt dahin wo er hin will?

                              btw: dir sind anscheinend die Satzzeichen ausgegangen, ich spendier dir mal ein paar: ........................,,,,,,,,,,,,,,?????!!----- - melde dich wenn die nicht reichen sollten.

                              Kommentar

                              Lädt...
                              X