Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Daten aus einer Datenbank auslesen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Daten aus einer Datenbank auslesen

    Hallo zusammen,

    ich habe das Problem das ich Daten aus einer Datenbank in einer Tabelle auslesen will, dies hat soweit auch schon funktioniert.
    Ich will allerdings noch in einer Kopfzeile die Daten von 2 Spalten abgreifen (Beschreibung und Containernummer). Die ersten beiden Datensätze, aus denen er sich dann die Daten für die Kopfzeile holt, werden jetzt jedoch nicht mehr in der Tabelle angezeigt. Wie kann ich das nochmal so zurücksetzten das ich alle Datensätze angezeigt bekomme?

    PHP-Code:
    <html>
    <head>
        <!-- CSS Datei einbinden -->
        <link rel="stylesheet" type="text/css" href="layout.css"> 
        <?php    
        
    include 'connection.php';
        @
    $test=$_POST['suche'];
        
    $sql "SELECT * FROM import WHERE `Containernummer` = '$test' ORDER BY Uhrzeit asc";
        
    $db_erg mysqli_query$db_link$sql );
        
    ?>
    </head>

    <body>
        <table ID="header">
        <tr>
            <td align="left">Lieferant: 
                <?php
                    $zeile 
    mysqli_fetch_array$db_ergMYSQL_ASSOC);
                    echo 
    $zeile['Beschreibung'];
                
    ?>    
            </td>
            <td valign="top" align="right">
                <form action="layout.php" method="post">
                    <input type="button" onclick="window.print();" value="Seite ausdrucken" />
                    <input type="text" name="suche"/>
                    <input type="submit" value="suchen" />
                </form></td>
        </tr>
        <tr>
            <td colspan="2" align="left">Containernummer: 
                <?php
                    $zeile 
    mysqli_fetch_array$db_ergMYSQL_ASSOC);
                    echo 
    $zeile['Containernummer'];
                
    ?>    
            </td>
        </tr>
        </table>
        
        <div id="content">
            <?php
            
    // Erstelle Tabelle
            
    echo '<table border="1", class="tabelle" style="float">';
            while (
    $zeile mysqli_fetch_array$db_ergMYSQL_ASSOC))
            {
                echo 
    "<tr>";
                echo 
    "<td>"$zeile['Containernummer'] . "</td>";
                echo 
    "<td>"$zeile['Uhrzeit'] . "</td>";
                echo 
    "<td>"$zeile['Stoff1'] . "</td>";
                echo 
    "<td>"$zeile['Menge1'] . "</td>";
                echo 
    "<td>"$zeile['Einheit1'] . "</td>";
                echo 
    "<td>"$zeile['Prozent1'] . "</td>";
                echo 
    "</tr>";
            }
            echo 
    "</table>";
            
    ?>        
        </div>
        <p ID="footer">Footer</p>
    </body>
    </html>
    Mit freundlichen Grüßen
    Thomas C


  • #2
    Der Reihe nach
    - Du bist anfällig gegen SQL-Injection (und andere Arten von Injection
    - Ich empfehle die Verwendung einer Template-Engine (wie z.B. Twig)
    - Dein Datenbankschema wird wohl verkorkst sein, wenn die ersten zwei Zeilen einer Tabelle die "Titel" darstellen...

    Es gibt zwei Möglichkeiten:
    - Zwischenspeichern in einem Array und dadurch iterieren
    - http://cz.php.net/manual/en/mysqli-stmt.data-seek.php
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      Um SQL-Injection muss ich mir wenig sorgen machen, da dies lediglich in unser Intranet eingebunden wird.
      Was genau mach diese Template-Engine?
      Keine Zeile einer Tabelle stellt einen "Titel" da. Ich brauche lediglich in der Kopfzeile diese 2 Felder noch einmal separat angezeigt.

      Kommentar


      • #4
        Und deswegen brauchst du dir keine Gedanken um Sicherheit zu machen? Manchmal frage ich mich, wo ihr euren Abschluss her habt...

        Was eine Template-Enginge ist? Das lässt du schon Google, Wikipedia oder (wow!) die Dokumentation von Twig, Smarty oder ähnlichem beantworten.

        Ja, und genau das scheint mir komisch zu sein, aber ist ja dein Bier ...
        GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

        Kommentar


        • #5
          Zitat von Thomas C Beitrag anzeigen
          Um SQL-Injection muss ich mir wenig sorgen machen, da dies lediglich in unser Intranet eingebunden wird.
          Was genau mach diese Template-Engine?
          Was ist wenn in irgendeinem String der von irgendwo Importiert wird gültiges SQL steht und das durch Zufall im falschen Formularfeld landet? Der entsprechende Mitarbeiter merkt vielleicht nicht einmal, das er eure Datenbank in Brand steckt. Und über Mitarbeiter, die nach der Kündigung noch einen letzten Racheakt planen will ich mir erst recht keine Gedanken machen.

          Eine Templateengine trennt B.Logik von Präsentation (viele Engines haben dazu noch erweiterte Funktionalität, kümmern sich z.B. ums escaping, ermöglichen dir die Einbindung von sich wiederholenden Bausteinen zu vereinfachen etc...) Kannst du auch mit PHP an sich erreichen, erfordert aber eine größere Konsequenz in der Umsetzung deinerseits(Die meisten Templateengines "übersetzen" ohnehin dein Template nach PHP). Die bekanntesten Engines sind wohl Twig, Smarty (konnte mich persönlich nie damit anfreunden), Plates, Blade (bei der Verwendung von Laravel) und vermutlich tausende andere kleinere oder mir nicht präsente.

          Für kleine Projekte spricht aber wohl nicht viel gegen, wenn dir EVA-Prinzipien nicht schwer fallen.

          PHP-Code:
          // home.template.php
          <ul>
              <?php foreach($elements as $element): ?>
                  <li>Name: <?=e($element->name)?>
              <?php endforeach; ?>
          </ul>
          http://php.net/manual/de/control-str...ive-syntax.php
          http://twig.sensiolabs.org/
          http://platesphp.com/
          Zitat von nikosch
          Naja, anscheinend spricht die Steckdose kein HTTP. LOL

          Kommentar


          • #6
            PHP-Code:
            @$test=$_POST['suche']; 
            Und das tut man auch nicht, man unterdrückt keine Fehler sondern behandelt /löst diese sauber auf.

            Mach stattdessen zB so:

            PHP-Code:
            $test = isset($_POST['suche']) ? $_POST['suche'] : null
            Das ist das gleiche Verhalten, nur sauber ausformuilert.
            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


            • #7
              @hausl: ist geändert

              Leider verstehe ich immer noch nicht so ganz warum ich jetzt eine extra Template Engine dafür brauche

              Was genau kann ich denn gegen SQL-Injections machen? Wenn ich google kommt leider nur wie man SQL-Injections macht...

              Vielen Dank.

              Kommentar


              • #8
                Zitat von Thomas C Beitrag anzeigen
                Was genau kann ich denn gegen SQL-Injections machen?
                In deinem Fall: http://de2.php.net/manual/de/mysqli....ape-string.php
                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


                • #9
                  Was genau kann ich denn gegen SQL-Injections machen?
                  http://php.net/manual/de/mysqli.real-escape-string.php

                  oder

                  http://www.peterkropff.de/site/mysql...statements.htm
                  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


                  • #10
                    Allerdings muss ich jetzt zuerst mal das Problem mit den 2 "verschwundenen" Zeilen lösen, bevor ich mich um die SQL-Injections kümmern kann.
                    Irgendjemand dafür eine Idee?

                    Kommentar


                    • #11
                      Zitat von Thomas C Beitrag anzeigen
                      Irgendjemand dafür eine Idee?
                      Erste Anwort letzte Zeile.

                      Zitat von Thomas C Beitrag anzeigen
                      Allerdings muss ich jetzt zuerst mal das Problem mit den 2 "verschwundenen" Zeilen lösen, bevor ich mich um die SQL-Injections kümmern kann.
                      Das eine hat mit dem anderen nix zu tun.

                      Kommentar


                      • #12
                        Falls sonst noch jemand noch das Problem hat:

                        Die SQL-Abfrage einfach vor der Schleife, also vor dem ausgeben der Tabelle nochmal neu ausführen.

                        Kommentar


                        • #13
                          So ein Blödsinn.

                          Falls sonst noch jemand noch das Problem hat:

                          Lese er bitte aufmerksam den Thread. Da wird die Lösung nämlich genannt.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar


                          • #14
                            Wieder einer, der unbelehrbar bleiben will solange er die Lösung nicht auf dem Silbertablett und vergoldet präsentiert bekommt.
                            GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                            Kommentar

                            Lädt...
                            X