Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

einfache frage

Diskussion: einfache frage im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Und zwar hab ich eine einfache Frage, aber ich kapier es einfach nicht... Ich will einen Datensatz aus mysql ...

Antwort
Alt 12.01.08, 00:02   #1 (permalink)
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard einfache frage

Anzeige

Und zwar hab ich eine einfache Frage, aber ich kapier es einfach nicht...

Ich will einen Datensatz aus mysql löschen, im Internet steht überall das:

DELETE FROM links WHERE id = '2';

und dazu funktioniert das nicht mal, denn mysql zeit mir dann immer diesen fehler:

#1054 - Unknown column 'id' in 'where clause'


Könnt ihr mir bitte einfach mal einen Befehl schreiben wenn:

Tabelle: test
Spalte: name

und darin, hätte ich z.B. gerne den 3 datensatz gelöscht.

wie muss der Befehl aussehen? ich kapiere es einfach nicht.
Vielleicht kapiere ich es ja, wenn ich ein Beispielbefehl mit diesen beispieldaten sehe.

gugugs ist offline   Mit Zitat antworten
Alt 12.01.08, 00:13   #2 (permalink)
Member of Honour
 
Benutzerbild von justj
 
Registriert seit: 12.07.02
justj Leistung: 8086
justj eine Nachricht über ICQ schicken
Likes: 29
Standard

Mal in der Annahme, dass deine Tabelle "test" so aussieht:

Spalte1 | Spalte2 | Name
abc | def | ghi
jkl | mno | pqr
stu | vwx | yz
.. | ... | ...

Und du möchtest den Datensatz, welcher den Namen "pqr" trägt löschen, dann lautet der entsprechende Befehl:
Code:
DELETE FROM test WHERE Name="pqr"
MfG
justj

Edit: Danke CDW, ich habe es geändert.
__________________
"Und die See wird allen neue Hoffnung bringen,
so wie der Schlaf die Träume bringt daheim."
- Christoph Kolumbus
justj ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 12.01.08, 00:27   #3 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Die Datensätze müssen nicht geordnet gespeichert sein. D.h mysql hat keinerlei Kenntnis davon, welcher Datensatz für Dich der 3 ist . Entweder Du hast eine zusätzliche Spalte mit einer ID (der "Nummer") oder gibts eine andere Bedingung beim Löschen an.
PS:
DELETE FROM test WHERE name ='myname'
also ohne *
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 12.01.08, 00:50   #4 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

Ah vielen danke, das hab ich vestanden. Und das mit id ging bei mir nur nicht weil ich keine id spalte angelegt hatte.

aber wenn ich jetzt diese ids hab:
1
2
3

und ich lösche 1 dann bleiben noch

2
3

wie kann ich es machen, das die ids wieder zurück rutschen nach

1
2

???
gugugs ist offline   Mit Zitat antworten
Alt 12.01.08, 00:57   #5 (permalink)
Member of Honour
 
Benutzerbild von justj
 
Registriert seit: 12.07.02
justj Leistung: 8086
justj eine Nachricht über ICQ schicken
Likes: 29
Standard

Soweit ich weiß ist das einfach nicht möglich, du müsstest dann jede alte id, also zum Beispiel die 2 durch eine neue, in dem Fall dann die 1 ersetzen.
Warum willst du denn, dass die IDs immer vorne anfangen?
es macht doch grundsätzlich nichts, wenn da welche fehlen...

MfG
__________________
"Und die See wird allen neue Hoffnung bringen,
so wie der Schlaf die Träume bringt daheim."
- Christoph Kolumbus
justj ist offline   Mit Zitat antworten
Alt 12.01.08, 00:59   #6 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

wenn ich z.b. ein gäste buch habe. will ich, das dann dort alle beiträge stehen, und ich dann mit löschen einen befehl an sql, und genau diesen eintrag dann gelöscht wird. wie mach ich das am besten?
gugugs ist offline   Mit Zitat antworten
Alt 12.01.08, 01:08   #7 (permalink)
Test User
Guest
 
Likes:
Standard

Hi,

dann gibst du im jeweiligen Fenster von SQL Ausführen dein "Befehl" ein und klickst auf Absenden.
  Mit Zitat antworten
Alt 12.01.08, 01:08   #8 (permalink)
Member of Honour
 
Benutzerbild von justj
 
