Hallo allemaal,

Wie o wie kan me helpen?

Ik probeer een bewerk pagina te maken om bij users het aantal gewonnen en verloren wedstrijden in te vullen. Hier kan ik dan een statistiekenpagina van maken. Nu krijg ik het niet voor elkaar om meerdere rijen tegelijkertijd aan te passen.

Oftwel... eerst laat ik alle users zien met de gewonnen en verloren wedstrijden. Deze gewonnen en verloren wedstrijden kan ik aanpassen. Maar hoe krijg ik deze gegevens dan in de database?

Als ik d.m.v. de WHERE maar 1 user te voorschijn toon werkt de onderstaande query. Als ik meerdere users laat zien en dan op bijwerken klik werkt het niet. Wat doe ik fout?

$querycomp="UPDATE compperctest SET gewonnen = '". $_POST['gewonnen'] ."', verloren = '". $_POST['verloren'] ."' WHERE uid = '". $_POST['uid'] ."' AND seizoen = '". $_POST['seizoen'] ."'";
$result = mysql_query($querycomp) or die ("FOUT: " . mysql_error());
gebruik is een while in je query..
zou je me misschien nog iets verder kunnen helpen...
Laat het formulier en de verwerking ervan eens zien dat je gebruikt...
En lees meteen even een tutorial door over XSS en MySQL Injection
PHP Newbie schreef op 27.06.2007 23:16
En lees meteen even een tutorial door over XSS en MySQL Injection


Deze had ik al gelezen.... wil eerst dit werkend hebben en dan ga ik me daar op storten. Is inderdaad niet echt onbelangrijk... maar stapje voor stapje... Ben net pas begonnen om zelf wat te schrijven dus er wordt aan gewerkt (eerder altijd alleen maar bestaande scriptjes (een klein beetje) aangepast)


Hieronder volgt de pagina:

<?php

require("config.php");
require("functions.php");

if (!auth()) {

echo "<p align=center><font face='trebuchet ms' size='3'><b>U heeft geen toegang tot deze functie!</b></font></p>";

} else {

?>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Compstats bijwerken</title>
<style type="text/css"><!--body {scrollbar-base-color:#ffffff;}--></style>
<link rel="stylesheet" type="text/css" href="ttvzevenaar.css">
</head>

<body>
<p><img border="0" src="http://www.ttvzevenaar.nl/plaatjes/overige/hoofd1.jpg"; width="597" height="55" alt="TTV Zevenaar Website."></p>

<?php


mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME) or die(mysql_error());



if (isset($_POST["bevestiging"])){
// query samenstellen UPDATE ttvzagenda_compperctest SET gewonnen = '100', verloren = '10' WHERE uid = '13' AND seizoen = 'voorjaar 2007'
// '". $_POST['uid'] ."' AND seizoen = '". $_POST['seizoen'] ."'
$querycomp="UPDATE ttvzagenda_compperctest SET gewonnen = '". $_POST['gewonnen'] ."', verloren = '". $_POST['verloren'] ."' WHERE uid = '". $_POST['uid'] ."' AND seizoen = '". $_POST['seizoen'] ."' ";
$result = mysql_query($querycomp) or die ("FOUT: " . mysql_error());
echo ("");
echo("<p><h4>Compstats aangepast.</h4></p>\n");
if ($result){
echo ("<p>De compstats zijn bijgewerkt.</p>\n");
echo ("<p>&nbsp;</p>");
echo ("<p>&nbsp;</p>");
echo ("<a href=\"index.php\">Terug</a>");
echo ("");
}
}else{
echo " <p><h4>Bewerk compstats</h4>";
echo "<form method='post'>";
echo "<table cellspacing='1' cellpadding='3' border='0' width='100%' class='sortable'>";
echo "<input type='hidden' name='bevestiging' value='1'>";
echo "<tr>";
echo "<td><b>Naam</b></td>";
echo "<td><b>Team</b></td>";
echo "<td><b>Klasse</b></td>";
echo "<td><b>Seizoen</b></td>";
echo "<td><b>Gewonnen</b></td>";
echo "<td><b>Verloren</b></td>";
echo "</tr>";

// pagina heeft zichzelf nog niet aangeroepen,
// formulier tonen om gegevens te bewerken

$authdata = $HTTP_SESSION_VARS['authdata'];
$uid = $authdata['uid'];

$query="SELECT ttvzagenda_compperctest.team, ttvzagenda_compperctest.klasse, ttvzagenda_compperctest.gewonnen, ttvzagenda_compperctest.verloren, ttvzagenda_compperctest.seizoen, ttvzagenda_users.fname, ttvzagenda_users.tussenvoeg, ttvzagenda_users.lname, ttvzagenda_compperctest.seizoen, ttvzagenda_compperctest.uid FROM ttvzagenda_compperctest INNER JOIN ttvzagenda_users ON ttvzagenda_compperctest.uid = ttvzagenda_users.uid ORDER BY ttvzagenda_compperctest.team";
$result = mysql_query($query) or die ("FOUT: " . mysql_error());


while (list($team, $klasse, $gewonnen, $verloren, $seizoen, $fname, $tussenvoeg, $lname, $seizoen, $uid) = mysql_fetch_row($result)){

$inv_uid=$uid;
$inv_team=$team;
$inv_klasse=$klasse;
$inv_gewonnen=$gewonnen;
$inv_verloren=$verloren;
$inv_seizoen=$seizoen;
$inv_fname=$fname;
$inv_tussenvoeg=$tussenvoeg;
$inv_lname=$lname;
$inv_seizoen=$seizoen;

$inv_gespeeld = $inv_gewonnen + $inv_verloren;
$inv_percentage = round(($inv_gewonnen / $inv_gespeeld * 100),0);
$inv_percentageimg = round(($inv_gewonnen / $inv_gespeeld * 400),0);


echo "<tr>";
echo "<td>$inv_fname $inv_tussenvoeg $inv_lname</td>";
echo "<td>$inv_team</td>";
echo "<td valign='top'><input type='text' name='uid' value='$inv_uid' size='3'></td>";
echo "<td valign='top'><input type='text' name='seizoen' value='$inv_seizoen' size='20'></td>";
echo "<td valign='top'><input type='text' name='gewonnen' value='$inv_gewonnen' size='2'></td>";
echo "<td valign='top'><input type='text' name='verloren' value='$inv_verloren' size='2'></td>";
echo "</tr>";
echo "";
}?>
<tr><td width=100% colspan=2><input type="Submit" value="Bijwerken"></form>
</table>

<?php
// else-blok correct afsluiten
}

?>

</body>
</html>
<?php
}
?>
Als je naar het genereren van je formulier kijkt, zie je dat de inputvelden bij iedere user dezelfde naam hebben. Gevolg is dus dat die gegevens telkens overschreven worden en alleen de gegevens van de laatste user verwerkt worden.

Wat hier een mooie oplossing zou zijn is het gebruik van een array als naam voor je input velden:

<input type="text" name="uid[]" value="etc...


Vervolgens kun je tijdens het uitlezen van de geposte gegevens een foreach loop gebruiken om deze gegevens weer naar boven te halen en naar de database te schrijven.

Nog wat andere opmerkingen over je code: haal variabelen buiten quotes. Gebruik voor een echo liever enkele quotes zodat je de dubbele quotes van de html niet hoeft te escapen:
<?php
echo '<td valign="top"><input type="text" name="uid[]" value="'.$inv_uid.'" size="3" /></td>';
?>

Verder heeft dit helemaal geen zin:
<?php
$inv_uid=$uid;
$inv_team=$team;
$inv_klasse=$klasse;
$inv_gewonnen=$gewonnen;
$inv_verloren=$verloren;
$inv_seizoen=$seizoen;
$inv_fname=$fname;
$inv_tussenvoeg=$tussenvoeg;
$inv_lname=$lname;
$inv_seizoen=$seizoen;
?>
Je gaat geen kopieen van variabelen maken als je er verder niets aan veranderd. Dit kan later alleen maar voor verwarring en dus tot fouten leiden...

ps. Nog iets, controleren of een formulier gepost is doe je zo:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
?>
En tenslotte kun je de veldnamen beter nog iets anders nemen:

<input type="text" name="user[$user_id][seizoen]" />
<input type="text" name="user[$user_id][gewonnen]" />
etc...

Nu krijg je een array $_POST['user'] die gevuld is met array's met daarin de gegevens van de users. Dit is weer heel makkelijk uit te lezen met een foreach loop.

Reageren