Meerdere dingen tegelijk wegschrijven naar database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Matthijs Vos

Matthijs Vos

01/03/2012 15:57:59
Quote Anchor link
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 />";  
    }

?>


Het zal wel een klein dingetje zijn maar iemand enig idee??
 
PHP hulp

PHP hulp

24/11/2024 15:19:33
 
Erwin H

Erwin H

01/03/2012 16:54:48
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

01/03/2012 17:00:05
Quote Anchor link
En je foutafhandeling op je query is ook met vakantie zie ik.
Niet handig.
 
Jan terhuijzen

jan terhuijzen

01/03/2012 17:22:52
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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)
PHP script in nieuw venster Selecteer het PHP script
1
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 />";  
    }

?>

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
 
Matthijs Vos

Matthijs Vos

02/03/2012 11:57:18
Quote Anchor link
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?
 
Gerhard l

gerhard l

02/03/2012 12:06:17
Quote Anchor link
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.
 
Matthijs Vos

Matthijs Vos

02/03/2012 12:27:25
Quote Anchor link
@gerhard

Als ik dt doe dan gaat hij steeds weer maar 1 afwerken.
Script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 />";  
    }

?>

en de foutafhandeling komt nog, wil eerst zorgen dat het werkt
 
Erwin H

Erwin H

02/03/2012 12:28:57
Quote Anchor link
Ja... waarschijnlijk omdat er ook maar een waarde in $_POST['beheer'] zit. Hoe ziet je HTML form eruit?
 
Matthijs Vos

Matthijs Vos

02/03/2012 14:23:32
Quote Anchor link
Mijn HTML form ziet er als volgend uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
?>

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
 
Erwin H

Erwin H

02/03/2012 14:58:37
Quote Anchor link
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
 
Jurgen B

Jurgen B

02/03/2012 15:26:47
Quote Anchor link
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
 
Matthijs Vos

Matthijs Vos

02/03/2012 15:30:27
Quote Anchor link
@jurgen,

Dus dan krijg je in het formulier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
?>


Maar hoe doe ik dat dan bij het wegschrijven?
 
Gerhard l

gerhard l

02/03/2012 15:37:42
Quote Anchor link
Je moet ze juist dezelfde name geven en een aparte value.

voorbeeld
Gewijzigd op 02/03/2012 15:37:53 door gerhard l
 
Matthijs Vos

Matthijs Vos

02/03/2012 16:29:27
Quote Anchor link
@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??
 
Gerhard l

gerhard l

02/03/2012 22:50:48
Quote Anchor link
ik zou het zoiets doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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/>';
        }
    
    }
}
Gewijzigd op 02/03/2012 22:51:04 door gerhard l
 
Matthijs Vos

Matthijs Vos

05/03/2012 14:59:35
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 />";  
    }}

?>
Gewijzigd op 05/03/2012 15:00:07 door Matthijs Vos
 
Erwin H

Erwin H

05/03/2012 15:10:50
Quote Anchor link
Gerhard l op 02/03/2012 22:50:48:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $aType = $_POST['type'];
    
    if(empty($aType)){
        echo("You didn't select any buildings.");
    }

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
  if ( isset( $_POST['type'] ) ){
    $aType = $_POST['type'];

    //etc etc
  }
}

?>
 
Matthijs Vos

Matthijs Vos

05/03/2012 15:38:12
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 />";
?>

}
 
Gerhard l

gerhard l

05/03/2012 15:40:53
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$query = mysql_query($sql);
if($query === false){
    echo mysql_error();
}
else{
    echo 'nu pas is het gelukt';
}
 
Matthijs Vos

Matthijs Vos

05/03/2012 15:43:10
Quote Anchor link
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 :$
Gewijzigd op 05/03/2012 17:33:37 door Matthijs Vos
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.