Registriert seit: 12.07.02
justj Leistung: 8086
justj eine Nachricht über ICQ schicken
Likes: 29
Standard

Dein Gästebuch müsste jedem Eintrag eine ID zuweisen, am besten automatisch aufsteigend, dass kannst du beim Anlegen der Tabelle für einzelne Spalten festlegen(autoincrement).
Ich nehme mal an, dass du löschen willst, wenn du als Admin eingelogt bist.
Du musst das Gästebuch dann so machen, dass entweder jeder Eintrag einen "Löschen" Button hat, der fest mit der ID des Eintrags verbunden ist, oder du machst einen Löschbutton, welchem du die ID des Beitrags, der gelöscht werden soll, selber mitteilen musst. Dafür wäre es dann sinnvoll, wenn dein Gästebuch die IDs der Einträge im "Adminmodus" anzeigt.

MfG
__________________
"Und die See wird allen neue Hoffnung bringen,
so wie der Schlaf die Träume bringt daheim."
- Christoph Kolumbus
justj ist offline   Mit Zitat antworten
Alt 12.01.08, 01:16   #9 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

hmm... hab ich leider nicht so ganz verstanden. aber ich entscheide mich für die variante hinter jedem intrag ein löschen, wie würde das den ungeffähr aussehen, wenn das mein code zum anzeigen ist?


