dedlfix: löschen von Datensätzen mittels Checkboxen

Beitrag lesen

echo $begrüßung;

function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")

Die Idee hinter dieser Funktion ist richtig, die Ausführung jedoch mangelhaft.

$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

Der Magic-Quotes-Mechanismus soll vor ungewollten Manipulationen von Datenbankinhalten durch SQL-Injection schützen, dabei macht er aber meist mehr Ärger an anderen Stellen als er Nutzen bringt. Wenn sich die Magic-Quotes nicht in der Konfiguration ausschalten lassen, ist es empfehlenswert sie am Scriptanfang einmalig mit stripslashes_deep() (siehe Example 2 auf dieser Handbuchseite zu entfernen

if (get_magic_quotes_gpc())
    $_POST = stripslashes_deep($_POST);

und an den erforderlichen Stellen mit geeigneteren Funktionen als addslashes() die notwendige Maskierung von Sonderzeichen vorzunehmen. Für String-Werte in MySQL-Befehlen ist das mysql_real_escape_string().

Falls dieser Code für die Foreach-Schleife stimmt, wo muss ich diesen dann platzieren/erstezen?

foreach($_POST['ausgewaehlte'] as $ausgewaehlte) {
$sql=mysql_query("delete from tbl_links where id = $ausgewaelte");
}

Ich weiß, dass es irgendwo hier herein gehört:

Da hst du schon mal die richtige Stelle gefunden. Diese Lösung ist im Prinzip auch die gleiche wie die von der-doktor vorgeschlagene.

if ((isset($_POST['ausgewaehlte'])) && ($_POST['ausgewaehlte'] != "")) {

Der zweite Teil dieser Prüfung wird wie folgt ausgetauscht:

if (isset($_POST['ausgewaehlte']) and is_array($_POST['ausgewaehlte'])) {
    foreach($_POST['ausgewaehlte'] as $ausgewaehlte) {
      if (is_numeric($_POST['ausgewaehlte'])) {

$deleteSQL = sprintf("DELETE FROM tbl_links WHERE ID=%s",
                       GetSQLValueString($_POST['ausgewaehlte'], "int"));

Diese beiden obigen Zeilen ersetze ich durch diese:

$deleteSQL = 'DELETE FROM tbl_links WHERE ID=' . $_POST['ausgewaehlte'];

mysql_select_db($database_conn_obertilliach, $conn_obertilliach);
      $Result1 = mysql_query($deleteSQL, $conn_obertilliach) or die(mysql_error());

} //if is_numeric...
    } //foreach...

} //if isset...

Zu beachten ist, dass, wie von der-doktor erwähnt, das name-Attribut der Checkbox-Input-Elemente ein [] hintendran benötigt: <input type="checkbox" name="ausgewaehlte[]" ...

echo "$verabschiedung $name";