alle Checkboxen markieren und beim nächsten Schritt löschen funktioniert nicht

halloICKEbins2

Grünschnabel
Mahlzeit,

habe die nachfolgenden Codeschnippsel aber leider funktioniert es nicht... es sollen mit dem einen Button alle Checkboxen markiert werden und mit dem nächsten Button gelöscht werden...Problem ist, dass keine Werte beim Löschen übergeben werden, wenn ich sie alle markiere per Button ... bei "händischer" Auswahl klappt es!

PHP:
if (isset($_POST['delete_entrys']))
{
    if (isset($_POST['selection_entrys']))
    {
        foreach ($_POST['selection_entrys'] as $value)
        {
            print ($value);
            $sql = "DELETE FROM table WHERE id='".$value."'";
            $result = $mysqli->query($sql);
        }
    }
}

if (isset($_POST['select_all_entrys']))     {    $select_all_entrys = " checked='checked'";        }
else                                          {    $select_all_entrys = "";                        }


PHP:
echo "<table>";

while ($row=mysqli_fetch_array($result_finished))
{
    echo "<tr>";
        echo "<td ".$css_td.">".$row[0]."</td><td ".$css_td."><input type='checkbox' name='selection_entrys[]' value='".$row[0]."'".$select_all_entrys."></td>";
    echo "</tr>";
}

echo "</table>";

echo "<input type='submit' name='delete_entrys' value='loeschen'>&nbsp;<input type='submit' name='select_all_entrys' value='alle markieren'>";
 
Zunächst ist dein $value im SQL-Query nicht abgesichert vor SQL-Injections!
Benutze hier immer real-escape-string() oder prepared statements

PHP:
$sql = "DELETE FROM table WHERE id='".$mysqli->real_escape_string($value)."'";

So markierst du alle Buttons:
Html-Formular:
HTML:
<form action="#">
<input type="checkbox" name="selection_entrys[]"> box 1<br>
<input type="checkbox" name="selection_entrys[]"> box 2<br>
<input type="checkbox" name="selection_entrys[]"> box 3<br>
<input type="checkbox" name="selection_entrys[]"> box 4<br>
<input type="checkbox" name="selection_entrys[]"> box 5<br>
<input onclick="check_all('selection_entrys[]', this)" type="checkbox"> Alle
<input type="submit" name="delete_entrys" value="loeschen">
</form>
Javascript:
Javascript:
<script type="text/javascript">
function check_all(name, el){
     if(!el || !el.form) return alert('falscher Parameter');
     var box = el.form.elements[name];
     if(!box.length) box.checked = el.checked; else
     for(var i = 0; i < box.length; i++)  box[i].checked = el.checked;
}
</script>
 
ja, mit einem CSS-Trick.
Sollte man dann aber besser ins CSS-Forum verschieben...
Hier ein Beispiel:

HTML:
<form action="#">

<label for="alle">Alle</label>
<input id="alle" type="checkbox" name="alle" />
<div class="checked-block">
<label class="delete checked"><input type="checkbox" name="delete[]" value="lösche 1" checked="checked" />Lösche 1</label>
<label class="delete checked"><input type="checkbox" name="delete[]" value="lösche 2" checked="checked" />Lösche 2</label>
<label class="delete checked"><input type="checkbox" name="delete[]" value="lösche 3" checked="checked" />Lösche 3</label>
</div>

<div class="notchecked-block">
<label class="delete notchecked"><input type="checkbox" name="delete[]" value="lösche 1" />Lösche 1</label>
<label class="delete notchecked"><input type="checkbox" name="delete[]" value="lösche 2" />Lösche 2</label>
<label class="delete notchecked"><input type="checkbox" name="delete[]" value="lösche 3" />Lösche 3</label>
</div>
</form>

CSS:
.checked-block {
    display:none;
}
.notchecked-block {
    display:block;
}
input[name="alle"] {
    display:none;
}

