Chexboxen

  • Themenstarter Themenstarter Idefix007
  • Beginndatum Beginndatum
I

Idefix007

Ich hab ein php skript was datensätze aus einer mysql Tabelle ausliest, und dies dann in eine dynamische html tabelle überträgt. Vor jede Zeile habe ich schon eine chexbox gebastelt

print ("<div align=\"center\">\n");
print ("<table border=\"0\">\n");


print ("<tr>\n"); print ("<td bgcolor=\"#CCCCCC\"><b>Auswahl</b></td>\n");
print ("<td bgcolor=\"#CCCCCC\"><b>Dateiname</b></td>\n");
print ("<td bgcolor=\"#CCCCCC\"><b>Mensch</b></td>\n");
print ("</tr>\n");


while($dbRow = mysql_fetch_object ($query)) {
print ("<tr>\n");
print ("<td><input name=\"auswahl\" type=\"checkbox\" value=\"auswahl\"></td>\n");
print ("<td>$dbRow->dateiname</td>\n");
print ("<td>$dbRow->mensch</td>\n");
print ("</tr>\n");
}


print ("</table>\n");
print ("</div>\n");
print ("<br><br>");

$dateiname=''; Hier ist mein Problem, ich hab ein der html Tabelle alle dateinamen eines bestimmten users, und ich hätte gerne das wenn ein user z.b 2 chexboxen auswählt das die dateien die in der jeweiligen Zeile stehen geunliked werden. Genau genommen ist das Problem wie ich den dateinamen aus der html tabelle in den array $dateiname schreiben kann...
$sent = $_GET['sent'];
$auto = $_GET['auto'];
$abc= $_GET['\"auswahl\"'];

