# SQL - Datenbank auslesen und löschen



## SasserVirus (26. Juli 2007)

Hallo!

Mal wieder nen Problem; aaalso,

ich hab ne SQL - Datenbank mit einer Tabelle namens "admin". In dieser sind folgende Felder: id, user, password und email! Die Connectdaten habe ich in einer config.php!

Jetzt möchte ich gern ein Listenfeld, indem alle Admins aufgelistet werden. Diese möchte ich gern markieren können und per Löschen-Button komplett aus der SQL-Datenbank löschen!

Wäre sehr schön, wenn ich einen Ansatz bekommen würde, also den Grundaufbau! Anpassen würde ich es selbst!

Danke schonmal!


----------



## Comenius (26. Juli 2007)

Hi,

so wie ich das verstanden habe, kommst du mit MySQL nicht klar? 

Du lässt dir einfach die Tabelle "admin" ausgeben, oder vorzugsweise nur den Namen (user).
Anschliessend kannst du mit selbigen die entsprechenden Einträge in der Datenbank löschen.

Helfen könnte dir diese Website: http://www.schattenbaum.net/php/mstart.php

Es wäre unnötig sich hier einen Wolf zu tippen, da auf der Website alles wunderbar erklärt ist. 

Viel Spass;-)

Gruss
Commi

Edit: Gerade eben erst gemerkt... Meinst du überhaupt MySQL, oder SQL ?


----------



## SasserVirus (26. Juli 2007)

Ja, aber wie kann ich denn sowas in einem Listenfeld realisieren? Also dass ich einen Datensatz markiere und per Button lösche?

Wäre über ein Script mit Beschreibung sehr erfreut, da ich es gern lernen würde!


----------



## Comenius (26. Juli 2007)

Hmmm...

Du fragst als erstes die Datenbank ab und packst alle Usernamen in ein Array.
Dieses Array lässt du zählen 

```
$useranzahl = count($Array_der_Usernamen);
```
Nun musst du dieses Array mit Hilfe einer Schleife ausgeben lassen.

Etwa so:

```
<?php
echo "<form>";
echo "<select name=\"test\" size=\"1\">";
for($i = 0; $i < $useranzahl; $i++){
echo "<option value=\"$i\">$Array_der_Usernamen[$i]";
}
echo "</select>";
echo "<form>";
?>
```

Nun kannst du die einzelnen Einträge auswählen und mit einem Button den Wert weiterschicken. Anschließend noch aus der Datenbank den entsprechenden Wert löschen und feddisch 

Ich hoffe, ich konnte dir einen Gedankenanstoß geben.

Gruss
Commi


----------



## SasserVirus (26. Juli 2007)

Sooo, habs folgendermaßen gemacht;


```
include("config.php");


$result=mysql_query("select user from admin");

$useranzahl = count($user);

echo "<form>";
echo "<select name=\"admins\" size=\"10\">";
for($i = 0; $i < $useranzahl; $i++){
echo "<option value=\"$i\">$user[$i]";
}
echo "</select>";
echo "<form>";



?>
```

Mir wird aber nur der 1. Datensatz angezeigt und davon nur der 1. Buchstabe....

Und wie realisiere ich das mit dem Button? Bitte hilf mir, bin totaler Anfänger in Sachen PHP 

Ich hatte schon den folgenden Code gehabt;


```
<html>
<head>
<title>
</title>
<link rel="stylesheet" href="format.css" type="text/css">
</head>
<body bgcolor="#E6E6FA"><center>
<font size="+1"><b>Administratoren</b></font><br>
<select name="Administratoren" size="10" style="width:350px">
<?php
include("config.php");
$SQL_statement="SELECT `user`,`email` FROM `admin` ORDER BY `id`";
$resultset=mysql_query($SQL_statement);
while($data=mysql_fetch_array($resultset)){
echo '<option>'.$data['user'] .' ('.$data['email'] .')</option>';}
mysql_close();
?>
</select>
```


