[PHP & MySQL] -

Startpost-Retter
-
+Debbie+
Was trägst Du bei ID und was bei pferdid?
Die ID wird immer nur einmal vergeben, das heißt Du kannst nicht in zwei Zeilen die selbe ID haben Augenzwinkern

Edit: Lass das Feld ID weg und trage bei pferdeid die ID des Pferdes ein und dann in der ausgabe halt "SELECT * FROM erfolge where pferdeid ='$id'"
Julia712
Zitat:
Original von Mutzelchen
Bei der ID musst du nichts eintragen lassen - einfach leer lassen & es wird automatisch generiert.


Genau Freude
Du hast in der Datenbank bei ID "auto increment" angegeben, weshalb die datenbank automatisch hochzählt. Jeder neue Eintrag wird automatisch mit einer fortlaufenden Nummer versehen und da brauchst du gar nichts dran zu ändern und lässt es einfach weg -als wäre das Feld gar nicht da^^
Jede ID darf -da hier jede Zahl exakt einmal vorkommt (bzw. gar nicht mehr, wenn man einen Eintrag löscht)- nicht doppelt vorkommen (Primary Key). Das Problem hast du bei deinem Update nun. Es gibt einen Eintrag mit der ID "1" und nun versuchst du einen weiteren Eintrag mit dieser ID zu machen. Das geht natürlich nicht und deshalb bekommst du die Fehlermeldung "#1062 - Duplicate entry '1' for key 'PRIMARY' ", die besagt, dass es einen doppelten Eintrag "1" in der Spalte gibt, die mit dem Primärschlüssel versehen ist.

Wie Mutzelchen also sagte, lass die Spalte beim Eintragen einfach weg (sowohl den Spaltennamen als auch den Inhalt) und dann wird es funktionieren smile
Oli
Zitat:
Original von Julia712
Jede ID darf -da hier jede Zahl exakt einmal vorkommt (bzw. gar nicht mehr, wenn man einen Eintrag löscht)- nicht doppelt vorkommen (Primary Key).


An dieser Stelle zu deiner Klammer: Der Wert darf auch nach dem Löschen wieder angelegt werden. Lediglich der auto_increment zählt weiter und füllt die Lücke nicht mehr. Es würde aber problemlos funktionieren, wenn man die Zahl bei einem INSERT einfügt. Doppelt vorkommen darf sie bei einem PRIMARY KEY aber so oder so nicht.

EDIT: [u] und [/b] war wohl nix großes Grinsen
kext
Du bekommst immer nur einen Erfolg, weil du immer nur den Ersten Erfolg aus dem Ergebnissatz ausliest.

Um alle Erfolge zu erhalten musst du nach diesem Muster arbeiten:

php:
1:
2:
3:
4:
while ($Data mysql_fetch_array($Ergebnis))
{
    // Hier mit $Data arbeiten
}


Abgesehen davon sind deine Zuweisungen so zwar teilweise möglich aber niemals empfehlenswert. Gewöhne dir am besten von Anfang an eine vernünftige Syntax an.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
// FALSCH
$id "$_GET[id]";
$name '$Data[name]';
echo '<td class="hell">'.$Data[prufung].'</td>';

// RICHTIG
$id $_GET["id"];
$name $Data["name"];
echo '<td class="hell">'.$Data["prufung"].'</td>';
+Debbie+
Kann das sein das du mal was gelöscht hast in der Tabelle, also den Eintrag mit der ID 1 & 2? Dann wird nämlich trotzdem einfach weiter gezählt Augenzwinkern

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
else {
// Sonst zeige an .. 
        while($Data mysql_fetch_array($Ergebnis)) {
         echo '<h2 class="h2">'.$Data["name"].'</h2>
<hr class="linie"><br>
<table style="text-align: left; width: 100%;" cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td style="text-align: center; font-weight: bold;"
 class="dunkel">Pr&uuml;fung</td>
      <td style="text-align: center; font-weight: bold;"
 class="dunkel">Platz</td>
      <td style="text-align: center; font-weight: bold;"
 class="dunkel">Preis</td>
      <td style="text-align: center; font-weight: bold;"
 class="dunkel">Stall</td>
    </tr>
    <tr>
      <td class="hell">'.$Data["prufung"].'</td>
      <td class="hell">'.$Data["platz"].'</td>
      <td class="hell">'.$Data["preis"].'</td>
      <td class="hell">'.$Data["stall"].'</td>
    </tr>
  </tbody>
</table>
';
    }
}
kext
Erfolge.php
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
<!DOCTYPE html>
<html>
<head>
  <title>Landgut Schwaan | vom Rv Buchenhain</title>
  <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body style="background-color: rgb(218, 202, 167);">
<br>
<script type="text/javascript" src="wz_tooltip.js"></script>
<?php
include("Datenbank.php");

$id $_GET["id"];

$Ergebnis mysql_query("SELECT * FROM erfolge where pferdid ='".intval($id)."'");

if (@mysql_num_rows($Ergebnis) == 0)
{
    echo "Dieses Pferd hat noch keine Erfolge!";
}
else
{
    echo '<table style="text-align: left; width: 100%;" cellpadding="2" cellspacing="2">
    <tbody>
    <tr>
      <td style="text-align: center; font-weight: bold;" class="dunkel">Pr&uuml;fung</td>
      <td style="text-align: center; font-weight: bold;" class="dunkel">Platz</td>
      <td style="text-align: center; font-weight: bold;" class="dunkel">Preis</td>
      <td style="text-align: center; font-weight: bold;" class="dunkel">Stall</td>
    </tr>';
    while ($Data mysql_fetch_array($Ergebnis))
    {
        echo '<tr>
          <td class="hell">'.$Data["prufung"].'</td>
          <td class="hell">'.$Data["platz"].'</td>
          <td class="hell">'.$Data["preis"].'</td>
          <td class="hell">'.$Data["stall"].'</td>
        </tr>';
    }
    echo '</tbody>
    </table>';
}
?>
</body>
</html>
kext
  • Überflüssigen Leerraum entfernt und die Zeilen eingerückt um den Code lesbarer zu gestalten.
  • Die Titelzeile der Tabelle war vor dem <body>-Tag
  • Du hast die Tabelle bereits nach der ersten Zeile wieder geschlossen
  • else war verschwunden
  • Die Query per intval() abgesichert

Ich möchte dir dringend ans Herz legen, dir einen Texteditor mit Syntax-Highlighting zuzulegen (z.B. Notepad++). Das erleichtert es extrem beispielsweise Syntaxfehler sofort zu erkennen und die Programmstrukturen besser zu überblicken. Außerdem wird das Einrücken von Code erleichtert und man kann – im Gegensatz zu notepad – Unix-Zeilenumbrüche und UTF-8 verwenden.

Um dir den Programmablauf besser vorstellen zu können, empfiehlt es sich, zunächst eine Skizze auf Papier anzufertigen, auf der alle Abläufe abgebildet sind.
Zitat:
Tabelle öffnen -> Titelzeile einfügen -> solange Daten vorhanden sind: Datenzeile einfügen -> Tabelle schließen


EDIT: In der Datei Datenbank.php steht Mist drin. Schmeiß mal die echos da raus.