include "config.php";
mysql_connect (MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR
die ("Verbindung zu MYSQL fehlgeschlagen");
mysql_select_db (MYSQL_DATABASE) OR
die ("Verbindung zur MYSQL DATABASE fehlgeschlagen");
$sql = "SELECT name, inhalt FROM gaestebuch";
$result = mysql_query($sql);
while($row = mysql_fetch_object($result))
{
echo "<center>";
echo "<table border=\"0\"><tr><td>";
echo "Name:";
echo "</td><td>";
echo $row->name;
echo "</td></tr>";
echo "<tr><td>";
echo "Inhalt:";
echo "</td><td>";
$row->inhalt = wordwrap( $row->inhalt,30, "<br>", 1);
echo $row->inhalt;
echo "</td></tr>";
echo "</table>";
echo "<br>";
echo "</center>";
}
gugugs ist offline   Mit Zitat antworten
Alt 12.01.08, 01:20   #10 (permalink)
Test User
Guest
 
Likes:
Standard

Hi,

mach dich da Mal schlau => http://reeg.junetz.de/DSP/node10.html => http://www.sql-und-xml.de/server-dat...hle/index.html

Und immer gilt: Vorher ein Backuo machen.
  Mit Zitat antworten
Alt 12.01.08, 14:14   #11 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Standard

Zitat:
Original von gugugs
wie kann ich es machen, das die ids wieder zurück rutschen nach
Am besten gar nicht, denn IDs haben den Zweck, einen Datensatz eindeutig zu identifizieren, egal zu welchem Zeitpunkt. Wenn du die IDs aber regelmäßig neu verteilst, dann ist der Datensatz mit ID 2 nicht zu jedem Zeitpunkt derselbe.

Würden beispielsweise mehrere Leute gleichzeitig die Datensätze bearbeiten und jeweils kurz hintereinander #5 löschen wollen, so löscht der erste den korrekten Datensatz, der zweite hingegen den Datensatz, der vorher #6 war, weil du die IDs nach dem Löschen neu sortierst.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
Alt 13.01.08, 02:12   #12 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

stimmt, klingt einleuhtend...
aber wie bekomme ich jetzt das hin, was ich vor hab. hab mir jetzt schon ziemlich viel durchgelesen, kapiere es aber immer noch nicht. kann mir nicht einer mal bitte helfen? und ein beispiel oder so mal schreiben oder zeigen? bitte bitte
gugugs ist offline   Mit Zitat antworten
Alt 13.01.08, 03:02   #13 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

OK, da gibt es zwei Sachen:

Zum einen gibst du jedem Dateinsatz eine eindeutige Nummer, die sich später nicht mehr ändert. Das wird in Datenbanksystemen ein "Primärschlüsse" genannt und dieser Primärschlüssel wird verwendet um Datensätze zu identifizieren (und auch zu indizieren). Angenommen du hast folgenden Datensatz:

Code:
ID | Name       | Adresse
--------------------------------
15 | Herr Meier | Frankfurterstraße 55
und möchtest den jetzt löschen. Woher soll MySQL genau wissen, welchen Datensatz du löschen willst?
Du kannst einfach sagen: "lösche den mit der ID 15" und genau dieser Datensatz ist weg.

Code:
delete from `tabelle` where `ID` = 15;
Du kannst eine solche Durchnummerierung erzeugen, indem du ein Feld in deiner Tabellenstruktur von Type "Integer" (oder sonstige Zahl) mit "auto_increment" versiehst und am besten auch gleich als Primärschlüssel ("Primary Key") hernimmst, damit deine Datenbank schneller wird.

Wenn du jetzt einen neuen Datensatz erzeugst, lässt du die Definition für das Indexfeld einfach weg:

Code:
insert into `tabelle` ( `Name`, `Adresse` )  values ( 'Horst', 'Teststrasse 15' );
oder du füllst den Wert mit "null":

Code:
insert into `tabelle` ( `ID`, `Name`, `Adresse` )  values ( null, 'Horst', 'Teststrasse 15' );
Dann sorgt das auto_increment dafür, dass das Feld einen neuen, aufsteigenden Wert enthält.

Wenn du die Datensätze ausgibst (per PHP), liest du einfach die ID mit aus und kannst anhand davon dann edit- oder delete-Statements generieren:
Code:
<a href="index.php?deletepost=15">Loeschen</a>
PHP-Code:
<?php
if ($_GET['deletepost']) {
$id intval($_GET['deletepost']);

$sql "delete from `tabelle` where `ID` = $id";
mysql_query($sql);
}
?>
Natürlich musst du das ganze noch absichern und besser kontrollieren. Was man mit einer Adminoberfläche eben so macht.
Aber das ist das Prinzip dieser Auto_increment Sache ...

Zweitens:
Wenn du deine Posts auf der Seite durchzählen willst, solltest du das nicht über die Datenbank, sondern über eine PHP-Logik machen.

Post_Nummer = Nummer_vom_ersten_Post + Reihenfolge_der_Anzeige

Du musst also nur bei jeder Ausgabe mitzählen und den Zähler jeweils um 1 erhöhen.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Alt 13.01.08, 13:15   #14 (permalink)
Themenstarter
 
Registriert seit: 25.11.06
gugugs Leistung: Facit NTK
Likes: 0
Standard

also, das mit dem auto_increment und dem primary_key hab ich sowieso schon gemacht.

aber den php code unten versteh ich teilweise wieder nicht so ganz. wird jetzt einfach nur die id zum jeweiligen post abgerufen? und diese dann gelöscht? wenn ja, warum dann die if anweisung? oder ist es etwas ganz anderes?
gugugs ist offline   Mit Zitat antworten
Alt 13.01.08, 13:31   #15 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Das war bloß ein Beispiel, wie du über PHP an die ID kommen kannst.

1. Du listest alle Einträge z.B. in einer Tabelle auf. Zu jedem Eintrag kannst du dann einen Link der Form "index.php?delete=<id>" machen.

2. Wenn der Administrator auf den Link klickt wird index.php aufgerufen mit delete=<id> als Parameter.

3. Dort schaust du, ob eine Löschen-Anweisung erfolgen soll (also ob der delete-Parameter gesetzt wurde). Das ist die If-Abfrage.

4. Falls "delete" gesetzt wurde, löst du einfach eine MySQL-Query aus, die den Entsprechenden Eintrag entfernt. Dazu nimmst du die Variable "delete", die du vorher übergeben hast und welche die zu löschende ID enthält.

Falls du mit diesem Mechanismus noch Probleme hast, solltest du dir nochmal den Manual-Teil zum Abfragen von Seitenparametern durchlesen. Das ist nämlich kein MySQL-Spezifischer Teil, sondern es wird allgemein in der Webseitenkommunikation verwendet.

mfg, metax.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter
metax. ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » einfache frage
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Einfache Slideshow Franzl (Web-) Design und webbasierte Sprachen 13 03.04.08 10:52
Einfache Verschlüsslung valenterry Cryptography & Encryption 4 11.12.06 21:56
einfache GUI mit C++? Cloud2302 Code Kitchen 4 10.06.06 16:09
ganz EINFACHE frage KroaX (In)security allgemein 4 25.03.04 22:45


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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61