Kann man den nicht umbauen, sodass man den ausgeählten Datensatz per Button löschen kann? Wie mache ich das?


----------



## Comenius (26. Juli 2007)

Das mit dem Array und count(), sollte zum einfacheren Verstehen beitragen.

Am besten, du lässt die Spalte "user" gleich bei der Datenbankabfrage mit zählen:
http://www.tutorials.de/forum/php/188930-php-mysql-count-wie.html

Du brauchst am Ende eine Variable, in der die Anzahl der User - die sich in der Datenbank befinden - steht.
Ebenfalls benötigst du ein Array mit allen Usernamen.

Danach kannst du dies hier anwenden, um erst einmal alles schön auszugeben. 
Die Anzahl der User brauchst du für die Schleife, damit sie nur so oft die Zeile echo "<option value=\"$i\">$Array_der_Usernamen[$i]"; ausgibt,
wie auch überhaupt Usernamen vorhanden sind.
$i erhöt sich bei jedem durchlauf um 1 und wird gleich für das Array mit verwendet, um alle Namen nacheinander auszugeben. Auf den Inhalt eines Arrays greift man ja mit der Zahl in Klammern zu. $Array_der_Usernamen[0], $Array_der_Usernamen[1], usw...



```
<?php
echo "<form>";
echo "<select name=\"test\" size=\"1\">";
for($i = 0; $i < $useranzahl; $i++){
echo "<option value=\"$i\">$Array_der_Usernamen[$i]";
}
echo "</select>";
echo "<input type=\"submit\" name=\"loeschen\">";
echo "<input type=\"hidden\" name=\"hidden\">";
echo "<form>";
?>
```

Ich habe mal ein Tutorial geschrieben, dass sich mit der Verarbeitung eines Formulars befasst. Dort wird auch der "hidden"-Button erklärt:
http://www.tutorials.de/forum/php-tutorials/207714-formular-uberpruefung-mit-fehlerausgabe.html

Wie im Tutorial beschrieben, kannst du in der If-Anweisung (Falls das Formular abgeschickt wurde) wieder mit MySQL arbeiten und den betreffenden Wert löschen.

Da ich weiß wie es dir geht, werde ich mal eben eine mögliche Lösung tippseln. 

Gruss
Commi


----------



## SasserVirus (26. Juli 2007)

Hmmm, komme net so richtig klar, SQL mach ich seit 2 Tagen vll.!

Ich begreife es am besten, wenn ich den fertigen Code sehe. So habe ich mir alles angelernt!

Wie sage ich nun dem Button, was er löschen soll? Das Listenfeld hab ich ja schon und da stehen auch meine User drin!

Und nun? Bitte etwas einfacher erklärt...


----------



## Comenius (26. Juli 2007)

Na wenn du deine Liste - inklusive Usernamen bereits hast, kann ich mir die Arbeit sparen ;-)

Du fügst nun in dein Formular als Ziel folgendes ein: action="<?php echo $_SERVER['PHP_SELF']?>">
Denke auch an das "hidden"-Feld, oberhalb des loeschen-Buttons:
<input type="hidden" name="hidden">
Über das Formular kommt noch etwas PHP.


```
<?php 
// Hier oben steht die Datenbankabfrage, die du für das Formular brauchst.

  if(isset($_POST['ueberpruefung']))  
  {  
 // Hier übergibst du die abgeschickte Variable aus dem Formular
// und Löscht den betreffenden Wert aus der Datenbank.
// Wie das Löschen funktioniert, kannst du auf der Website nachlesen, die ich dir vorhin gepostet habe (schattenbaum.net)

   } 
    else 
  { 
  ?> 

<form name="blabla" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
...der Bereits funktionierende Inhalt...
<input type="hidden" name="ueberpruefung">
<input type="submit" name="loeschen" value="loeschen">
</form>

<?php } ?>
```

Schau mal ob du klar kommst, wenn nicht: Ein Post genügt 

Gruss
Commi

EDIT: Poste mal bitte deinen jetzigen Code


----------



## SasserVirus (26. Juli 2007)

So das ist jetzt mein Code, wenn ich auf löschen klicke passiert aber noch nicht... Fehlt mir noch was oder hab ich was übersehen? 


```
<html>
<head>
<title>
</title>
<link rel="stylesheet" href="format.css" type="text/css">
</head>
<body bgcolor="#E6E6FA"><center>
<font size="+1"><b>Administratoren</b></font><br>
<?php 
// Hier oben steht die Datenbankabfrage, die du für das Formular brauchst.

  if(isset($_POST['ueberpruefung']))  
  {  
 // Hier übergibst du die abgeschickte Variable aus dem Formular
// und Löscht den betreffenden Wert aus der Datenbank.
// Wie das Löschen funktioniert, kannst du auf der Website nachlesen, die ich dir vorhin gepostet habe (schattenbaum.net)

   } 
    else 
  { 
  ?> 

<form name="delete_admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<select name="admins" size="10" style="width:350px">
<?php
include("config.php");
$SQL_statement="SELECT `user`,`email` FROM `admin` ORDER BY `id`";
$resultset=mysql_query($SQL_statement);
while($data=mysql_fetch_array($resultset)){
echo '<option>'.$data['user'] .' ('.$data['email'] .')</option>';}
mysql_close();
?>
</select>
<input type="hidden" name="ueberpruefung">
<input type="submit" name="loeschen" value="loeschen">
</form>

<?php } ?>
</body>
</html>
```


----------



## Comenius (26. Juli 2007)

Büddeschön... Nicht getestet!


```
<html>
<head>
<title>
</title>
<link rel="stylesheet" href="format.css" type="text/css">
</head>
<body bgcolor="#E6E6FA"><center>
<font size="+1"><b>Administratoren</b></font><br>
<?php 
include("config.php");
 $loeschen = "DELETE FROM `admin` WHERE `user` = '$userzumloeschen'";
 $loesch = mysql_query($loeschen);
mysql_close();

  if(isset($_POST['ueberpruefung']))  
  {  
$userzumloeschen = $_POST['admins']; 
   } 
    else 
  { 
  ?> 

<form name="delete_admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<select name="admins" size="10" style="width:350px">
<?php
include("config.php");
$SQL_statement="SELECT `user` FROM `admin` ORDER BY `id`";
$resultset=mysql_query($SQL_statement);
while($data=mysql_fetch_array($resultset)){
echo "<option value=\"$data['user']\">$data['user']</option>";}
mysql_close();
?>
</select>
<input type="hidden" name="ueberpruefung">
<input type="submit" name="loeschen" value="loeschen">
</form>

<?php } ?>
</body>
</html>
```


----------



## SasserVirus (26. Juli 2007)

Er meckert an dieser Zeile rum;


```
echo "<option value=\"$data['user']\">$data['user']</option>";}
```


----------



## Comenius (26. Juli 2007)

Ich habe bis jetzt alles im Kopf gemacht und nichts selbst ausprobiert.
Sag mir mal bitte, was für eine Fehlermeldung erscheint.


----------



## SasserVirus (26. Juli 2007)

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /web/service/admin/admins.php on line 42


----------



## Comenius (26. Juli 2007)

Versuch mal folgendes:


```
echo "<option value=\"$data[0]\">$data[0]</option>";}
```


----------



## SasserVirus (26. Juli 2007)

Fehler sind nun alle behoben, hab noch ne Klammer ganz unten setzten müssen...

Sieht nun so aus:


```
<?php
session_start();
?>

<?
if (!session_is_registered('user'))
{
die ("<center><font color='FF0000'><b>ZUGRIFF VERWEIGERT!<br><br>Dieser Dienst steht nur authorisierten Administratoren zur verfügung!<br><br>Bitte loggen Sie sich ein!</b></font><br><br><img src='images/zugriff.ico' border='0'></img></center>");
}
?>


<html>
<head>
<title>
</title>
<link rel="stylesheet" href="format.css" type="text/css">
</head>
<body bgcolor="#E6E6FA"><center>
<font size="+1"><b>Administratoren</b></font><br>
<?php 
include("config.php");
// Hier musst du noch eine Verbindung zur Datenbank herstellen
 $loeschen = "DELETE FROM `admin` WHERE `user` = '$userzumloeschen'";
 $loesch = mysql_query($loeschen);


  if(isset($_POST['ueberpruefung']))  
  {  
$userzumloeschen = $_POST['admin']; 
   } 
    else 
  { 
  ?> 

<form name="delete_admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<select name="admins" size="10" style="width:350px">
<?php
include("config.php");
$SQL_statement="SELECT `user` FROM `admin` ORDER BY `id`";
$resultset=mysql_query($SQL_statement);
while($data=mysql_fetch_array($resultset)){
echo "<option value=\"$data[0]\">$data[0]</option>";} 
mysql_close();
?>
</select>
<input type="hidden" name="ueberpruefung">
<input type="submit" name="loeschen" value="loeschen">
</form>

</body>
</html>
<?php
}
?>
```

Wähle ich nun einen aus und klicke auf Löschen, werde ich auf eine leere Seite geleitet und das wars! Es wird nichts gelöscht! Mann ... :suspekt:


----------



## Comenius (26. Juli 2007)

Logisch, denn zwischen "{" und "}" wurde ja nur eine Variable erstellt, ansonsten nichts.
Der Befehl zum Löschen stand noch über der If-Anweisung.


```
<?php 
session_start(); 
?> 
 
<? 
if (!session_is_registered('user')) 
{ 
die ("<center><font color='FF0000'><b>ZUGRIFF VERWEIGERT!<br><br>Dieser Dienst steht nur authorisierten Administratoren zur verfügung!<br><br>Bitte loggen Sie sich ein!</b></font><br><br><img src='images/zugriff.ico' border='0'></img></center>"); 
} 
?> 
 

<html> 
<head> 
<title> 
</title> 
<link rel="stylesheet" href="format.css" type="text/css"> 
</head> 
<body bgcolor="#E6E6FA"><center> 
<font size="+1"><b>Administratoren</b></font><br> 
<?php  
   if(isset($_POST['ueberpruefung']))   
  {   
$userzumloeschen = $_POST['admin'];
include("config.php"); 
 $loeschen = "DELETE FROM `admin` WHERE `user` = '$userzumloeschen'"; 
 $loesch = mysql_query($loeschen);

echo "$userzumloeschen erfolgreich aus der Datenbank entfernt.";
echo "<br>";
echo "<a href=\"link_zurueck\">Text</a>";
   }  
    else  
  {  
  ?>  

<form name="delete_admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> 
<select name="admins" size="10" style="width:350px"> 
<?php 
include("config.php"); 
$SQL_statement="SELECT `user` FROM `admin` ORDER BY `id`"; 
$resultset=mysql_query($SQL_statement); 
while($data=mysql_fetch_array($resultset)){ 
echo "<option value=\"$data[0]\">$data[0]</option>";}  
mysql_close(); 
?> 
</select> 
<input type="hidden" name="ueberpruefung"> 
<input type="submit" name="loeschen" value="loeschen"> 
</form> 

</body> 
</html> 
<?php 
} 
?>
```


----------



## SasserVirus (26. Juli 2007)

Er löscht immer noch nicht!

Es kommt nur;  erfolgreich aus der Datenbank entfernt.

Fehlt da nicht noch der Name der entfernt wurde? Also fehlt noch irgendwas oder


----------



## Comenius (26. Juli 2007)

Schau dir mal diese 2 Zeilen an:


```
$userzumloeschen = $_POST['admin'];
```


```
<select name="admins" size="10" style="width:350px">
```


----------



## SasserVirus (26. Juli 2007)

Hey daaaaaaaanke! Vielen vielen Dank! Deswegen ging es die ganze Zeit nich! 



