# MySQL Daten auslesen und anzeigen



## Seebär (14. Mai 2002)

hallo,
ich hoffe Ihr könnt einem absoluten Anfänger helfen. habe schon das Forum durchsucht, aber keine Antwort gefunden.
Mein Problem:
Ich habe eine Tabelle in der Artikeldaten gespeichert sind.
Jeder Artikel hat eine eindeutige ID und einen Preis.
Jetzt möchte ich mittels PHP diese Preise auslesen und anzeigen.
Allerdings befinden sich in dieser Tabelle z.B. 100 Artikel, ich möchte aber nur 10 anzeigen.
Ich könnte natürlich 10 eindeutige Abfragen nach der ID machen, aber
ich hoffe, daß eine Abfrage reicht, in der ich alle Preise einlese
und nur den Preis ausgebe, der einer bestimmten ID gehört.
also in der Art:
 $query = "SELECT Preis FROM Artikel
$result=@mysql_db_query("XXX,query,$verbindung);
  while ($row=mysql_fetch_array($result))
{
    printf($row["Preis"]);
  }
in der printf-Anweisung möchte ich also sagen, daß nur der Preis des
Artikels mit der ID=5 angezeigt wird.

Hintergrund: An mehreren Stellen auf der Seite möchte ich die Preise
verschiedener Artikel anzeigen, allerdings stehen diese Artikel in der
Datenbank nicht in einer Reihenfolge.

Ich hoffe, ihr habt mein Problem verstanden und könnt mir helfen


----------



## Sebastian Wramba (14. Mai 2002)

```
$id = 5;

// Verbindung herstellen

$host = "localhost";
$user = "test";
$pass = "test";
$db = "testdb";

mysql_connect($host, $user, $pass);
mysql_select_db($db);
unset($host,$user,$pass,$db);


$query = "SELECT Preis FROM Artikel WHERE id='$id'";

$result = mysql_query($query);
  while ($row = mysql_fetch_array($result))
{
    echo "$row[Preis]";
  }
```

die variable id kann auch in der url festgelegt werden also _dateiname.php?id=5_

HTH
mfg gouraud


----------



## Seebär (14. Mai 2002)

Danke für die schnelle Antwort,
aber leider löst das mein Problem nicht.

Ich möchte erst beim printf-Befehl sagen, von welcher ID er den
Preis anzeigen soll.
Da ich mehr als einen Preis aus der Tabelle angezeigt haben möchte,
müsste ich so jedesmal eine neue Abfrage machen.
Ich dachte also, ich lese erst einmal alle Preise aus der Tabelle
und sage erst beim printf welchen Preis er anzeigen soll.

Noch einmal kurz erklärt:
ich habe eine Tabelle mit 5 Artikeln, jedem ist eine ID und ein Preis
zugeordnet. Nun möchte ich an verschiedenen Stellen auf der Seite vier
dieser Preise angezeigt bekommen. Allerdings entspricht die Reihenfolge der Anzeige nicht der Reihenfolge in der DB. Nun kann ich
natürlich 4 mal SELECT Preis FROM Artikel WHERE ID=... machen.
Ich wollte aber einmal SELECT Preis FROM Artikel machen und über
printf den Preis von Artikel mit der ID=3 ausgeben. An einer anderen
Stelle möchte ich den Preis von Artikel mit der ID=2 ausgeben, usw.

Ich hoffe doch, daß dieses möglich ist.


----------



## Sebastian Wramba (14. Mai 2002)

> Danke für die schnelle Antwort,
> aber leider löst das mein Problem nicht.



ok, kann ich mit leben 



> Ich möchte erst beim printf-Befehl sagen, von welcher ID er den
> Preis anzeigen soll.



Was ist denn überhaupt printf? warum nicht nur print? oder echo?



> Da ich mehr als einen Preis aus der Tabelle angezeigt haben möchte,
> müsste ich so jedesmal eine neue Abfrage machen.
> Ich dachte also, ich lese erst einmal alle Preise aus der Tabelle
> und sage erst beim printf welchen Preis er anzeigen soll.



gut... also auf jeden fall erst einmal die abfrage

```
$query1 = mysql_query("SELECT * FROM tabellenname ORDER BY id ASC WHERE id='1'";
$query2 = mysql_query("SELECT * FROM tabellenname ORDER BY id ASC WHERE id='2'");
$query3 = mysql_query("SELECT * FROM tabellenname ORDER BY id ASC WHERE id='3'");
// usw...
```

FROM heißt, aus welcher Tabelle er das ausliest, nicht aus welcher Spalte.
Damit liest du alle Spalten aus und er sortiert die nach der ID.
Nun könntest du mit drei while-schleifen das ausgeben, anders gehts nicht. Jedenfalls ist mir das nicht anders bekannt.



> Noch einmal kurz erklärt:
> ich habe eine Tabelle mit 5 Artikeln, jedem ist eine ID und ein Preis
> zugeordnet. Nun möchte ich an verschiedenen Stellen auf der Seite vier
> dieser Preise angezeigt bekommen. Allerdings entspricht die Reihenfolge der Anzeige nicht der Reihenfolge in der DB. Nun kann ich
> ...



Um einen Artikel auszugeben könntest du als while-schleife (z.B. bei Artikel 2) folgendes schreiben:


```
while($row = mysql_fetch_array($query2)) {
echo "Artikel: ".$row[Artikel]."<br>Preis: ".$row[Preis];
}
```

soderle.... erstmal einige unklarheiten geklärt


----------



## brÅinstorm (14. Mai 2002)

```
$query = "SELECT * FROM Artikel";

$result = mysql_query($query);
  while ($row = mysql_fetch_array($result))
{
    $preise[$row[id] = $row[preis];
  }

echo $preise[5]; ## für id = 5 ## also $preis[id_die_angezeigt_werden_soll]
```


----------



## Seebär (15. Mai 2002)

Danke Brainstorm,

ist genau das, was ich meinte.
Klappt wunderbar.


----------



## malle1974 (3. Februar 2006)

Hi!
ich habe vor kurzem einen Online Shop von XT Commerce installiert.
Habe die Shop Version C v1.0 Beta2 

Habe verschiedene Zahlungsmodule aktiviert und soweit funktioniert alles auch bestens.
Ein Problem gibt es: Beim Bezahlen mit Kreditkarte brauche ich auch die CVV Nummer. Diese Option gibt es ja im Modul CC. Beim Eintragen (wenn ich was bestelle) wir die Nummer auch ordnungsgemäß abgefragt und auch in der sql db gespeichert, das sehe ich über phpmyadmin.
Beim Aufrufen der Bestellung im Admin-Bereich (unter Rechnung) wird die CVV allerdings nicht mit ausgelesen.
Also habe ich in der Datei /admin/orders.php folgende Tabellenzeile eingefügt:
<td class="main"><?php echo ENTRY_CREDIT_CARD_CVV; ?></td>
<td class="main"><?php echo $order->info['cc_cvv']; ?></td>

Habe schon die Variable in der lang/german/admin/orders.php definiert wie folgt: define('ENTRY_CREDIT_CARD_CVV', 'CVV-Nummer:');

Das funktioniert auch, aber <?php echo $order->info['cc_cvv']; ?> funktioniert nicht. Er liest die CVV einfach nicht aus der SQL Datenbank aus. Was mache ich hier falsch? CVV steht im CC Modul auf "true".
Hoffe mir kann da jemand was schlaues zu sagen...

Gruß!

Malle


----------



## masteroc (9. März 2010)

hallo liebe fori´s,

vlt kann mir auch jemand helfen, ich bin absoluter php / mysql - Neuling und bin nun absolut ratlos...

ich habe eine Seite, auf der man einmal daten in eine tabelle einfügen kann, was super funktioniert und dann direkt auch auf der seite angezeigt bekommt, auch gut, leider nur in der falschen Reihenfolge, da ich diese nach der Spalte "ID" sortiert haben möchte in absteigender Reihenfolge, nur jeder Befehl den ich versuche erzeugt eine Fehlermeldung :-( da allerdings die Tabelle jede nacht via cronjob geleert wird muss und bei phpmyadmin auch nach einer neueintragung von dieser php seite die Reihenfolge wieder durcheinander geworfen wird, bräuchte ich auf der php seite irgendwo eine andere Befehlsschleife, oder?

Hier der Abfragebefehl von meiner Seite :

```
<?php
  
  $table = 'blackliste';
    
  $fileds = array();


    $query = 'SHOW
                COLUMNS
          FROM
                `'.$table.'`
        ';
 
    if( !$result = mysql_query($query) ) {
        echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
        exit;
    }

    echo '<table width="800" border="6" cellspacing="5" cellpadding="5"><thead><tr>';
    while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
        echo '<th>'.$row['Field'].'</th>';
        $fields[] = $row['Field'];
    }
    echo '</tr></thead>';

    $query = '
                SELECT';
    $field = current($fields);
    do {
        $query .= sprintf('%c                `%s`', 10, $field);
        if( $field = next($fields) ) {
            $query .= ',';
        }
    } while( $field );
    $query .= '
          FROM
                `'.$table.'`
        ';
    if( !$result = mysql_query($query) ) {
        echo '<p><strong>MySQL Error <tt>'.mysql_errno().'</tt>:</strong> '.htmlspecialchars(mysql_error()).'<pre>'.$query.'</pre></p>';
        exit;
    }

    echo '<tbody>';
    while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
        echo '<tr>';
        foreach( $row as $field ) {
            echo '<td>'.htmlentities($field).'</td>';
        }
        echo '</tr>';
    }
    echo '</tbody></table>';
?>
```
Wenn ich das total zu kompliziert gemacht habe wäre ich für jede Besserung dankbar 

Schonmal besten Dank im Voraus für Eure zahlreichen Antworten!


----------



## Yaslaw (9. März 2010)

Bitte, bitte den Code *formatiert* in  [PHP]mein Code[/PHP] setzen. So wie er jetzt da steht ist er nicht wirklich lesbar.

Nachtrag:
Dein SQL sollte etwa so aussehen um den neusten Datensatz zu kriegen

```
SELECT 
    feld1, 
    feld2
FROM
    tabelle
ORDER BY
    id DESC
LIMIT 1
```


----------



## masteroc (9. März 2010)

ich habe meinen Threat nochmal formatiert, sorry, wußte ich nicht, bin wie gesagt Neuling, naja...

aber mit deinem sql kann ich so nichts anfangen, ich dachte irgendwo muss ich


```
$query="select * from $table oder by "ID" DESC ";
```

eingeben...

aber 1. weiß ich nicht wo denn immer zeigt er irgendwelche fehler an :-(


----------



## Yaslaw (9. März 2010)

nimm bei deiner ID mal die " weg....

```
$query="select * from $table oder by ID DESC ";
```


----------



## masteroc (9. März 2010)

yaslaw hat gesagt.:


> nimm bei deiner ID mal die " weg....
> 
> ```
> $query="select * from $table oder by ID DESC ";
> ```



Kannst du mir vlt auch noch helfen wo ich das hinsetzen muss? da bin ich nun auch total überfordert ... ich dachte etwa Zeile 13 aber ist wohl falsch :-( bzw er zeigt keinen fehler an wenn ich das dorthin setze aber sortiert auch nicht nach ID absteigend, da steht die 98 trotzdem vor der 99


----------



## Yaslaw (9. März 2010)

Nun, das ist sehr schematisch. Du hast da ein Script, welches auf höchst komplizierte Art ein SQL zusammenschreibt.

Irgendwo hast du die Zeilen

```
$query .= '
          FROM
                `'.$table.'`
        ';
```

Dort musst du das ORDER BY ergänzen.


----------



## masteroc (9. März 2010)

yaslaw hat gesagt.:


> Nun, das ist sehr schematisch. Du hast da ein Script, welches auf höchst komplizierte Art ein SQL zusammenschreibt.
> 
> Irgendwo hast du die Zeilen
> 
> ...



aber ich muss dann nicht mit ' ' oder `` arbeiten, einfach


```
$query .= '
          FROM
                `'.$table.'` order by ID
        ';
```

oder wie? *lf*


----------



## Yaslaw (9. März 2010)

Nö, wenn der Feldname kein Leerzeuchen oder anderes Sonderzeichen beinhaltet, kannst du dir das getrost sparen.


----------



## masteroc (9. März 2010)

Dann frag ich nochmal ob man das nach leeren einer Tabelle so als php direkt auf der php-Seite mit dem Befehl zum leeren setzen kann, also erst der Befehl zum Leeren und dann 

```
$sql  = "ALTER TABLE `blackliste`\n"
     . "auto_increment = 1";
```

das steht so im gleichen php bereich wie das Leeren, aber die Liste wird nur geleert, die ID, die mit auto_increment belegt ist wird nicht auf 1 zurückgesetzt... :-(

Danke soweit die Frage hat sich erübrigt ich doofi :-D


----------



## DerElliot (12. März 2010)

Hallo Leute,

ich hab grad vor kurzem einen XT Commerce Shop 3.04 SP 2.1 installiert und hab da so ein paar Sonderwünsche, aber leider komme ich da nicht weiter, weil ich nicht groß Ahnung habe von php und MySQL -Programmierung. Vielleicht kann mir hier ja jemand weiterhelfen, würde mich echt freuen 

Und zwar folgendes: 
Ich habe in dem Shop mehrere Artikel angelegt mit der gleichen Artikelnummer, aber mit unterschiedlichen Artikelnamen. 

Beispiel zur besseren Verständlichkeit:
Artikel-Nr.        Artikelname
1200                Staubsauger Modell 1 - Filter (Typ1)
1200                Staubsauger Modell 2 - Filter (Typ1)
1200                Staubsauger Modell 3 - Filter (Typ1)
1200                Staubsauger Filter Typ 1

Jetzt hätte ich gerne, dass mir beim Artikel "Staubsauger Filter Typ 1" in der Artikelbeschreibung (template könnte speziell dafür angepaßt und ausgewählt werden) automatisch alle Artikel aus der Datenbank mit gleicher Artikelnummer alpabetisch aufgelistet werden. Nach dem Motto:

Dieser Filter paßt in folgende Modelle:
Staubsauger Modell 1 - Filter (Typ1)
Staubsauger Modell 2 - Filter (Typ1)
Staubsauger Modell 3 - Filter (Typ1)

Es wäre dabei nicht schlimm, wenn "Staubsauger Filter Typ 1" selbst auch nochmal mit aufgeführt würde.

Ich denke mal, dass da erstmal irgendwie ermittelt werden müsste, wie oft der Artikel mit identischer Artikenummer in der Datenbank vorhanden ist und dann das irgendwie in einem array gespeichert werden müßte und mit einer Schleife wieder ausgegeben werden muß. So vom Grundprinzip her stelle ich mir das mal so vor, hab aber einfach zu wenig Kentnisse, wie ich das programmiertechnisch umsetzen muß - wenn das überhaupt geht.

Würde mich daher wie gesagt sehr freuen, wenn mir da einer weiterhelfen könnte.

Viele Grüße
Elliot


----------

