PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit DELETE


Rudolfsport
23.01.2005, 09:08:26
hi,
ich melde mich ma wieder. Ich würde gerne, dass eine Spalte aus der DB an einer bestimmten Zeit gelöscht wird.
Dazu habe ich diesen Code:


<?
include("verbindung.php");
if(date("Y") >= 2005 && date("m") >= 01 && date("d") >= 23 && date("H") >= 08 && date("i") <= 50)
{
$loeschen = "DELETE datum FROM kontrolle";
}
else if(date("d") >= 23 && date("m") >= 01 && date("H") <= 10)
{
$loeschen = "DELETE datum FROM kontrolle";
}
?>

Die Verbindung zur DB ist okey, das habe ich schon überprüft.

Nun ist mein problem, dass an der bestimmten zeit, die ich definiert habe die spalte datum in der tabelle nicht gelöscht wird.

dirter
23.01.2005, 09:16:58
guten morgen,

zum löschen von spalten tut es der delete befehl nicht... :-)

dazu musst du dir den Alter (http://dev.mysql.com/doc/mysql/de/alter-table.html) befehl ansehen.

viele grüße

feuervogel
23.01.2005, 09:22:12
http://dev.mysql.com/doc/mysql/de/delete.html

>> DELETE löscht Zeilen aus tabelle, die mit der in where_definition angegebenen Bedingung übereinstimmen, und gibt die Anzahl der gelöschten Datensätze zurück.

steht da was von spalten? nein! und spalten zu löschen ist höchst unsauber.

Rudolfsport
23.01.2005, 09:34:05
ALTER COLUMN gibt einen Vorgabewert für eine Spalte an oder entfernt den alten Vorgabewert. Wenn der alte Vorgabewert entfernt wird und die Spalte NULL sein darf, ist der neue Vorgabewert NULL. Wenn die Spalte nicht NULL sein darf, weist MySQL einen Vorgabewert zu, wie in Abschnitt 7.5.3, „CREATE TABLE-Syntax“ beschrieben.

Liege ich richtig, dass ich das nehmen muss. Sähe dan der Code so aus:


<?
include("verbindung.php");
if(date("Y") >= 2005 && date("m") >= 01 && date("d") >= 23 && date("H") >= 08 && date("i") <= 50)
{
ALTER [COLUMN] datum {SET DEFAULT literal | DROP DEFAULT}
}
else if(date("d") >= 23 && date("m") >= 01 && date("H") <= 10)
{
ALTER [COLUMN] datum {SET DEFAULT literal | DROP DEFAULT}
}
?>


DAnn müsste das aber stimmen. Soweit wie ich das verstanden habe.

dirter
23.01.2005, 10:04:55
eine simple frage:

was heißt column?


und was du da kopiert hast, ist nicht der code den du benötigst.

Rudolfsport
23.01.2005, 10:18:55
Column heist Spalte.


<?
if(date("Y") >= 2005 && date("m") >= 01 && date("d") >= 23 && date("H") >= 09 && date("i") <= 36)
{
$sql= "ALTER [IGNORE] datum ALTER [COLUMN] datum {SET DEFAULT literal | DROP DEFAULT [, ALTER [COLUMN] datum {SET DEFAULT literal | DROP DEFAULT]";
}
else if(date("d") >= 23 && date("m") >= 01 && date("H") <= 10)
{
$sql = "ALTER TABLE datum ALTER [COLUMN] datum {SET DEFAULT literal | DROP DEFAULT [, ALTER [COLUMN] datum {SET DEFAULT literal | DROP DEFAULT]";
}
?>

So ist mein aktueller Code. Ich habe ihn probiert und es kommt keine fehlermeldung.

feuervogel
23.01.2005, 12:37:04
nimms mir nicht übel, aber du solltest dich erst mal ernsthaft damit auseinander setzen, wie das manual zu lesen ist, vielleicht hilft dir das hier (http://dev.mysql.com/doc/mysql/de/manual-conventions.html)

Rudolfsport
23.01.2005, 13:49:31
<?
if(date("Y") >= 2005 && date("m") >= 01 && date("d") >= 23 && date("H") >= 13 && date("i") <= 40)
{
$sql= "ALTER [IGNORE] datum ALTER [datum] {SET DEFAULT literal | DROP DEFAULT [, ALTER [datum] {SET DEFAULT literal | DROP DEFAULT]";
}
elseif(date("d") >= 23 && date("m") >= 01 && date("H") >= 13 && date("i") <= 45)
{
$sql= "ALTER [IGNORE] datum ALTER [datum] {SET DEFAULT literal | DROP DEFAULT [, ALTER [datum] {SET DEFAULT literal | DROP DEFAULT]";
}
?>

So ist mein aktueller Code, es zeigt keine Fehlermeldungen an, aber ledier löscht es auch nciht die einträge aus der spalte datum.
Wo liegt denn der Fehler. Bitte helft mir.

xabbuh
23.01.2005, 14:26:41
Zum einen glaube ich nicht, dass du wirklich die Spalte komplett aus der Tabelle entfernen willst, sondern einfach nur eine leere Zeichenkette in dieser Spalte stehen haben. Das wäre dann mit UPDATE (http://dev.mysql.com/doc/mysql/en/update.html) zu bewerkstelligen.
Um zum anderen kann in deinem Code auch gar kein Fehler ausgegeben werden, da dein Query nicht an die Datenbank (Stichwort: mysql_query() (http://www.php.net/mysql_query)) gesendet wird.
Außerdem solltest du wirklich mal den von feuervogel geposteten Link durchlesen. dann wirst du sicherlich auch merken, dass deine Abfrage relativ sinnfrei ist.

Rudolfsport
23.01.2005, 14:47:13
$sql= "UPDATE kontrolle SET datum='0'";

Das würde ich nun unter die dingends schreiben. Stimmts nun?

@xabbuh: das ist shcon drinnen nur in einer include datei, die ich vergessen hatte hier mit renzuschreiben.

xabbuh
23.01.2005, 14:52:50
Original geschrieben von Rudolfsport
$sql= "UPDATE kontrolle SET datum='0'";
Was willst du da jetzt eigentlich haben? Eine Null in jeder Zelle der Spalte datum?

Rudolfsport
23.01.2005, 14:55:30
jo und wenn dann wieder zeit ist, dann wird das in datum mit UPDATE überschrieben und dann bleibt das dort xminuten und später wirds dann wieder überschriebne mit 0000-00-00
So dachte ichs mir und so habe ich dsa auch aus dem Manual geschloßen.

xabbuh
23.01.2005, 15:22:55
UPDATE kontrolle SET datum = '0000-00-00'

Rudolfsport
24.01.2005, 20:54:25
hi,
das ist mein CODE:


<?php
include ("verbindung.php");
$datum=mysql_fetch_array(mysql_query("SELECT datum FROM kontrolle WHERE user_id='1'"));
$heute=date("Y-m-d");
if ($datum[0]==$heute){
echo "Zugriff verweigert";
}elseif ($datum[0]<$heute){
echo "Sie haben zugriff";
mysql_query("UPDATE kontrolle SET datum='$heute' WHERE user_id='1'");
}
if(date("Y") >= 2005 && date("m") >= 01 && date("d") >= 24 && date("H") >= 20 && date("i") <= 40)
{
$sql= "UPDATE kontrolle SET datum = '0000-00-00'";
}
elseif(date("Y") >= 2005 && date("m") >= 01 && date("d") >= 24 && date("H") >= 20 && date("i") <= 50)
{
$sql= "UPDATE kontrolle SET datum = '0000-00-00'";
}
?>

das komische ist: eingeragen wird in die tabelle. Nur eben dsa updaten geht nicht

xabbuh
24.01.2005, 21:32:01
Werden die entsprechenden Zweige der Abfragen ausgeführt? Hast du die Funktion mysql_error() verwendet?

Speziell bei dieser Abfrage: UPDATE kontrolle SET datum='$heute' WHERE user_id='1'?

Rudolfsport
25.01.2005, 17:58:27
da zeigt es auch nichts an.

$sql= mysql_query("UPDATE kontrolle SET datum = '0000-00-00'")or die ('Kann Query nicht ausführen while2 : ' . mysql_error());

xabbuh
25.01.2005, 18:59:13
Und du hast das Script auch erst nach 20.40 Uhr aufgerufen?

Rudolfsport
25.01.2005, 20:33:57
ja