Mit Select WHERE entweder alle Daten auslesen, oder nur Bestimmte

CreativPur

Erfahrenes Mitglied
Hi,
ich habe eine Datenbank (SQL), wo ich Daten mit einem Form bestimmte dauen abrufen kann

PHP:
$sql = "SELECT * FROM team WHERE team_nachname = '$team_nachname'";

Das Form
HTML:
<form action="#" method="post">
    <input type="Text" name="team_nachname" class="form-control" placeholder="Team Nachname">
    <button type="submit" class="btn btn-success btn-xs">auswählen</button>
</form>

Das funktioniert auch soweit..

Wie kann ich es erreichen, das ich beim aufrufen der Seite zuerst alle Datensätze sehe, und wenn ich das Form, welches auf der gleichen Seite ist, mit einem Nachname versehe, dann nur diese Daten angezeigt werden?

Vielen Dank
 
Ich habe folgendes versucht, aber ohne Erfolg

PHP:
$sql = "SELECT * FROM team WHERE team_nachname = '$team_nachname' OR team_name = ALL";
 
Hi Yaslaw,
vielen Dank für die schnelle Antwort.

Leider werden beim Aufrufen der Seite mit deinem Script keine Daten ausgegeben.
Sicherlich liegt es an meinem gesamten Script

Dies sieht folgend aus..

PHP:
<?php
require_once("head.php");
require_once("hauptnavi.php");

    $team_nachname = htmlspecialchars($_POST['team_nachname']);
    
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
    $sql = "SELECT * FROM team";
    if(isset($team_nachname)) $sql .= " WHERE team_nachname = '$team_nachname'";
    
?>

<style>
h1 { color:#09F}
h3 { color: #0C9}
thead { font-style: oblique; background-color:#CCC; }
tbody { font-size:12px; }
.glyphicon-print { color:green; font-size:16px;}
.collapse_width { width:200px; }
</style>

<div class="container" style="margin-top:150px;">
<div class="col-lg-12">
<h1>Team / Kundenaufträge / Umsätze</h1>
<hr />
</div>


<table class="table table-hover">
    <thead>
        <td align="center">
            Pos.
        </td>
        <td>
            Vorname
        </td>
        <td>
            Nachname
        </td>
        <td align="center">
            Kundenauftrag-Nr
        </td>
        <td align="center">
            Auftrag-Datum
        </td>
        <td>&nbsp;
            
        </td>
        <td>
            Umsatz
        </td>
        <td>&nbsp;
            
        </td>
        <td align="center">
            Drucken
        </td>
    </thead>
    <?php foreach ($pdo->query($sql) as $row) { ?>
    <tbody>
        <td align="center">
            <?php echo $row['team_id'] ?>
        </td>
        <td>
            <?php echo $row['team_vorname'] ?>
        </td>
        <td>
            <?php echo $row['team_nachname'] ?>
        </td>
        <td align="center">
            <?php echo $row['kunden_auftrag_nr'] ?>
        </td>
        <td align="center">
            <?php echo $row['kunden_auftrag_date'] ?>
        </td>
        <td>&nbsp;
            
        </td>
        <td>
            <?php echo $row['kunden_auftrag_umsatz'] ?>
        </td>
        <td>&nbsp;
            
        </td>
        <td align="center">
            <span class="glyphicon glyphicon-print"></span>
        </td>
    </tbody>
    <?php } ?>
</table>
<hr />


<form action="#" method="post">
    <input type="Text" name="team_nachname" class="form-control" placeholder="Team Nachname">
    <button type="submit" class="btn btn-success btn-xs">auswählen</button>
</form>


</div>
 
Ich würde schon testen, ob das Formular gesendet wurde oder ob es sich um einen Initialaufruf handelt.

Das Einmaleins der Formulare.
 
Ich habe da eine ganz andere Idee: Du schreibst ja:
das ich beim aufrufen der Seite zuerst alle Datensätze sehe, und wenn ich das Form, welches auf der gleichen Seite ist, mit einem Nachname versehe, dann nur diese Daten angezeigt werden?
Wenn Du sowieso zunächst alle Datensätze herunter laden willst, würde es sich anbieten, das Filtern auf dem Client zu machen, u. U mit Hilfe von Datatables.
 
Dein Code enthält große Sicherheitslücken: SQL Injection und XSS!

Du nutzt bereits PDO, dann kannst du auch Prepared Statements nutzen. Um dynamisch Bedingungen zum Query hinzuzufügen, müsstest du wohl ein Prepared Statement pro Fall (Variable gesetzt oder nicht) erstellen.

Um XSS zu vermeiden, bitte Inhalte im HTML immer nur mit htmlspecialchars ausgeben. Dabei auch auf die Parameter von htmlspecialchars achten, insbesondere Encoding, HTML-Version und Quotes.
 
Deine Tabelle ist auch falsch aufgezeichnet.
Es fehlen die TR´s!

Alternative kannst du auch Javascript nutzen und dort hängst Du das an was du dann entprechend brauchst.
:)
Um kurz auf das Thema Update deiner SQL Abfrage zu kommen. :)

Beispieltabelle:
HTML:
<tabel>
    <thead>
        <tr>
            <td></td>
            <th></th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td></td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <td></td>
            <th></th>
        </tr>
    </tfoot>
</tabel>

Denn in deinem Fall, schreibt er alles hintereinander und bricht nur dann um, wenn er es will.
 
Zurück