Meerdere dingen tegelijk wegschrijven naar database
Ik heb (alweer) een vraagje. Ik heb een stukje script geschreven voor mijn loginscript waarbij de beheerders gebruikers kunnen accepter/weigeren en beheerders rechten geven.
Het hele script werkt behalve het wegschrijfen van de rang naar de database. Als ik 3 gebruikers in 1 x beheerders rechten geef schrijft hij het maar van 1 gebruiker weg.
Dit is het script voor het wegschijven
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
if( $_GET['beheer'] !='' ){
$sql = "UPDATE members SET rang = '10' WHERE username = '" . $_GET['beheer']. "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " . $_GET['beheer']. "<br />";
}
if( $_GET['hulpverlener'] !='' ){
$sql = "UPDATE members SET rang = '5' WHERE username = '" . $_GET['hulpverlener']. "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu htrpverlener: " . $_GET['hulpverlener']. "<br />";
}
if( $_GET['weiger'] !='' ){
$sql = "UPDATE members SET rang = '-5' WHERE username = '" . $_GET['weiger']. "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn geweigerd: " . $_GET['weiger']. "<br />";
}
?>
if( $_GET['beheer'] !='' ){
$sql = "UPDATE members SET rang = '10' WHERE username = '" . $_GET['beheer']. "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " . $_GET['beheer']. "<br />";
}
if( $_GET['hulpverlener'] !='' ){
$sql = "UPDATE members SET rang = '5' WHERE username = '" . $_GET['hulpverlener']. "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu htrpverlener: " . $_GET['hulpverlener']. "<br />";
}
if( $_GET['weiger'] !='' ){
$sql = "UPDATE members SET rang = '-5' WHERE username = '" . $_GET['weiger']. "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn geweigerd: " . $_GET['weiger']. "<br />";
}
?>
Het zal wel een klein dingetje zijn maar iemand enig idee??
Ik neem aan dat de usernames uniek zijn, dus dat wil zeggen dat als je in je SQL statement zegt "WHERE username = ..." dat er ook maar een gebruiker geupdate kan worden.
Niet handig.
Gebruik altijd even mysql_real_escape_string()
dus bijvoorbeeld regel 3 wordt nu:
Code (php)
1
$sql = "UPDATE members SET rang = '10' WHERE username = '".mysql_real_escape_string($_GET['beheer'])."'";
Dat is veel veiliger!
Edit
Ik heb even je stukje code overgenomen en veranderd, mischien werkt dit nu.
Het doet bij elke naam apart afhandelen. Dus niet de eerste naam aleen. Je probleem is dan opgelost. Anders kon je elke keer maar 1 naam tegelijk behandelen.
Hier is de code
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?
if( $_GET['beheer'] !='' ){
foreach($_GET['beheer'] as $beheer
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($beheer). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$beheer. "<br />";
}
if( $_GET['hulpverlener'] !='' ){
foreach($_GET['hulpverlener'] as $hulpverlener
$sql = "UPDATE members SET rang = '5' WHERE username = '" .mysql_real_escape_string($hulpverlener)."' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu htrpverlener: " . $hulpverlener. "<br />";
}
if( $_GET['weiger'] !='' ){
foreach($_GET['weiger'] as $weiger
$sql = "UPDATE members SET rang = '-5' WHERE username = '" .mysql_real_escape_string($weiger). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn geweigerd: " . $weiger. "<br />";
}
?>
if( $_GET['beheer'] !='' ){
foreach($_GET['beheer'] as $beheer
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($beheer). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$beheer. "<br />";
}
if( $_GET['hulpverlener'] !='' ){
foreach($_GET['hulpverlener'] as $hulpverlener
$sql = "UPDATE members SET rang = '5' WHERE username = '" .mysql_real_escape_string($hulpverlener)."' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu htrpverlener: " . $hulpverlener. "<br />";
}
if( $_GET['weiger'] !='' ){
foreach($_GET['weiger'] as $weiger
$sql = "UPDATE members SET rang = '-5' WHERE username = '" .mysql_real_escape_string($weiger). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn geweigerd: " . $weiger. "<br />";
}
?>
Ik heb het niet getest dus ik weet niet uit mijn hoofd of het werkt.
Gewijzigd op 01/03/2012 17:33:24 door jan terhuijzen
De $_GET heb ik er uitgehaald en vervangen voor POST.
De foreach werkt niet. ik krijg de volgende error:
Warning: Invalid argument supplied for foreach() in /home/ehbonopn/public_html/wp-content/themes/ehbonop/page-rechten-aanpassen.php on line 18
Ik weet alleen niet waarom het niet werkt. iemand wel?
Ja, omdat Jan Terhuijzen foreaches gaat gebruiken op een $_GET['string'] .. Haal die foreach elke keer weg, kijk of de $_GET variabelen bestaan met isset() en zorg voor foutafhandeling bij je query.
Als ik dt doe dan gaat hij steeds weer maar 1 afwerken.
Script:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?
if(isset($_POST['beheer'])){
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($_POST['beheer']). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$_POST['beheer']. "<br />";
}
?>
if(isset($_POST['beheer'])){
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($_POST['beheer']). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$_POST['beheer']. "<br />";
}
?>
en de foutafhandeling komt nog, wil eerst zorgen dat het werkt
Ja... waarschijnlijk omdat er ook maar een waarde in $_POST['beheer'] zit. Hoe ziet je HTML form eruit?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$resrang = mysql_query("SELECT username,mail,rang FROM members WHERE rang = '0'");
echo '<form method="POST"><table border="1">
<tr><td>Naam:</td><td>Mail:</td><td>Beheer:</td><td>Hulpverlener:</td><td>Weigeren:</td></tr>';
while ($show = mysql_fetch_array($resrang))
{
echo '
<tr><td width="120">'. $show['username'].'</td>
<td width="250"> '. $show['mail'].'</td>
<td width="50"> <input type="checkbox" name="beheer" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="hulpverlener" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="weiger" value="'.$show['username'].'" /> </td>';
}
echo '</tr></table> <br />';
echo '<input type="submit" name="formSubmit" value="Submit" /></form>';
?>
$resrang = mysql_query("SELECT username,mail,rang FROM members WHERE rang = '0'");
echo '<form method="POST"><table border="1">
<tr><td>Naam:</td><td>Mail:</td><td>Beheer:</td><td>Hulpverlener:</td><td>Weigeren:</td></tr>';
while ($show = mysql_fetch_array($resrang))
{
echo '
<tr><td width="120">'. $show['username'].'</td>
<td width="250"> '. $show['mail'].'</td>
<td width="50"> <input type="checkbox" name="beheer" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="hulpverlener" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="weiger" value="'.$show['username'].'" /> </td>';
}
echo '</tr></table> <br />';
echo '<input type="submit" name="formSubmit" value="Submit" /></form>';
?>
Hij haalt dus door de while meerdere waarde uit de database (overal waar rang = 0) en weergeeft die met 3 checkboxen er achter. De bedoeling is dus als checkbox beheer bij 3 accounts word geselecteerd, ook 3 accounts worden geupdate (en niet 1 zoals het nu is)
Gewijzigd op 02/03/2012 14:24:39 door Matthijs Vos
Gewijzigd op 02/03/2012 15:28:55 door Erwin H
Gewijzigd op 02/03/2012 15:27:41 door Jurgen B
Dus dan krijg je in het formulier:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$resrang = mysql_query("SELECT username,mail,rang FROM members WHERE rang = '0'");
echo '<form method="POST"><table border="1">
<tr><td>Naam:</td><td>Mail:</td><td>Beheer:</td><td>Hulpverlener:</td><td>Weigeren:</td></tr>';
while ($show = mysql_fetch_array($resrang))
{
echo '
<tr><td width="120">'. $show['username'].'</td>
<td width="250"> '. $show['mail'].'</td>
<td width="50"> <input type="checkbox" name="beheer[]" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="hulpverlener[]" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="weiger[]" value="'.$show['username'].'" /> </td>';
}
echo '</tr></table> <br />';
echo '<input type="submit" name="formSubmit" value="Submit" /></form>';
?>
$resrang = mysql_query("SELECT username,mail,rang FROM members WHERE rang = '0'");
echo '<form method="POST"><table border="1">
<tr><td>Naam:</td><td>Mail:</td><td>Beheer:</td><td>Hulpverlener:</td><td>Weigeren:</td></tr>';
while ($show = mysql_fetch_array($resrang))
{
echo '
<tr><td width="120">'. $show['username'].'</td>
<td width="250"> '. $show['mail'].'</td>
<td width="50"> <input type="checkbox" name="beheer[]" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="hulpverlener[]" value="'.$show['username'].'" /></td>
<td width="50"> <input type="checkbox" name="weiger[]" value="'.$show['username'].'" /> </td>';
}
echo '</tr></table> <br />';
echo '<input type="submit" name="formSubmit" value="Submit" /></form>';
?>
Maar hoe doe ik dat dan bij het wegschrijven?
oke, dus dan in het from krijg je:
<td width="50"> <input type="checkbox" name="'.$show['username'].'" value="beheer" /></td>
maar wat krijg je dan bij het wegschrijven??
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<input type="checkbox" name="type[]" value="beheer" />Beheer
<input type="checkbox" name="type[]" value="hulpverlener" />Hulpverlener
<input type="checkbox" name="type[]" value="weiger" />Weiger
<input type="hidden" value="'.$show['username'].'" name = "username"/>
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$aType = $_POST['type'];
if(empty($aType)){
echo("You didn't select any buildings.");
}
else{
foreach($aType as strType){
echo $strType.'is aangevinkt voor de user '.$_POST['username'].'<br/>';
}
}
}
<input type="checkbox" name="type[]" value="hulpverlener" />Hulpverlener
<input type="checkbox" name="type[]" value="weiger" />Weiger
<input type="hidden" value="'.$show['username'].'" name = "username"/>
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$aType = $_POST['type'];
if(empty($aType)){
echo("You didn't select any buildings.");
}
else{
foreach($aType as strType){
echo $strType.'is aangevinkt voor de user '.$_POST['username'].'<br/>';
}
}
}
Gewijzigd op 02/03/2012 22:51:04 door gerhard l
Warning: Invalid argument supplied for foreach() in /home/ehbonopn/public_html/wp-content/themes/ehbonop/page-rechten-aanpassen.php on line 18
waarschijnlijk omdat je geen array uitleest.
dit is het script:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?
$aType = $_POST['type'];
foreach($aType as $type){
if($type == 'beheer'){
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($_POST[''.$_POST['username'].'']). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$_POST['username']. "<br />";
}}
?>
$aType = $_POST['type'];
foreach($aType as $type){
if($type == 'beheer'){
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($_POST[''.$_POST['username'].'']). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$_POST['username']. "<br />";
}}
?>
Gewijzigd op 05/03/2012 15:00:07 door Matthijs Vos
Gerhard l op 02/03/2012 22:50:48:
Nee, nee, nee!
Als er nu geen checkboxen worden aangevinkt (maar wel op de knop wordt geklikt) dan krijg je alweer een error om je oren omdat $_POST['type'] niet bestaat!
Altijd EERST checken of de POST waarde bestaat, dan pas uitlezen:
Heb nog een ander probleem. Hij update nu geen van de gebruikers, hij zegt wel dat hij er 1 update (en dan zegt hij het al van de verkeerder gebruiker) maar doet vervolgens niks. script:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
if (isset($_POST['type'])){
foreach($_POST['type'] as $type){
if($type == 'beheer'){
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($_POST[''.$_POST['username'].'']). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$_POST['username']. "<br />";
?>
if (isset($_POST['type'])){
foreach($_POST['type'] as $type){
if($type == 'beheer'){
$sql = "UPDATE members SET rang = '10' WHERE username = '" .mysql_real_escape_string($_POST[''.$_POST['username'].'']). "' ";
mysql_query($sql);
echo "De volgende gebruikers zijn nu beheerders: " .$_POST['username']. "<br />";
?>
}
acount 1
acount 2
acount 3
en ik maak acount 1 beheerder, word acount 3 beheerder
iemand idee hoe dit kan?
Toevoeging op 05/03/2012 19:03:08:
Niemand een idee hoe dit kan?? Het zal wel in een stom dingetje zijn die ik weer eens over het hoofd zie :$
Gewijzigd op 05/03/2012 17:33:37 door Matthijs Vos