Hey, ich hab ne Frage:
ich hab ein Script geschrieben, das mir die Verwaltung von Veranstaltungen ermöglicht. Funktioniert auch gut, aber ein paar kleine Probleme hab ich noch:
Die Tabelle, in der die Veranstaltungen ausgegeben werden, soll nach Datum sortiert werden.
Erscheint, wenn ich etwas eintrage ganz oben auf der Seite eine “1”. nicht weiter schlimm, aber woher kommt die?
Wird unter dem lösch-button manhcmal die Statusmeldung “gelöscht”, manchmal “nicth gelöscht” ausgegeben, obwohl es immer erfolgreich gelöscht wurde.
und zu guter letzt, weiß jemand, wie ich das Datumsformat in der MySQL-Datenbank von: 2008-10-15 auf 15.10.2008 umstell?
$ergebnis=mysql_query("SELECT * FROM `gigs` ORDER BY `datum`");oder falls es andersrum sortiert werden soll:
$ergebnis=mysql_query("SELECT * FROM `gigs` ORDER BY `datum` DESC");
Nur ne Vermutung. Und auch sehr wahrscheinlich das es nicht stimmt, aber könnte es an:
echo $database;liegen? Ist die einzige Idee die ich dazu habe…
Also wird wahrscheinlich eine andere mysql-Operation sich eingemischt haben. Vielleicht solltest du die Abfrage nach der Anzahl der Reihen gleich nach dem löschen machen und dann in eine Variable speichern. Das könnte das Problem beheben.
Tja, bei dem letzten kann ich dir nicht helfen. Wobei. Muss es unbedingt in der DB umgestellt werden? Falls nicht kannst du dir das selber zusammen setzen mit $i = exlode(TRENNZEICHEN, STRING). Die Funktion liefert ein Array zurück das man dann wieder zusammensetzen kann.
danke erstmal!!!
zu 1.: funktioniert perfekt, danke!
zu 2.: meine mysql_connet sieht so aus:
$conID = mysql_connect( localhost, root, ****** ) or die( "Die Datenbank konnte nicht erreicht werden!" );
$database = mysql_select_db( test, $conID );
zu 3.: wie mach ich das am besten? so funktioniert es nicht:
$loeschbestaetigung = "mysql_affected_rows()";
...........
if ($loeschbestaetigung == 1)
{
echo "<font color=green>Der Datensatz wurde hinzugefügt!</font>";
}
else
{
echo "<font color=red>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</font>";
}
zu 4.: wenn ichs so mach wie hummer gesagt hat, zeigt er bei allen einträgen 01.01.1970 als datum an.
$loeschbestaetigung enthält jetzt den String mysql_affected_rows(), also nicht,
wie von dir beabsichtigt den Rückgabewert der Funktion. So wärs richtig:
$loeschbestaetigung = mysql_affected_rows();
Deine if-abfrage würde ich wie folgt um schreiben:
if ($loeschbestaetigung == 1) {
echo "<font color=green>Der Datensatz wurde hinzugefügt!</font>";
} else if ($loeschbestaetigung > 1) {
echo "<font color=red>Es wurde mehr Datensatz als <strong>ein</strong> Datensatz hinzugefügt!</font>"
} else {
echo "<font color=red>Der Datensatz konnte <strong>nicht</strong> hinzugefügt werden!</font>";
}
der Rückgabewert von mysql_select_db() ist nunmal true, also wird die 1 ausgegeben. Daher lösch enfach das echo $database;
Das mit dem Datum: gibts du auch das englische Datumsformat ein?
Ansonsten, wenn du es so eintragen willst “dd.mm.yyyy”, musst du es vorher ins englische umwandeln:
klappt
nur mit 4. hab ich immernoch das “01.01.1970”-Problem.
kann ich nicht bei der abfrage das ganz wieder über split usw. rückgängig machen?
also quasi so:
eins wäre noch schön, ist es ohne all zu großen aufwand möglich nur den eintrag mit dem datum, das dem heutige am nächsten ist anzuzeigen? wie ich das „späteste“ datum anzeig is mir halbwegs klar, aber der eintrag mit dem nächsten datum???
danke, danke, danke
p.s.: danke Wizard, aber es funktioniert schon mit hummers Methode!
Danke! Da muss mal halt alle vergangenen Termine löschen. Weißt du ob man das irgendwie über den Timestamp von php machen kann, dass es tatsächlich der nächste ist?
Funktioniert leider immernoch nicht.
Vielleicht kannst du mir aber sagen, wie ich korrekt ein datum im Format tt.mm.jjjj in ein timestamp umwandeln kann. dann kann ich einfach ne weitere spalte in mysql machen mit dem timestamp und das nachher vergleichen, damit spar ich mir UNIX_TIMESTAMP, ich habs so versucht:
intval() wurde in dem Zusammenhang mit der Stringumwandlung ja bereits genannt.
Zum SQL-Problem:
Variablen unter ’ werden nicht geparst, heißt so viel wie $heute wird als $heute in die DB geschossen. Folglich steht in der Abfrage Bullshit.
Entweder unter " setzen oder anständig mit ‘.$heute.’ verketten.
Man gut ich hab diese Probleme nicht…
Ich speicher immer schön meine unix_timestamps als INT in der Datenbank.
Der Fehler sagt aus: du hast versucht der Funktion mktime() an vierter stelle ein string zu geben (string = text), aber die Funktion mktime darf nur long Werte bekommen (long = ganzzahl).
Demnach hat also etwas mit dem splitten nicht ganz geklappt.
manchmal reicht es einfach intval() um die dinger rum zu machen.
aber je nachdem wo das Datum herkommt ist diese Lösung vielleicht nicht so Optimal.
Warum speicherst du das Datum nicht in einem Feld vom Typ “date” ab? Dann brauchst du nur noch in der Abfrage ORDER BY datum DESC LIMIT 1 angeben und man brauch den ganzen Gedöns mit maketime() nicht mehr.
Um dann das Datum ins Format tt.mm.jjjj zu bekommen:
Möglichkeit mit SQL: $ergebnis = mysql_query("SELECT DATE_FORMAT(datum, %d.%m.%Y) AS newdate FROM gigs ORDER BY datum DESC LIMIT 1");
$row = mysql_fetch_object($ergebnis);
echo $row->newdate;
Möglichkeit mit PHP: $newdate = date("d.m.Y", strtotime($row->date));
echo $newdate;
hab das “AS ts” hinter “UNIX_TIMESTAMP(datum)” entfernt und $heute in “” gesetzt, dann gings. damit wär eigentlich alles geklärt. danke!
nur noch rein aus interesse, weil ich nix dazu finden kann, was bewirkt bei PHP “\r\n” ???