Noch ein Anliegen; Kann man da noch etwas einbauen, dass man nach dem Klick auf den Button gefragt wird; Wirklich diese Benutzer löschen; Benutzer1 - Benutzer2 usw.?

Also nur dass man nicht ausversehen die falschen löscht!? Wäre dir sehr dankbar, dürfte ja net viel mehr sein oder?


----------



## Comenius (26. Juli 2007)

Einfach noch einmal IF mit einbauen.
Wie immer ungetestet und ohne Gewähr 


```
<?php 
session_start(); 
?> 
 
<? 
if (!session_is_registered('user')) 
{ 
die ("<center><font color='FF0000'><b>ZUGRIFF VERWEIGERT!<br><br>Dieser Dienst steht nur authorisierten Administratoren zur verfügung!<br><br>Bitte loggen Sie sich ein!</b></font><br><br><img src='images/zugriff.ico' border='0'></img></center>"); 
} 
?> 
 

<html> 
<head> 
<title> 
</title> 
<link rel="stylesheet" href="format.css" type="text/css"> 
</head> 
<body bgcolor="#E6E6FA"><center> 
<font size="+1"><b>Administratoren</b></font><br> 
<?php  
if(isset($_POST['ueberpruefungb'])){   

$userzumloeschen = $_POST['admins'];
include("config.php"); 
 $loeschen = "DELETE FROM `admin` WHERE `user` = '$userzumloeschen'"; 
 $loesch = mysql_query($loeschen);

echo "$userzumloeschen erfolgreich aus der Datenbank entfernt.";
echo "<br>";
echo "<a href=\"link_zurueck\">Text</a>";

} else {  
if(isset($_POST['ueberpruefunga'])){   

echo "<form name=\"ueberpruefen\" method=\"post\" action=\"$_SERVER['PHP_SELF']\">";
$userzumloeschen = $_POST['admins'];
echo "$userzumloeschen wirklich loeschen?";
echo "<input type=\"hidden\" name=\"ueberpruefungb\">";
echo "<input type=\"submit\" value=\"jetzt loeschen\">";
echo "</form>";

} else {

  ?>  

<form name="delete_admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> 
<select name="admins" size="10" style="width:350px"> 
<?php 
include("config.php"); 
$SQL_statement="SELECT `user` FROM `admin` ORDER BY `id`"; 
$resultset=mysql_query($SQL_statement); 
while($data=mysql_fetch_array($resultset)){ 
echo "<option value=\"$data[0]\">$data[0]</option>";}  
mysql_close(); 
?> 
</select> 
<input type="hidden" name="ueberpruefunga"> 
<input type="submit" name="loeschen" value="loeschen"> 
</form> 

</body> 
</html> 
<?php 
} 
}
?>
```

Edit:



> [...]Wirklich *diese* Benutzer löschen; Benutzer1 - Benutzer2 usw.?



Du kannst mit deinem jetzigen Formular immer nur einen auf einmal löschen...
Wenn du mehrere gleichzeitig aus der Datenbank hauen möchtest, musst du dein Formular ändern. 

Nur so nebenbei


----------



## SasserVirus (26. Juli 2007)

Mann, der meckert mal wieder den  hier an;

```
echo "<form name=\"ueberpruefen\" method=\"post\" action=\"$_SERVER['PHP_SELF']\">";
```


----------



## Comenius (26. Juli 2007)

tststs... Knapp 48 Stunden wach und alles ausm Kopp... 
Versuchs mal ganz primitiv. Ich hab kein Geist mehr alles durchzugehen. 


```
<?php  
session_start();  
?>  
  
<?  
if (!session_is_registered('user'))  
{  
die ("<center><font color='FF0000'><b>ZUGRIFF VERWEIGERT!<br><br>Dieser Dienst steht nur authorisierten Administratoren zur verfügung!<br><br>Bitte loggen Sie sich ein!</b></font><br><br><img src='images/zugriff.ico' border='0'></img></center>");  
}  
?>  
  

<html>  
<head>  
<title>  
</title>  
<link rel="stylesheet" href="format.css" type="text/css">  
</head>  
<body bgcolor="#E6E6FA"><center>  
<font size="+1"><b>Administratoren</b></font><br>  
<?php   
if(isset($_POST['ueberpruefungb'])){    

$userzumloeschen = $_POST['admins']; 
include("config.php");  
 $loeschen = "DELETE FROM `admin` WHERE `user` = '$userzumloeschen'";  
 $loesch = mysql_query($loeschen); 

echo "$userzumloeschen erfolgreich aus der Datenbank entfernt."; 
echo "<br>"; 
echo "<a href=\"link_zurueck\">Text</a>"; 

} else {   
if(isset($_POST['ueberpruefunga'])){    
?>

<form name="ueberpruefen" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<?php $userzumloeschen = $_POST['admins']; ?>
<?php echo "$userzumloeschen"; ?> wirklich loeschen? <br> 
<input type="hidden" name="ueberpruefungb"> 
<input type="submit" value="jetzt loeschen"> 
</form> 

<?php
} else { 

  ?>   

<form name="delete_admin" method="post" action="<?php echo $_SERVER['PHP_SELF']?>">  
<select name="admins" size="10" style="width:350px">  
<?php  
include("config.php");  
$SQL_statement="SELECT `user` FROM `admin` ORDER BY `id`";  
$resultset=mysql_query($SQL_statement);  
while($data=mysql_fetch_array($resultset)){  
echo "<option value=\"$data[0]\">$data[0]</option>";}   
mysql_close();  
?>  
</select>  
<input type="hidden" name="ueberpruefunga">  
<input type="submit" name="loeschen" value="loeschen">  
</form>  

</body>  
</html>  
<?php  
}  
} 
?>
```


----------



## SasserVirus (26. Juli 2007)

Jetzt löscht er wieder nix mehr, hast du vielleicht den alten Code wieder genommen?


----------



## Comenius (26. Juli 2007)

Deine Variable $admins kann nur einmal weitergegeben werden.
Du hast aber jetzt 2 Formulare.
Pack die mal mit in die session() und rufe sie darüber auf.


----------



## SasserVirus (27. Juli 2007)

Sag mal würde das nicht einfacher mit Javascript sein, dass man beim klick auf den button einfach ein fenster aufmacht und fragt. Und je nachdem wie man antwortet wird weitergemacht oder abgebrochen..!!


----------



## Comenius (27. Juli 2007)

Sicher, dann hast du nur einen Einzeiler. 
Aber nicht jeder hat Javascript aktiviert.

Such einfach mal danach: javascript + formular + alert

Gruss
Commi

PS: läufts jetzt eigentlich?


----------



## SasserVirus (27. Juli 2007)

Ja ich hab aber nun die Variante von vorhin ohne Nachfrage genommen, da das mit Nachfrage nicht t!

Sag mal weißt du, ob man Listenfelder und Textfelder formatieren kann, z.B. font-weight="bold" oder so?


----------



## Comenius (27. Juli 2007)

Sowas?


```
<input type="text" name="test" value="" style="border: 2px solid black; border-bottom: 0px; color: red; font-family: Arial;">
```

Wegen der zweiten Abfrage in deinem Script... Dass funktioniert eigentlich schon, es wird halt nur irgendwo noch ein Fehler sein.

Außerdem darf man das so, wie es jetzt ist, sowieso niemandem zeigen ^^
Das kann man noch viel schöner schreiben und einiges bestimmt verbessern.

Gruss
Commi


----------



## SasserVirus (27. Juli 2007)

Ich hab den Code doch noch nen bissel geändert! Also verschönert!

Ja das meine ich, aber wie mache ich die Schrift größer? Geht das auch beim Listenfeld?


----------



## Comenius (27. Juli 2007)

Die Schriftgröße änderst du mit font-size.
Da dein eigentliches Problem jetzt gelöst ist, könntest du ja auf den "Erledigt" Button drücken 

Gruss
Commi


----------