input[name="alle"]:checked ~ .checked-block {
    display:block;
}
input[name="alle"]:checked ~ .notchecked-block {
    display:none;
}
label {
    display:block;
    cursor:pointer;
}
 
Danke schon mal dafür ... aber warum klappt es mit meiner Version nicht?

Er wählt keine Box(en) aus!

HTML:
<HTML>
        <style>
            .checked-block {
                display:none;
            }
            .notchecked-block {
                display:block;
            }
            input[name="alle"] {
                display:none;
            }

            input[name="alle"]:checked ~ .checked-block {
                display:block;
            }
            input[name="alle"]:checked ~ .notchecked-block {
                display:none;
            }
            label {
                display:block;
                cursor:pointer;
            }
        </style>

<BODY>

<label for='alle'>Alle</label><input id='alle' type='checkbox' name='alle'>

<table>
<tr>
<td>text1</td>

<td>
    <div class='checked-block'>
        <label class='delete checked'>
            <input type='checkbox' name='del[]' value='1' checked='checked'>
        </label>
    </div>
    <div class='notchecked-block'>
        <label class='delete notchecked'>
            <input type='checkbox' name='del[]' value='1'>
        </label>
    </div>
</td>

</tr>
</table>

</body>
</html>
 
Das liegt daran, dass die Inputs bei dir in einer Tabelle liegen, so dass die Adressierung im CSS nicht mehr funktioniert: input[name="alle"]:checked ~ .checked-block setzt voraus, dass das Element, das angesprochen werden soll, auf der selben Stufe im Baum liegt bzw. ein nachfolgendes Geschwister ist.
Dieses funktioniert:
Code:
                input[name="alle"]:checked ~ table .checked-block {
                    display:block;
                }
                input[name="alle"]:checked ~ table .notchecked-block {
                    display:none;
                }
 
Wozu brauchst du denn die Tabelle?

Bitte schau dir auch noch Mal im HTML-Wiki das Thema zum Grundgerüst an. Bei deinem HTML-Code fehlt der komplette HEAD...
 
Die Tabelle werden genutzt um die anderen Imformationen darzustellen ...siehe erster Tweet.

Mit der letzten Variante funktioniert jetzt auch das Markieren...allerdings übermittelt er keine Werte.

PHP:
        <style>
            .checked-block {
                display:none;
            }
            .notchecked-block {
                display:block;
            }
            input[name="alle"] {
                display:none;
            }

            input[name="alle"]:checked ~ table .checked-block {
                display:block;
            }
            input[name="alle"]:checked ~ table .notchecked-block {
                display:none;
            }
            label {
                display:block;
                cursor:pointer;
            }
        </style>


Code:
if (isset($_POST['delete']))   // wenn Formular per POST übersendet wurde dann
{
    if (isset($_POST['selection_del']))   // wenn Checkboxen ausgewählt wurden dann
    {
        foreach ($_POST['selection_del'] as $value)   // für jede Checkbox die ausgewählt wurde, tue
        {
            print ($value);
        }
    }
}


Code:
<table>

<label for='alle'>alle markieren</label>
<input id='alle' type='checkbox' name='alle'>

while ($row=mysqli_fetch_array($result_finished))
{
    <tr>

        <td>".$row[0]."</td>
            <div class='checked-block'>
                <label class='delete checked'>
                    <input type='checkbox' name='selection_del[]' value='".$row[0]."' checked='checked'>
                </label>
            </div>";
                                
            <div class='notchecked-block'>
                <label class='delete notchecked'>
                    <input type='checkbox' name='selection_del[]' value='".$row[0]."'>
                </label>
            </div>
        </td>

    </tr>
}

</table>

<br><input type='submit' name='delete' value='loeschen'>



Die Quellcodes habe ich übersichtlichkeitshalber aufs Nötigsten gekürzt
 
Lass dir doch mal per
PHP:
printf('<pre>%s</pre>', print_r($_POST, true));
Alle Inhalte von POST ausgeben. :)

Damit arbeite Ich viel ^^
 
Zurück