if ($sent == 'yes') {
unlink($dateiname);

Ich hoffe ihr könnt mir helfen, bin echt am verzeifeln nach 3 stunden googlen :(
 
Hallo Idefix,

der Name deiner Checkbox muss als "Array" definiert sein und als "value" sollte der Dateiname in der Checkbox stehen. Einfach zwei eckige Klammern an den Namen anhängen.

PHP:
<?php
// Deine Tabelle.
while ($dbRow = mysql_fetch_object ($query))
{
  print ("<tr>\n");
  print ("<td><input name=\"auswahl[]\" type=\"checkbox\" value=\"".$dbRow->dateiname."\"></td>\n");
  print ("<td>$dbRow->dateiname</td>\n");
  print ("<td>$dbRow->mensch</td>\n");
  print ("</tr>\n"); 
}
?>
Die Abfrage des Parameters könnte dann in ungefähr so aussehen:

PHP:
<?php
if (isset($_GET["auswahl"]) && !empty($_GET["auswahl"]))
{
  // $auswahl enthält nun eine Liste (array) mit den ausgewählten Dateinamen.
  $files = $_GET["auswahl"];
  
  // Iterieren der ausgewählten Dateinamen.
  $filesCount = count($files);
  for ($i=0; $i<$filesCount; $i++)
  {
    unlink($files[$i]);
  }
}
?>
Grüße
Manuel Freiholz
 
Vielen Dank, für deine Antwort! Es hat perfekt funktioniert...

Ich habe gerade noch eine Funktion geschrieben die auch den Eintrag aus der Datenbank löscht, die funktioniert auch prima, aber die änderungen werden erst nach einem manuellen Aufruf von index.php aktualisiert dargestellt, gibt es da eine möglichkeit die Seite automatisch nach absenden des formulares zu aktualisieren?

Nach dem ich auf den Button gedrück habe steht oben ja immer http://xxx.de/index.php?auswahl..............
 
Hi,

wenn du die Kontrollstruktur, welche die Löschung durchführt vor die Ausgabe bzw. Abfrage stellst, dann werden auch direkt die neuen Daten angezeigt :)

Grüße
Manuel
 
Das Problem dabei ist aber das ich ja die tabelle erst durch eine Abfrage bekomme und ich kann ja nicht die löschung vor die Abfrage stellen...

Zur Zeit sieht es so aus:

$abfrage = "SELECT dateiname, mensch FROM abc WHERE mensch = '$_SESSION[xy]'";
$query = @mysql_query($abfrage);
$result = @mysql_fetch_array($query);

print ("<div align=\"center\">\n");
print ("<table border=\"0\">\n");


print ("<tr>\n"); print ("<td bgcolor=\"#CCCCCC\"><b>Auswahl</b></td>\n");
print ("<td bgcolor=\"#CCCCCC\"><b>Dateiname</b></td>\n");
print ("<td bgcolor=\"#CCCCCC\"><b>Mensch</b></td>\n");
print ("</tr>\n");


while($dbRow = mysql_fetch_object ($query)) {
print ("<tr>\n");
print ("<td><input name=\"auswahl[]\" type=\"checkbox\" value=\"".$dbRow->dateiname."\"></td>\n");
print ("<td>$dbRow->dateiname</td>\n");
print ("<td>$dbRow->mensch</td>\n");
print ("</tr>\n");
}


print ("</table>\n");
print ("</div>\n");
print ("<br><br>");


if (isset($_GET["auswahl"]) && !empty($_GET["auswahl"]))
{
// $auswahl enthält nun eine Liste (array) mit den ausgewählten Dateinamen.
$files = $_GET["auswahl"];

// Iterieren der ausgewählten Dateinamen.
$filesCount = count($files);
for ($i=0; $i<$filesCount; $i++)
{
unlink($files[$i]);



$sq = "DELETE FROM abc WHERE dateiname ='$files[$i]'";
mysql_query ($sq);

}

}

?>
<input type="submit" value="abc">

Gibt es keinen anderen weg?


LG
 
Du musst es ja so sehen.
Sobald du auf Submit drückst, wird die Seite neugeladen - übergeben wird die Auswahl. Du kannst also beruhigt einfach das Löschen Statement nach oben schieben. Siehe hier:

PHP:
<?php
// Abfangen der Auswahl und löschen der Daten.
if (isset($_GET["auswahl"]) && !empty($_GET["auswahl"]))
{
  // $auswahl enthält nun eine Liste (array) mit den ausgewählten Dateinamen.
  $files = $_GET["auswahl"];

  // Iterieren der ausgewählten Dateinamen.
  $filesCount = count($files);
  for ($i=0; $i<$filesCount; $i++)
  {
    unlink($files[$i]);
    $sq = "DELETE FROM abc WHERE dateiname ='$files[$i]'";
    mysql_query ($sq);
  }
}

// Anzeige der Daten.
$abfrage = "SELECT dateiname, mensch FROM abc WHERE mensch = '$_SESSION[xy]'";
$query = @mysql_query($abfrage);
$result = @mysql_fetch_array($query);

print ("<div align=\"center\">\n");
print ("<table border=\"0\">\n");

print ("<tr>\n"); print ("<td bgcolor=\"#CCCCCC\"><b>Auswahl</b></td>\n");
print ("<td bgcolor=\"#CCCCCC\"><b>Dateiname</b></td>\n");
print ("<td bgcolor=\"#CCCCCC\"><b>Mensch</b></td>\n");
print ("</tr>\n");

while($dbRow = mysql_fetch_object ($query))
{
  print ("<tr>\n");
  print ("<td><input name=\"auswahl[]\" type=\"checkbox\" value=\"".$dbRow->dateiname."\"></td>\n");
  print ("<td>$dbRow->dateiname</td>\n");
  print ("<td>$dbRow->mensch</td>\n");
  print ("</tr>\n");
}

print ("</table>\n");
print ("</div>\n");
print ("<br><br>");
?>
<input type="submit" value="abc">

Desweiteren empfehle ich dir noch die Funktion "mysql_real_escape_string()" zu verwenden um deine SQL Anfragen sicherer zu machen.
Documentation: http://de.php.net/manual/en/function.mysql-real-escape-string.php

PHP:
$sq = "DELETE FROM abc WHERE dateiname =".mysql_real_escape_string($files[$i]);

Grüße
Manuel
 
Tausend Dank!! Jetzt geht alles so wie ich es mir vorgestellt habe.

Und das mit dem mysql_real_escape_string() werde ich auch gleich einbauen, ich wusste gar nicht was das ja eigentlich für eine Sicherheitslücke ist wenn man das nicht hat...
 
Zurück