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

  • Thomas C
    hat ein Thema erstellt [Erledigt] Daten aus einer Datenbank auslesen.

    [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

  • ChristianK
    antwortet
    Wieder einer, der unbelehrbar bleiben will solange er die Lösung nicht auf dem Silbertablett und vergoldet präsentiert bekommt.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • Thomas C
    antwortet
    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.

    Einen Kommentar schreiben:


  • erc
    antwortet
    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.

    Einen Kommentar schreiben:


  • Thomas C
    antwortet
    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?

    Einen Kommentar schreiben:


  • hausl
    antwortet
    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

    Einen Kommentar schreiben:


  • uha
    antwortet
    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

    Einen Kommentar schreiben:


  • Thomas C
    antwortet
    @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.

    Einen Kommentar schreiben:


  • hausl
    antwortet
    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.

    Einen Kommentar schreiben:


  • Suralc
    antwortet
    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/

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    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 ...

    Einen Kommentar schreiben:


  • Thomas C
    antwortet
    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.

    Einen Kommentar schreiben:


  • ChristianK
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X