Abfrage ob Primary Key gelöscht werden darf?

kbit

Erfahrenes Mitglied
Hi ich wähle aus einer checkbox einen Datensatz aus und anhand der ID lösche ich ihn dann wenn auf löschen geklickt wird.
PHP:
$del = "DELETE From city Where C_ID='".$_POST['check']."'";

Dabei enthält ['check'] die ID aus dem ausgewählten Datensatz.
Nun habe ich zwei Tabellen.
Die eine city: C_ID(Primary Key) und Stadt und die ander strasse: S_ID(Primary Key),C_ID(Fremdschlüssel), strasse


Nun möchte ich das so machen wenn ich aus city die C_ID 3 lösche soll überprüft werden ob in strasse eine C_ID mit 3 vorhanden ist. Ist dies der Fall soll der Löschvorgang nicht ausgeführt werden und eine Fehlermeldung ausgegebn werden das die C_ID nicht gelöscht werden darf weil noch ein Fremdschlüssel mit derselben ID vorhanden ist.
Kann ich das in der DELETE Funktion schon abfragen oder muss ich vorher noch eine Abfrage starten die überprüft ob die ID vorhanden ist oder nicht?
 
Du kannst auch vorher schon mal in deiner Datenbank den Fremdschlüssel so ordentlich definieren, dass das Löschen von sich aus schon gar nicht möglich ist, wenn noch Referenzen auf den Schlüssel vorliegen.

Welches DBMS?

Ansonsten kannst du natürlich auch vorher einfach mal ein Select auf die ID absetzen.
Unschön, aber machbar.
 
Ja das problem ist der webspace den ich benutze verwendet phpmyadmin und der unterstützt kein innodb und deshlab kann ich den fremdschlüssel nicht ordentlich setzten und muss diesen umweg gehen. Wie könnte ich das denn mit dem Select machen ? Hab im moment keine Idee
 
SQL:
select * from strasse where <fremdschlüssel> = <zu_löschender_schlüssel>

und dann in php

PHP:
if(mysql_num_rows(query) == 0)
    löschen();
else
    fehler();
 
Hi besten dank das funktioniert.
Ich habe noch eine andere Frage und zwar wollte ich eine mehrfachauswahl realisieren mit den checkboxen, also wenn ich mehr als eine anklicke das alle gelöscht werden.
Ich hatte gelesen das wenn man beim name [] mit angibt wäre das für die mehrfachauswahl.

PHP:
echo'<input type="checkbox" name="check[]" value="'.$row['C_ID'].'">';

PHP:
$del = "DELETE From city Where C_ID='".$_POST['check[]']."'";

Das Problem ist das wenn ich die Delete funktion so schriebe meckert er immer das er halt die spalte array nicht kennt. Was ja auch klar ist. Aber wie kann ich denn sonst die mehrfachauswahl realisiern ?
 
Die SQL-Funktion in() sollte dich weiterbringen.
Dein Array musst du noch zu einem String der Form
PHP:
$in_values = "'wert1', 'wert2', 'wert3'";
umwandeln.

Dann kannst du schreiben

PHP:
$query = 'Select * from tabelle where value in ('.$in_values.')';
 
So ganz ist mir das noch nicht klar. Ich mein ich könnte sagen:

PHP:
$array=array('1','2','3');
$in=implode(","$array);

echo $in;

Dann wird mir 1,2,3 ausgegeben. Nur kann ich ja nicht wenn ich 70 Datensätze habe alle zahlen von 1-70 dort eintragen.
 
PHP:
$string;

for($i=0; $i<sizeOf($array); $i++) {
    $string .= "'".$array[$i]."'";
    if($i != sizeOf($array) - 1)
        $string .= ", ";
}

Zufrieden? :)
 

Neue Beiträge

Zurück