Registrieren  •  Login 
  
 
im Forum


 FAQ   Mitgliederliste   Benutzergruppen   Teamseite   Suchen 

Problem mit DELETE

 
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 27.06.2008, 12:51    Titel: Problem mit DELETE

Hallo, erstmals!

...jedem Abonnementen wird bei Neuanmeldung ein Ablaufdatum im Format date zugewiesen.
Die Spalten der Tabelle members (es sind mehr, hier nur der Übersicht wegen verkürzt):

name email expiry (für Ablaufdatum)

Ein Eintrag in der Tabelle sieht dann z.B. so aus:

Maxi info@tralala.com 2008.06.27

Nun habe ich wieder einmal das Problem, den SQL-Befehl richtig zu formulieren!
Meine Frage: was ist an diesem Befehl falsch?

DB-Verbindung aufbauen

// aktuelles Datum in Variable speichern
$today = date('Y.m.d');

// entsprechende Datensätze löschen
$SQL="DELETE FROM members WHERE expiry='$today'";

Datenbankverbindung schließen

Wenn also expiry mit today übereinstimmt, sollen diese Eintragungen gelöscht werden.

Habe schon zig Varianten probiert (z.T. ohne Fehlermeldung), aber es wird einfach nichts gelöscht! Wo liegt der Fehler? Anführungszeichen? Variable?

Bitte um Hilfe und Danke im Voraus für Eure Bemühungen.

Mfg, Matthias
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13937
Wohnort: Wien

BeitragVerfasst am: 27.06.2008, 13:11    Titel:

Hallo Matthias.

Die große Frage für mich ist im Moment: Ist das Feld expiry wirklich vom MySQL Typ Date? Es müsste bei MySQL 4 und 5 zwar egal sein, ob man das Datum mit Punkten oder Bindestrichen trennt, aber teste es vielleicht einmal mit einem Bindestrich anstatt der Punkte. Hier bei meiner Testumgebung funktioniert es jedenfalls direkt in phpMyAdmin.


MfG Christian
_________________


Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von killerbees19.
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 27.06.2008, 13:30    Titel:

Hi, Christian!

Ist es nicht. Lediglich der eingetragene Wert entspricht dem Format date.

Also wie schon gesagt z.B. 2008.06.27

Ich denke, dass Problem liegt wieder bei der falschen Formulierung des DELETE-Befehles.

mfg, Matthias

PS: kannst Du mir bitte den SQL-Befehl für phpMyAdmin zum Testen durchgeben? Danke!

Dieser Beitrag wurde insgesamt 1 mal geändert. Zuletzt von kachimake.
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13937
Wohnort: Wien

BeitragVerfasst am: 27.06.2008, 15:34    Titel:

Tabelle im Format Date:
Code:
CREATE TABLE `test` (
  `name` varchar(255) collate latin1_general_ci NOT NULL,
  `email` varchar(255) collate latin1_general_ci NOT NULL,
  `expiry` date NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

INSERT INTO `test` VALUES ('killerbees19', 'spam1717@happytec.at', '2008-06-27');


SQL Query zum Auslesen:
Code:
SELECT *
FROM `test`
WHERE expiry = '2008.06.27'


Tabelle in deinem Format:
Code:
CREATE TABLE `test_new` (
`name` varchar( 255 ) COLLATE latin1_general_ci NOT NULL ,
`email` varchar( 255 ) COLLATE latin1_general_ci NOT NULL ,
`expiry` varchar( 255 ) COLLATE latin1_general_ci NOT NULL
) ENGINE = MYISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci;

INSERT INTO `test_new`
VALUES (
'killerbees19', 'spam1717@happytec.at', '2008.06.27'
)


Auslesen:
Code:
SELECT *
FROM `test_new`
WHERE expiry = '2008.06.27'


Also ich kann hier wirklich nur veruten, dass du der Spalte einen falschen Datentyp verpasst hast, den Query vllt. gar nicht ausführst, oder ähnliches. Denn das ist so ein einfaches Beispiel, das muss funktionieren. Trotzdem noch eine Frage: Von welche Typ ist die Spalte expiry? Kannst du das einmal nachsehen? Oder mache vielleicht gleich ein Backup der Tabelle (nur die Struktur).


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
kachimake
Mitglied
Mitglied



Anmeldedatum: 30.08.2007
Geschlecht: Männlich
Beiträge: 17
Wohnort: Japan

BeitragVerfasst am: 28.06.2008, 04:09    Titel: @Christian

Hallo, Christian!

Hier zum besseren Verständnis nochmal den Versuchsaufbau in Kurzform:

Bei einer Neuanmeldung werden die Benutzerdaten + ein Ablaufdatum (zwecks Test im Beispiel 0 Tage-also heute) in der DB angelegt.

PHP-Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
// Ablaufdatum ermitteln
$today date('Y.m.d');
$tstamp mktime(000date("m"), date("d")+0date("Y"));
$expiry date("Y.m.d"$tstamp);

// Verbindungsaufbau

// Daten an DB übergeben
$sql="INSERT INTO members (name,email,expiry) VALUES ('$name','$email','$expiry')";
mysql_query($sql);

// Datenbankverbindung schlißen
?>


Funktioniert alles, expiry steht dann in diesem Format: 2008.06.28 in der DB. Da es sich hier nicht ausschließlich um Zahlen handelt (wg. der Punkte), habe ich der Spalte expiry ein VARCHAR(10) verpasst.

Wenn ich nun direkt in phpMyAdmin:
DELETE FROM members WHERE expiry="2008.06.28";
eingebe, werden alle entsprechenden Datensätze gelöscht.

Sobald aber die Variable ins Spiel kommt, passiert gar nichts:

PHP-Code:
1
2
3
4
5
6
7
]<?php
// Datum formatieren
$today date('Y.m.d');

// entsprechende Datensätze löschen
$SQL="DELETE FROM members WHERE expiry='$today'";
?>


Wenn ich mir $today ausgeben lasse, kommt als Ergebnis (logischerweise):
2008.06.28

Also exakt das gleiche Format (und Datum) wie es auch in der Spalte expiry steht.

Warum wird nun im obigen DELETE-Befehl die WHERE-Bedingung nicht ausgeführt? Ich vergleiche doch lediglich 2 Zeichenketten auf Übereinstimmung?

Danke im Voraus,
mfg Matthias

Dieser Beitrag wurde insgesamt 2 mal geändert. Zuletzt von kachimake.
Nach oben
Benutzer-Profile anzeigen kachimake ist derzeit offline Private Nachricht senden
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13937
Wohnort: Wien

BeitragVerfasst am: 28.06.2008, 10:49    Titel:

Abgesehen davon, dass Date für dieses Feld trotzdem besser geeignet wäre als VARCHAR, da so ein schnellerer Vergleich möglich ist und du eigentlich nichts ändern müsstest (max. Bindestriche statt Punkte), probier es einmal so:
Code:
$SQL="DELETE FROM members WHERE expiry='" . $today . "'";

Entschuldige dann diese Frage, aber: Du führst diesen MySQL Query dann aber darunter schon richtig aus, oder?
Code:
mysql_query($SQL); // groß geschriebenes $SQL !!!

Ich frage das nur sicherheitshalber, nicht dass wir hier vielleicht einen Fehler suchen, der nur ein Tippfehler ist Wink


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.
Du kannst Dateien in diesem Forum nicht hochladen.
Du kannst Dateien in diesem Forum nicht herunterladen.

 

Alle Zeiten sind GMT + 2 Stunden (Sommerzeit)
Aktuelles Datum und Uhrzeit: 04.04.2020, 20:42
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!
Software based on work from the phpBB-Group  •  Deutsche Übersetzung von phpBB.de

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]