[php] foreach
Ik ben op dit moment bezig met een vriendensysteem.
Stel je zou een x aantal vrienden wilt verwijderen wil ik dat doen door middel van checkboxen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<script type="text/javascript" language="javascript">
function check_all(iam)
{
var node_list = document.getElementsByTagName('input');
for (var i = 0; i < node_list.length; i++)
{
var node = node_list[i];
if (node.getAttribute('type') == 'checkbox')
{
if (iam.checked == 1)
{
node.checked = 1;
}
else
{
node.checked = 0;
}
}
}
}
</script>
<form method="post" action = "index.php?p=friends">
<table width = "100%">
<tr>
<td height="10" width = "50%"><input type='checkbox' name='checkall' onclick='check_all(this)'><strong>Alle</strong></td>
<td height="10" width = "50%"><strong>Gebruikersnaam</strong></td>
</tr>
<?php
$i = 0;
for($i = 0; $i < mysql_num_rows($sql); $i++) {
$row = mysql_fetch_object($sql);
$i ++;
?>
<tr>
<td height="10" width = "50%"><input type="checkbox" name="friend[]" value="<?php echo $row->id; ?>" id="friend_<?php echo $i; ?>"/></td>
<?php
$sql_leden = MySQL::Query("SELECT * FROM users WHERE id = '".Environment::Filter($row->id)."' ORDER BY id DESC LIMIT 1");
$row_leden = mysql_fetch_object($sql_leden);
?>
<td height="10" width = "50%">
<a href = "index.php?p=profile&id=<?php echo $row_leden->id; ?>">
<?php echo Environment::Filter($row_leden->username); ?>
</a>
</td>
</tr>
<?php
}
?>
<tr>
<td height="10" width = "50%">Actie</td>
<td height="10" width = "50%"><input type="submit" name="friends" value="Verwijder"></td>
</tr>
</table>
function check_all(iam)
{
var node_list = document.getElementsByTagName('input');
for (var i = 0; i < node_list.length; i++)
{
var node = node_list[i];
if (node.getAttribute('type') == 'checkbox')
{
if (iam.checked == 1)
{
node.checked = 1;
}
else
{
node.checked = 0;
}
}
}
}
</script>
<form method="post" action = "index.php?p=friends">
<table width = "100%">
<tr>
<td height="10" width = "50%"><input type='checkbox' name='checkall' onclick='check_all(this)'><strong>Alle</strong></td>
<td height="10" width = "50%"><strong>Gebruikersnaam</strong></td>
</tr>
<?php
$i = 0;
for($i = 0; $i < mysql_num_rows($sql); $i++) {
$row = mysql_fetch_object($sql);
$i ++;
?>
<tr>
<td height="10" width = "50%"><input type="checkbox" name="friend[]" value="<?php echo $row->id; ?>" id="friend_<?php echo $i; ?>"/></td>
<?php
$sql_leden = MySQL::Query("SELECT * FROM users WHERE id = '".Environment::Filter($row->id)."' ORDER BY id DESC LIMIT 1");
$row_leden = mysql_fetch_object($sql_leden);
?>
<td height="10" width = "50%">
<a href = "index.php?p=profile&id=<?php echo $row_leden->id; ?>">
<?php echo Environment::Filter($row_leden->username); ?>
</a>
</td>
</tr>
<?php
}
?>
<tr>
<td height="10" width = "50%">Actie</td>
<td height="10" width = "50%"><input type="submit" name="friends" value="Verwijder"></td>
</tr>
</table>
Hoe moet ik dit nu gaan aanpakken?
Alle geselecteerde vrienden moeten verwijderd worden.
Alvast bedankt.
Met andere woorden: probeer een wat specifiekere vraag te stellen
groeten Frank
Nadat je het formulier gesubmit hebt check je doormiddel van een for loop of je checkbox wel of niet gecheckt is. Zo ja delete.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<input type="checkbox" name="checkbox_1" value="Jan">
<input type="checkbox" name="checkbox_2" value="Karel">
<input type="checkbox" name="checkbox_3" value="Kees">
<input type="checkbox" name="checkbox_4" value="Joost">
<input type="checkbox" name="checkbox_5" value="Gert">
if(isset($_POST['submit'])) {
$friends = 5;
for($i=1; $i<=5; $i++) {
if(isset($_POST['checkbox_'.$i])) {
//Delete friend
}
}
}
<input type="checkbox" name="checkbox_2" value="Karel">
<input type="checkbox" name="checkbox_3" value="Kees">
<input type="checkbox" name="checkbox_4" value="Joost">
<input type="checkbox" name="checkbox_5" value="Gert">
if(isset($_POST['submit'])) {
$friends = 5;
for($i=1; $i<=5; $i++) {
if(isset($_POST['checkbox_'.$i])) {
//Delete friend
}
}
}
Ongeveer op deze manier.. Kunnen fouten inzitten, heb 't snel getypt.
groetjes,
Mik
Gewijzigd op 04/10/2012 15:29:48 door Mik PHP
Hoe je het nu doet moet je statische informatie opgeven aan je checkboxes. Dit zal moeilijk worden aangezien niet iedereen de zelfde vrienden zal hebben.
Ik raad je aan om voor de name="" het unieke id te gebruiken van die vrienden. Dan wordt het al stukken makkelijker, hoe ga je anders weer vertalen dat checkbox_2 Karel is en checkbox_5 Gert is voor je query?
Als je gewoon een query draaid van alle vrienden in de lijst, dan geef je de name="" gewoon het unieke id, dan is het velen malen makkelijker om een delete query te maken.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$i = 0;
while($row = mysql_fetch_object($sql)){
$i ++;
?>
<td height="10" width = "50%"><input type="checkbox" name="friend_<?php echo $i; ?>" value="<?php echo $row->id; ?>"/></td>
<?php
}
?>
$i = 0;
while($row = mysql_fetch_object($sql)){
$i ++;
?>
<td height="10" width = "50%"><input type="checkbox" name="friend_<?php echo $i; ?>" value="<?php echo $row->id; ?>"/></td>
<?php
}
?>
En zodra er op de submit button gedrukt is:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
if(isset($_POST['friends'])){
for($i = 0; $i < mysql_num_rows($sql); $i++) {
if(isset($_POST['friend_'.$i])) {
echo'yeah';
}else{
echo'no';
}
}
echo'<div class="agree">De geselecteerde vrienden zijn verwijderd.</div>';
}else{
for($i = 0; $i < mysql_num_rows($sql); $i++) {
if(isset($_POST['friend_'.$i])) {
echo'yeah';
}else{
echo'no';
}
}
echo'<div class="agree">De geselecteerde vrienden zijn verwijderd.</div>';
}else{
Echter werkt die nog niet.
Gewijzigd op 04/10/2012 15:39:44 door rick kem
Het was een snel voorbeeld waar ik zelf alles snel even had ingevuld. Maar het moest een goed beeld geven van wat je de code moet laten doen.
Rick kem op 04/10/2012 15:39:17:
@ chris dat heb ik nu.
En zodra er op de submit button gedrukt is:
Echter werkt die nog niet.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$i = 0;
while($row = mysql_fetch_object($sql)){
$i ++;
?>
<td height="10" width = "50%"><input type="checkbox" name="friend_<?php echo $i; ?>" value="<?php echo $row->id; ?>"/></td>
<?php
}
?>
$i = 0;
while($row = mysql_fetch_object($sql)){
$i ++;
?>
<td height="10" width = "50%"><input type="checkbox" name="friend_<?php echo $i; ?>" value="<?php echo $row->id; ?>"/></td>
<?php
}
?>
En zodra er op de submit button gedrukt is:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
if(isset($_POST['friends'])){
for($i = 0; $i < mysql_num_rows($sql); $i++) {
if(isset($_POST['friend_'.$i])) {
echo'yeah';
}else{
echo'no';
}
}
echo'<div class="agree">De geselecteerde vrienden zijn verwijderd.</div>';
}else{
for($i = 0; $i < mysql_num_rows($sql); $i++) {
if(isset($_POST['friend_'.$i])) {
echo'yeah';
}else{
echo'no';
}
}
echo'<div class="agree">De geselecteerde vrienden zijn verwijderd.</div>';
}else{
Echter werkt die nog niet.
En waar wordt je DELETE query gedraaid? Nu select je ze alleen en gebruik een i++ in je while loop die niet nodig is lijkt me.
Toevoeging op 04/10/2012 15:48:58:
Mik tH op 04/10/2012 15:42:45:
@chris:
Het was een snel voorbeeld waar ik zelf alles snel even had ingevuld. Maar het moest een goed beeld geven van wat je de code moet laten doen.
Het was een snel voorbeeld waar ik zelf alles snel even had ingevuld. Maar het moest een goed beeld geven van wat je de code moet laten doen.
Ok, maar waarom dan niet gelijk een goed voorbeeld door het unieke vriend id te gebruiken? Dat is toch ook gelijk voor de TS stukken duidelijker dan?
dus krijgen we het volgende:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
if(isset($_POST['friends'])){
for($i = 0; $i < mysql_num_rows($sql); $i++) {
if(isset($_POST['friend_'.$i])) {
$row = mysql_fetch_object($sql);
MySQL::Query("DELETE FROM friends WHERE user_id = '".Environment::Filter($get_userdata->id)."' AND friend_id = '".Environment::Filter($row->friend_id)."'");
}
}
echo'<div class="agree">De geselecteerde vrienden zijn verwijderd.</div>';
}else{
for($i = 0; $i < mysql_num_rows($sql); $i++) {
if(isset($_POST['friend_'.$i])) {
$row = mysql_fetch_object($sql);
MySQL::Query("DELETE FROM friends WHERE user_id = '".Environment::Filter($get_userdata->id)."' AND friend_id = '".Environment::Filter($row->friend_id)."'");
}
}
echo'<div class="agree">De geselecteerde vrienden zijn verwijderd.</div>';
}else{