datenbank ausleser fehler :(

Ok, noch mal langsam, ich muss das wissen, um helfen zu können:

1. Du hast in deinem Link jetzt eine URL stehen, die so aussieht:

<a href="angedetails.php?angebotsnummer=12345">

Falsch? Richtig?

2. Die Ausgabe von echo $_GET['angebotsnummer'] stimmt der Angebotsnummer überein, die im Link angeben wurde. Richtig? Falsch?

3. Du hast in der Tabelle (in der Datenbank) mehrere Datensätze, bei denen die Angebotsnummer-Spalte die Nummer aus dem Link enthält. Richtig? Falsch?

4. Du willst alle Angebote im Detail anzeigen, die diese Nummer aus dem Link haben. Richtig? Falsch?
 
naja jetzt will ich schon das problem lösen aber jetzt versteh ich nicht wieso es mir trotdem immer nur denn ersten eintarg aus der Db anzeigt

ich hab eh das
PHP:
$angebotsnummer = mysql_real_escape_string ($_GET["angebotsnummer"]);
$SQL_statement=sprintf("SELECT * FROM angebote WHERE angebotsnummer=%d ", $_GET['angebotsnummer']);
aber ich versteh wieso die WHERE funtion nicht funktioniert

Ich verstehe nicht ganz warum du das GET erst in eine Variable speicherst, dann in der WHERE-Bedingung aber doch wieder den reinen GET, verwendest...
 
naja ich will ja auch dass script die passende tabelle mir der paasenden angebotsnummer anzeigt aber das ich das jetzt so machen
PHP:
          <?php 
mysql_select_db("angebote");
$angebotsnummer = mysql_real_escape_string ($_GET["angebotsnummer"]);
$SQL_statement=sprintf("SELECT * FROM angebote WHERE angebotsnummer=%d", $_GET['angebotsnummer']);
$resultset=mysql_query($SQL_statement) or die(mysql_error());
$data=mysql_fetch_array($resultset);
if($data) {
 echo $_GET['angebotsnummer']."<br>"; /*KONTROLLE*/
 echo $data['menge']; /* ZWEITE KONTROLLE */
?>
hier oben zeigt er mir alles richtig an aber wieso zeigt mit die falschen datensete an wenn ich es so mach

PHP:
          <?php 
mysql_select_db("angebote");
$angebotsnummer = mysql_real_escape_string ($_GET["angebotsnummer"]);
$SQL_statement=sprintf("SELECT * FROM angebote WHERE angebotsnummer=%d", $_GET['angebotsnummer']);
$resultset=mysql_query($SQL_statement) or die(mysql_error());
$data=mysql_fetch_array($resultset);
if($data) {

/*ich will aber die echos separat plazieren*/
PHP:
<?php echo $data['angebotsnummer']; ?>
<?php echo $data['menge'] ?>
.
.
.
usw
 
Naja ich habs so bis jetzt so gelernt. Wie könnte ich es sonst lösen? Ich kenne nur diese eine Variante.

Naja es geht ganz einfach so, was dachtest du denn warum du die Variable in $angebotsnummer reinschreibst? Oder reinschreiben solltest...

PHP:
$angebotsnummer = mysql_real_escape_string ($_GET["angebotsnummer"]); 
$SQL_statement=sprintf("SELECT * FROM angebote WHERE angebotsnummer=%d ",$angebotsnummer);
´

Und auf der anderen Seite würde ich mal ganz langsam machen und eins nach dem anderen lösen bevor du was neues anfängst
 
ahja anbei schaut meine DB sso aus

id angebotsnummer produkt beschreibung menge preis foto
1 ab201123 Visitenkarten na mormale wisiten karten halt ;) 500 55.00 produkt.gif
2 ab201124 Flyer Test angebot 1000 59.90 produkt1.gif
3 ab201125 speisekarte innen speisekarten 25 210,00 produkt2.gif
4 ab201126 gutscheine masagge gutscheine 100 130.00 produkt3.gif
5 ab201127 einladungen hochzeitseinladung 200 80,00 produkt4.gif
6 ab201128 rull-up rull-up banner 1 139,00 produkt5.gif
7 ab201129 KundenStoper A1 stopt kunden 1 59,00 produkt6.gif
 
So, dann erkläre ich dir mal, was die einzelnen Funktionen tun. Steht zwar alles im PHP-Handbuch, aber vielleicht verstehst du es im Kontext deines Projektes besser. Auch hier heißt die Devise: NICHT KOPIEREN, SONDERN LESEN UND VERSTEHEN!

1. mysql_real_escape_string() sorgt dafür, das niemand schadhaften Code in deine Datenbank einschleusen kann. Wir belassen es erstmal dabei, weitere Kommentare dazu sorgen nur für Verwirrung.

2. sprintf() kann man dazu verwenden, eine Zeichenkette zu formatieren, die %+Buchstabe sind typisierte Platzhalter. An diese Stelle kommen die Werte, in den Parametern 2 und mehr stehen. Das kannst du ziemlich gut nachvollziehen, wenn du das SQL einfach mal mit echo ausgeben lässt, nach dem du es mit sprintf() zusammen gebaut hast:

PHP:
$SQL_statement=sprintf("SELECT * FROM angebote WHERE angebotsnummer=%d ", $_GET['angebotsnummer']);  
echo "Folgendes SQL wird gleich augeführt: <pre>$SQL_statement</pre>";

3. mysql_query() sendet das zuvor zusammen gebaut SQL an die Datenbank und bekommt im Erfolgsfall eine sog. Ergebnismenge zurück (im Fehlerfalle kommt false zurück). Die Ergebnismenge beinhaltet bei einem SELECT-SQL alle Datensätze die gefunden wurden. Wenn du z.B. folgendes ausprobierst (SQL aus Punkt 2)

PHP:
// SQL senden und auf Ergebnismenge warten
$ergebnismenge = mysql_query( $SQL_statement ) or die( mysql_error() );
// Ergebnismenge zu Testzwecken mal ausgeben
var_dump( $ergebnismenge );

dann wirst du sehen, das da keine lesbaren Datensätze drin sind. Statt dessen bekommst du "resource #1" oder etwas in der Art ausgegeben. Und damit kommen wir schon zum nächsten Befehl:

4. mysql_fetch_assoc() liefert dir genau 1 (in Worten: einen) Datensatz aus der Ergebnismenge. Dafür braucht es als Parameter die Ergebnismenge, von dem es einen Datensatz holen soll. Das kann dann so aussehen:

PHP:
// Einen Datensatz aus der Ergebnismenge holen
$datensatz = mysql_fetch_assoc( $ergebnismenge );
// Testweise mal den Datensatz einfach raus dumpen (alle Elemente des Datzensatzes darstellen)
echo "<pre>";
var_dump( $datensatz );
echo "<pre>";

Wie du siehst, wird da eine Zeile aus deiner Tabelle angezeigt. mysql_fetch_assoc() weiß auch nichts darüber, ob noch mehr Datensätze in der Ergebnismenge drin sind, es holt immer genau einen raus. Wenn da mehrere drin sind, musst du eine Schleife verwenden, die so lange abläuft, bis mysql_fetch_assoc() keine Datensätze mehr in der Ergebnismenge findet. Das kann dann so aussehen:

PHP:
// Wir holen solange Datensätze ab, bis keine mehr da sind
while( $datensatz = mysql_fetch_assoc( $ergebnismenge ) )
{
  // Und dumpen den aktuell geholten Datensatz einfach mal raus:
  echo "<pre>";
  var_dump( $datensatz );
  echo "</pre>";
}

Die Ausgabe wird nun alle Datensätze anzeigen, die mit dem SELECT gefunden werden konnten. Mit dem Schlüsselwort WHERE schränkt man seine Suche quasi ein - ich denke, das weißt du bereits.

Ist das Verfahren damit einigermaßen klar?
 
ahja anbei schaut meine DB sso aus

id angebotsnummer produkt beschreibung menge preis foto
1 ab201123 Visitenkarten na mormale wisiten karten halt ;) 500 55.00 produkt.gif
2 ab201124 Flyer Test angebot 1000 59.90 produkt1.gif
3 ab201125 speisekarte innen speisekarten 25 210,00 produkt2.gif
4 ab201126 gutscheine masagge gutscheine 100 130.00 produkt3.gif
5 ab201127 einladungen hochzeitseinladung 200 80,00 produkt4.gif
6 ab201128 rull-up rull-up banner 1 139,00 produkt5.gif
7 ab201129 KundenStoper A1 stopt kunden 1 59,00 produkt6.gif

Und du hast jetzt zu Beispiel auf der angebot.php den Link für Visitenkarten angeklickt? Es gibt keine zweite Zeile in der Tabelle, in der angebotsnummer "ab201123" ist?

Achja, das hast du nicht erwähnt, das angebotsnummer auch Buchstaben enthalten kann. Das ist natürlich auch ein Problem. Denn %d im sprintf() filtert die Buchstaben heraus. Aber das wirst du feststellen, wenn du meinen vorherigen Post durch gelesen und ausprobiert hast. Wenn du damit fertig bist, kannst du jederzeit Fragen, wie du verhindern kannst, das die Buchstaben verschwinden. :-)
 
Zuletzt bearbeitet:
Zurück