Meerdere dingen tegelijk wegschrijven naar database
Hallo,
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
Het zal wel een klein dingetje zijn maar iemand enig idee??
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.
En je foutafhandeling op je query is ook met vakantie zie ik.
Niet handig.
Niet handig.
Je code is erg Lek! de gevaarlijke $_GET variabelen zijn gewoon te saboteren. Ookal is het een administrator paneel. je zou moeten weten dat als iemand bepaalde codes in de $_GET variabelen van de URL zet dat je database dan om zeep kan worden geholpen!
Gebruik altijd even mysql_real_escape_string()
dus bijvoorbeeld regel 3 wordt nu:
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
Ik heb het niet getest dus ik weet niet uit mijn hoofd of het werkt.
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
Heey, Allemaal bedankt voor de tips.
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?
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.
@gerhard
Als ik dt doe dan gaat hij steeds weer maar 1 afwerken.
Script:
en de foutafhandeling komt nog, wil eerst zorgen dat het werkt
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?
Mijn HTML form ziet er als volgend uit:
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)
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
En dat gebeurt dus niet, want de tweede checkbox met name "beheer" overschrijft de eerste. Je krijgt dus altijd maar eentje terug.
Gewijzigd op 02/03/2012 15:28:55 door Erwin H
De names van de checkboxes veranderen naar beheer[] hulpverlener[] en weiger[] of, lijkt me duidelijker, ckbox[$i][beheer], ckbox[$i][hulpverlener] en ckbox[$i][weiger]. Deze kan je dan weer uitlezen bij het verwerken van het formulier en de index geeft aan welk item bewerkt is.
Gewijzigd op 02/03/2012 15:27:41 door Jurgen B
@jurgen,
Dus dan krijg je in het formulier:
Maar hoe doe ik dat dan bij het wegschrijven?
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?
Je moet ze juist dezelfde name geven en een aparte value.
voorbeeld
voorbeeld
Gewijzigd op 02/03/2012 15:37:53 door gerhard l
@gerhard
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??
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??
ik zou het zoiets doen:
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
gerhard, ik heb het geprobeerd maar ik krijg van de foreach 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
waarschijnlijk omdat je geen array uitleest.
dit is het script:
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:
Heey erwin, bedankt dat was ik vergeten.
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:
}
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 />";
?>
}
Heb net een error ontdekt, die ehb ik verwijderd is er uit. alleen nu loop ik tegen het volgende aan, ik heb:
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 :$
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




