datenbank ausleser fehler :(

hallo

danke für denn tipp

so jetzt hab ich das ganze geändert so wie du es geschrieben hast aber es klappt noch immer nicht .. :(

gibt es denn keine andere möglichkeit das zu machen ohne das ich für jedes angebot eine eigene seite und tabelle mach?
 
Zuerst, würde ich nicht die $_GET-Variable einfach so ins Query einbauen.

Hier, da es sich um einen Integer handelt, würde ich [phpf]intval[/phpf] benutzen.
Außerdem umschließt man Integer in MySQL nicht mit Anführungszeichen.

PHP:
$SQL_statement = 'SELECT * FROM angebote WHERE angebotsnummer = '. intval($_GET['angebotsnummer']);

Hast du schon die Abfrage in phpMyAdmin ausgeführt?

@Sunny1245:

Wo wir schon beim Thema "Empfehlungen" sind: Man sollte um einen Array-Index Anführungszeichen hinschreiben, zwar geht das auch ohne, aber das ist a) nicht sehr schön und b) dauert das ein paar Tausendstel Millisekunden mehr.​
 
Also ich habe das ganze mal nachgebaut, so wie ich es auf jeden fall verstanden habe und bei mir klappt es:

Code:
include "db_con.php";

$sql = "Select angebotsnummer, angebot from angebote";

$sql_fetch = mysql_query($sql);

while ($data = mysql_fetch_array($sql_fetch)){

echo "<a href='angebote_beschreibung.php?angnr=".$data["angebotsnummer"]."'>Angebot".$data["angebot"]."</a></br>";

}

Und die zweite Seite:

Code:
include "db_con.php";
$angebotsnummer = $_GET["angnr"];
$sql_nummer = "Select angebotsnummer, angebot, beschreibung
from angebote where angebotsnummer='$angebotsnummer'";

$sql_nummer_fetch = mysql_query($sql_nummer);

while ($data_ang = mysql_fetch_array($sql_nummer_fetch)){

echo $data_ang["angebotsnummer"]."</br>".$data_ang["angebot"]."</br>".$data_ang["beschreibung"];

}

Es ist blöd das man auf der zweiten Seite wieder eine While-Schleife braucht, obwohl man weiß das man nur einen Eintrag herausbekommt, aber so ist es nunmal.
 
Wenn man nur einem Eintrag bekommt und das weiß, versteh ich nicht, warum man da unbedingt while nehmen muss. Hast du eine Erklärung dafür?
 
Nein, eine Erklärung habe ich nicht. Aber ich muss gestehen das ich mir darum auch erst einmal Gedanken gemacht habe und nachdem ich festgestellt habe das es ohne die While-Schleife nicht geht, habe ich es dabei belassen. Ich denke nicht das es besondere Nachteile ergibt sollte man es so oder so lösen. Allerdings wäre ich daran interessiert eine funktioniernde Lösung ohne While zu sehen.
 
Du brauchst doch dafür nur einmal eine mysql_fetch_*-Funktion aufzurufen.

PHP:
include "db_con.php";
$angebotsnummer = mysql_real_escape_string($_GET["angnr"]);
$sql_nummer = "Select angebotsnummer, angebot, beschreibung
from angebote where angebotsnummer='$angebotsnummer' LIMIT 1";
 
$sql_nummer_fetch = mysql_query($sql_nummer);
 
$data_ang = mysql_fetch_array($sql_nummer_fetch);

echo $data_ang["angebotsnummer"]."</br>".$data_ang["angebot"]."</br>".$data_ang["beschreibung"];

Außerdem habe ich noch ein LIMIT 1 zum Query hinzugefügt, das beschleunigt ein wenig und noch [phpf]mysql_real_escape_string[/phpf] auf $_GET["angnr"] angewendet.
 
Immer, wenn man einen SELECT verwendet, bei dem in der WHERE-Condition die Spalte für den Primärschlüssel abgefragt wird, ist eine while-Schleife unnötig, da man ohnehin immer nur einen Datensatz zurück bekommt. Lösen kann man das an dem Beispiel so:

PHP:
$sql_nummer = "Select angebotsnummer, angebot, beschreibung
from angebote where angebotsnummer='$angebotsnummer'";
 
$sql_nummer_fetch = mysql_query($sql_nummer) or die(mysql_error());
 
$data_ang = mysql_fetch_array($sql_nummer_fetch);
if ( $data_ang ) 
  echo $data_ang["angebotsnummer"]."</br>".$data_ang["angebot"]."</br>".$data_ang["beschreibung"];
 
Dann habe ich jetz wieder was gelernt, aber ich glaube ich werde weiterhin die While- Schleife verwenden, ist für mich irgendwie einfacher, wenn es aber auch nicht elegant ist.
 
Was heißt da nicht elegant? Es ist ein logischer Fehler. Als Entwickler, der nur den Quellcode sieht, würde ich erwarten, dass dort mehrere Ergebnisse vorkommen können - mal vom Datenbank-Layout und -Inhalt sowie dem SQL abgesehen.

Es ist programmatisch schlicht und einfach falsch.
 
Ich habe diese Vorgehensweiße schon sehr oft gesehen, vorallem bei anderen Tutorials außerhalb dieses Boardes, aber okay, ich werde mal schauen ob ich es mir angewöhnen kann
 
Zurück