Webdesign in Siegen

MYSQL - Lezten drei Ausgeben

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

MYSQL - Lezten drei Ausgeben

Beitragvon =Max= am 15.07.2007, 18:19

Hallo,

ich weiße jetzt nicht wie ich das formuleiren soll. Und zwar arbeite ich an einem kleinen Script für eine Seite. Bei der Seite gibt es eine Preisliste bei der sich die Preise immer ändern und manchmal neue "Preisgegenstände" hinzukommen. Nun will ich aus der Datenbank die letzten drei Preisänderungen/neue Preisgegenstände auslesen lassen. Leider steige ich da nicht so durch (Anfänger) Hat jemand einen Anlauf bzw. nen Codeschnipsel für mich?

Lg,

=max=

PS: DIe Tabelle heißt preisliste mit folgenden Spalten:

cat, name, pic, last_preis, preis, pfeil
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Beitragvon Basti am 15.07.2007, 18:30

Aus deinen Spalten kann ich noch nicht immer genau schließen, was da jetzt reinkommt.

Grundsätzlich benötigst du aber irgendeine Zeitangabe, da die Preisänderungen ja anscheinend nicht mitgespeichert werden und das auch unsinnig wäre.
Am besten speicherst du bei der Änderung den aktuellen PHP Timestamp in einer Spalte ab, sodass du bzw. die Datenbank weiß, wann die letzte Änderung stattgefunden hat.

Der Rest ist relativ einfach, da es in MySQL ja schon einige Sortieralgorhythmen gibt, und du dann einfach nach der Zeit sortierst und die Ausgabe dann auf drei Werte beschränkst, hier mal ein Beispielquery:

Code: Alles auswählen
SELECT spalte_1, spalte_2 FROM tabelle ORDER BY letzte_aenderung DESC LIMIT 3


Dann hättest du immer als Ergebnis die drei Produkte, die als letztes geändert wurden ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon =Max= am 15.07.2007, 18:49

mein code sieht nun so aus:

Code: Alles auswählen
<?php

$conn = mysql_connect("localhost", "maximal93", "zensiert");

if (!$conn) {
    echo "Keine Verbindung zur DB: " . mysql_error();
    exit;
}

if (!mysql_select_db("maximal93")) {
    echo "Kann  maximal93 nicht auswählen: " . mysql_error();
    exit;
}

$sql = "SELECT last_preis, preis FROM preisliste ORDER BY letzte_aenderung DESC LIMIT 3
        FROM   preisliste;
        WHERE  cat = 1";

$result = mysql_query($sql);

if (!$result) {
    echo "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "Preisliste nicht gefunden, Abbruch";
    exit;
}

// Solange eine Zeile mit Daten existiert, wird dies in dem assoziativen Array
// $row abgelegt.
// Anmerkung: Wenn Sie nur eine Zeile erwarten, brauchen Sie keine Schleife.
// Anmerkung: Wenn Sie extract($row) innerhalb der folgenden Schleife
//            verwenden, können Sie damit die Variablen
//            $userid, $fullname und $userstatus erzeugen.
while ($row = mysql_fetch_assoc($result)) {
    echo '<table width="50%" align="center" border="1"><tr><td>';
    echo '<img src="';
    echo $row["pfeil"];
    echo '">';
    echo $row["name"];
    echo '<br> <img src="';
    echo $row["pic"];
    echo '"><br>Letzter Preis: ';
    echo $row["last_preis"];
    echo '<br>Neuer Preis: ';
    echo $row["preis"];
    echo '<br />';
    echo '</td></tr></table>';
    echo '<br>';
}

mysql_free_result($result);

?>


Geht aber nicht kommt Fehlermeldung:

http://maximal93.ma.funpic.de/last_3.php

PS: Ich weiß, die ganzen echos unten sind unnötig :P
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Beitragvon Basti am 15.07.2007, 19:17

In deinem Query steht ja auch alles doppelt und dreifach, das ORDER BY und LIMIT sind ja sozusagen nur zusätzlich Angaben in deinem Query, aber die FROM Angabe hast du zweimal drin, dann ist das kein Wunder, dass du nen Error bekommst.

Richtig heißt es:

Code: Alles auswählen
SELECT last_preis, preis FROM preisliste WHERE cat='1' ORDER BY letzte_aenderung DESC LIMIT 3


Falls du die Logik dahinter noch nicht ganz nachvollziehen kannst, solltest du dir vielleicht mal das MySQL Grundlagen Tutorial auf dW ansehen.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon =Max= am 16.07.2007, 14:07

Danke funktioniert nun habe ich dieses erstellt, mit der man per Formular was in die Datenbank einfügen kann:

Code: Alles auswählen
<?php

$conn = mysql_connect("localhost", "maximal93", "zensiert");
$cat = $_POST["name"];
$name = $_POST["name"];
$pic = $_POST["pic"];
$last_preis = $_POST["last_preis"];
$preis = $_POST["preis"];
$pfeil = $_POST["pfeil"];
if (!$conn) {
    echo "Keine Verbindung zur DB: " . mysql_error();
    exit;
}

if (!mysql_select_db("maximal93")) {
    echo "Kann  maximal93 nicht auswählen: " . mysql_error();
    exit;
}

$sql = "INSERT INTO preisliste(cat, name, pic, last_preis, preis, pfeil)
      VALUES('$cat', '$name', '$pic', '$last_preis', '$preis', '$pfeil')";

$result = mysql_query($sql);

if (!$result) {
    echo "Anfrage ($sql) konnte nicht ausgeführt werden : " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "Preisliste nicht gefunden, Abbruch";
    exit;
}

// Solange eine Zeile mit Daten existiert, wird dies in dem assoziativen Array
// $row abgelegt.
// Anmerkung: Wenn Sie nur eine Zeile erwarten, brauchen Sie keine Schleife.
// Anmerkung: Wenn Sie extract($row) innerhalb der folgenden Schleife
//            verwenden, können Sie damit die Variablen
//            $userid, $fullname und $userstatus erzeugen.
while ($row = mysql_fetch_assoc($result)) {
    echo '<form>';
    echo 'Möbel Kategorie: <select>';
    echo '<option>Rare</option>';
    echo '<option>Ultra Rare</option>';
    echo '</select><br>';
    echo 'Name: <input><br>';
    echo 'Url zum Bild*: <input><br>';
    echo 'Lezter Preis**: <input><br>';
    echo 'Neuer Preis: <input><br>';
    echo 'URL zum Pfeil***: <input><br>';
    echo '<input><input><br>;
    echo '</form><br><br>';
    echo '*Du kannst HIER ein Bild Uploaden<br>';
    echo '**Bei neuen Möbel den Kaufpreis<br>';
    echo '*** URLS: <br>';
}

mysql_free_result($result);

?>


Folgender Fehler kommt nun:

Parse error: syntax error, unexpected '/' in /usr/export/www/vhosts/funnetwork/hosting/maximal93/einfuegen.php on line 53


In dieser Zeile steht:

echo '</form><br><br>';

Was ist den nun schon wieder falsch XD
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Beitragvon Basti am 16.07.2007, 14:22

Sowas solltest du aber inzwischen auch selbst können.

Der Fehler sagt doch schon ziemlich genau, wo das Problem liegt.
Dann schaust du einfach mal in die angegebene Zeile, wo ja erstmal nichts falsch ist.
Aber da manche Fehler in Vorgängerzeilen erzeugt werden, von PHP aber erst in der nächsten Zeile registriert werden, schaut man dann auch mal in die Zeile darüber, und da fehlt dann dein ' am Ende der Zeile, um den String abzuschließen.

Bitte beim nächsten Mal erstmal selbst genau schauen, solche Fehler werden zwar gern gemacht, aber dafür immer im Forum nachzufragen ist unnötig, da man dafür wirklich nur seinen Quelltext kontrollieren muss ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon =Max= am 16.07.2007, 15:17

Das ist wirklich peinlich jetzt für mich :oops:
Naja danke trtozdem,
wenn ich wieder ein Problem habe schau ich diesmal ncohmals selber nach

Lg,

=Max=
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Beitragvon =Max= am 16.07.2007, 18:24

So wieder da, nun kein Problem eher noch eine Hilfe. Und zwar will ich jetzt eine Seite basteln, in der man die eingefügten Teile editieren kann.

Quasi will ich eine Seite habem folgendermasen: (ich gebe an tabelle_spaltenname da soll dann später das hin)

tabelle_cat tabelle_pic tabelle_last_preis tabelle_preis tabelle_pfeil [EDIT] [X]

Also: wie ich das so anzeigen lasse weiß ich: Nun will ich aber wenn man auf EDIT klickt das man zu nem Formular kommt wo die inhalte der einzelnen spalten drin sind in dem formular und wo man sie halt editieren kann. Weiß nicht wie ich es verwirklichen soll. und wenn man auf X klickt soll der entsprechende gelöscht werden
=Max=
Mitglied
 
Beiträge: 444
Registriert: 14.01.2007, 18:59

Beitragvon Basti am 16.07.2007, 18:33

Das ist gar nicht mal schwierig, deine Ansätze sind ja schon richtig.

Zum Editieren erstellst du einfach eine neue Datei, in die du im Prinzip das gleiche Formular wie beim Hinzufügen schreiben kannst.
Vor der Ausgabe des Formulars rufst du aber die Daten des jeweiligen Produkts ab (z.B. kannst du beim Edit-Link die Produkt-ID per URL übergeben), und dann gibst du eben wie du's gewohnt bist die Daten in die Formularfelder aus.

Wenn nun das Formular abgeschickt wird, kannst du es wieder an die "Übersichtsdatei" schicken, wo du per if-Abfrage diese Aktion abfängst.
Dann kannst du die Daten aus dem Editierungsformular einfach abrufen und über einen UPDATE Befehl übernehmen.

Ähnlich ist es dann beim Löschen, nur da brauchst du nicht unbedingt einen Zwischenschritt.
Einfach wieder per if-Abfrage diese Aktion abfangen und dann den Eintrag per DELETE Befehl entfernen, die Produkt-ID kannst du dann wieder per URL übergeben.

So, dass ist die Theorie, ich hoffe es ist nachvollziehbar, ansonsten einfach nochmal fragen.
Die Umsetzung ist aber dann nicht weiter schwierig, da es im Prinzip ähnlich dem ist, was du schon die ganze Zeit machst.
Mit der Zeit kann man dann nur immer noch Verbesserungen vornehmen, aber für den Anfang solltest du das auch hinbekommen ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast