probleem met update query in while lus

Status
Niet open voor verdere reacties.

hobielasseel

Gebruiker
Lid geworden
10 apr 2011
Berichten
142
Dag allemaal

ik ben bezig met een intranet te bouwen, op dit moment ben ik bezig met de beheersfuncties:
het script werkt als volgt:
  • met een while lus worden de huidige gegevens uit de database gehaald en in een form geplaatst
  • door middel van een update query veranderen we de gegevens indien men in het form iets gewijzigd heeft
probleem nu is het volgende: als ik de naam van 1 gebruiker wil wijzigen, verandert de naam van alle gebruikers,
als ik de code voor de verwerking buiten de lus plaats werkt het script helemaal niet, dit heb ik geprobeerd en is dus geen optie.

heeft er iemand een idee hoe ik dit probleem kan oplossen ?
PHP:
$sql = "SELECT id, gebruikersnaam, wachtwoord, naam, voornaam, email, functie, usertype FROM intranet_gebruikers";
    $res = mysql_query($sql)or die(mysql_error());
    while($row = mysql_fetch_assoc($res)){
                 // E-mailadres bijwerken:
        // De variabele fout aanmaken om fouten ivm 'undefined variable' te voorkomen
        //echo $row['id'];
        $fout = '';
        if($_SERVER['REQUEST_METHOD'] == "POST"){
            include_once("../framework/functies.php");
            if(!is_email($_POST['emailadres'])){
                $fout = 'Geen geldig e-mailadres!';
            }
            else{
                mysql_query("UPDATE intranet_gebruikers SET
                naam = '".mysql_real_escape_string($_POST['naam'])."'
                WHERE id = ".$row['id']) or die();
?>
            <script type="text/javascript">
                window.location.reload(true);
            </script>
<?php
	    }
        }
        else{
            // Het formulier is nog niet verzonden, dus vullen we het veldje met het huidig e-mailadres
            //$email = mysql_result(mysql_query("SELECT email FROM intranet_gebruikers WHERE id = ".$_SESSION['gebruiker']),0);
	}
?>
            <a href="javascript:void(0);" class="toggle_link"><?php echo htmlentities($row['naam'])." "; echo htmlentities($row['voornaam']);?></a>
	    <div class="toggle_content">
                <form action="<?=htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
                    <fieldset>
                        <label for="gebruikersnaam">Gebruikersnaam:</label><input name="gebruikersnaam" type="text" value="<?php echo htmlentities($row['gebruikersnaam']);?>" />
                        <label for="wachtwoord">Wachtwoord:</label><input name="wachtwoord" type="password" />
                        <label for="repeatwachtwoord">Herhaal het wachtwoord:</label><input name="repeatwachtwoord" type="password" />
                        <label for="naam">Naam:</label><input name="naam" type="text" value="<?php echo htmlentities($row['naam']);?>" />
                        <label for="voornaam">Voornaam:</label><input name="voornaam" type="text" value="<?php echo htmlentities($row['voornaam']);?>" />
                        <label for="emailadres">Emailadres:</label><input name="emailadres" type="text" value="<?php echo htmlentities($row['email']);?>" />
                        <label for="functie">Functie:</label><input name="functie" type="text" value="<?php echo htmlentities($row['functie']);?>" />
                        <label for="gebruikerstype">Gebruikerstype:</label>
			<select name="gebruikerstype" value="<?php echo htmlentities($row['usertype']);?>">
			    <option disabled select>kies een bestuurslid</option>
			    <option value="admin">administrator</option>
			    <option value="normaluser">normal user</option>
			</select>
                        <label></label><input type="submit" value="Bijwerken" />
                    </fieldset>
                </form>
            </div><br />
<?php
    }
 
Uhm, maar dat is toch ook wat je het script vraagt te doen?

Je haalt alle users op en gaat rij voor rij iedere naam vervangen door "$_POST['naam']"

Overigens zitten er volgens mij meer logica fouten in je opzet, maar dat is moeilijk volledig te bepalen door zo de code te lezen
 
enkele aanpassing op jou script
PHP:
<?php
$sql = "SELECT id, gebruikersnaam, wachtwoord, naam, voornaam, email, functie, usertype FROM intranet_gebruikers";
$res = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_assoc($res)) {//hier loop je over elke user 
    // E-mailadres bijwerken:
    // De variabele fout aanmaken om fouten ivm 'undefined variable' te voorkomen
    //echo $row['id'];
    $fout = '';
    if ($_SERVER['REQUEST_METHOD'] == "POST") {
        include_once ("../framework/functies.php");
        if (!is_email($_POST['emailadres'])) {
            $fout = 'Geen geldig e-mailadres!';
        } else {
            if($row['naam'] == $_POST['naam']){// hier beginnen we de nutteloze zaak en de oorzaak van het probleem hier ligt natuurlijk de analise als fout van van het probleem
                mysql_query("UPDATE intranet_gebruikers SET naam = '" . mysql_real_escape_string($_POST['naam']) ."' WHERE id = " . $row['id']) or die();
            }
            ?>
            <script type="text/javascript">
                window.location.reload(true);
            </script>
            <?php
        }
    }else{
        // Het formulier is nog niet verzonden, dus vullen we het veldje met het huidig e-mailadres
        //$email = mysql_result(mysql_query("SELECT email FROM intranet_gebruikers WHERE id = ".$_SESSION['gebruiker']),0);
    }
?>
<a href="javascript:void(0);" class="toggle_link"><?php echo htmlentities($row['naam']) . " ". htmlentities($row['voornaam']);?></a>
            <div class="toggle_content">
                    <form action="<?=    htmlentities($_SERVER['REQUEST_URI'])?>" method="post">
                        <fieldset>
                            <label for="gebruikersnaam">Gebruikersnaam:</label><input name="gebruikersnaam" type="text" value="<?php    echo htmlentities($row['gebruikersnaam']);?>" />
                            <label for="wachtwoord">Wachtwoord:</label><input name="wachtwoord" type="password" />
                            <label for="repeatwachtwoord">Herhaal het wachtwoord:</label><input name="repeatwachtwoord" type="password" />
                            <label for="naam">Naam:</label><input name="naam" type="text" value="<?php echo htmlentities($row['naam']);?>" />
                            <label for="voornaam">Voornaam:</label><input name="voornaam" type="text" value="<?php echo htmlentities($row['voornaam']);?>" />
                            <label for="emailadres">Emailadres:</label><input name="emailadres" type="text" value="<?php  echo htmlentities($row['email']);?>" />
                            <label for="functie">Functie:</label><input name="functie" type="text" value="<?php   echo htmlentities($row['functie']);?>" />
                            <label for="gebruikerstype">Gebruikerstype:</label>
                <select name="gebruikerstype" value="<?php   echo htmlentities($row['usertype']);?>">
                    <option disabled select>kies een bestuurslid</option>
                    <option value="admin">administrator</option>
                    <option value="normaluser">normal user</option>
                </select>
                            <label></label><input type="submit" value="Bijwerken" />
                        </fieldset>
                    </form>
                </div><br />
<?php } ?>
uw script had er beter zo uitgezien

PHP:
<?php
// connection and select database not found
if("" =! $_POST['naam']){
    $sql = "SELECT id, gebruikersnaam, wachtwoord, naam, voornaam, email, functie, usertype FROM intranet_gebruikers";
    $res = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_assoc($res)) {//hier loop je over elke user 
        //...
    } 
}else{
    if("" =! $_POST['naam']){
               $res = mysql_query("UPDATE intranet_gebruikers SET naam = '" . mysql_real_escape_string($_POST['naam']) ."' WHERE id = " . $row['id']) or die();
               print ($res)? "update gelukt":" update voor onbekende reden niet gelukt" ;
    }
}
?>
 
ik heb het probleem kunnen oplossen door via een formulier een gebruiker te kiezen en daarna zo de gegevens te bewerken en dit lukt wel.
 
"<input name="gebruikersnaam" type="text" ......>"

Al je gebruikersnaam, velden hebben dezelfde naam, dus je hebt uberhaupt maar één naam om door te geven.

Bouw je formulier op met een array als naam, dan krijg je ze ook als array terug in $_POST en alleen dan kun je er doorheen lopen om rij voor rij te veranderen:


echo '<input name="gebruikersnaam[]" type="text" .....>';

Persoonlijk doe ik het liever zo:

echo '<input name="data['.$id.'][gebruikersnaam]" type="text" .... >';

Dan krijg je in $_POST een array die er uit ziet als:
$_POST['data']= array(1=>array('gebruikersnaam'=>''), 2=>array('gebruikersnaam'=>''));

en dat kun jue verwerken als:
foreach($_POST['data'] as $id=>$row)
{
$strQuery = "UPDATE foo SET gebruikersnaam=".$row['gebruikersnaam'].' WHERE id='.$id;
}

En daarbij natuurlijk welk de querydata escapen enzo, het is maar een schets van hoe je dit zou moeten aanpakken, geen werkend voorbeeld.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan