[PHP]Tabel updaten m.b.v. pop-up form

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Arutha
  • Registratie: Augustus 2004
  • Niet online
Ik heb een HTML tabel die wordt gevuld door een database. Ik wil ervoor zorgen dat de gegevens in deze tabel rij per rij aanpasbaar zijn. Dit wil ik bereiken door een "aanpassen" link op het einde van elke rij te plaatsen die na aanklikken een pop-up formulier tevoorschijn tovert (mbv jquery). Via dit formulier kunnen de gegevens van de rij in kwestie dan worden aangepast.

Het probleem: Ik krijg de gegevens van de geselecteerde rij niet in het formulier. Ik vermoed dat dit niet doenbaar is via PHP, daar de gegevens dynamisch ingelezen moeten worden.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$i = 0;

while ($i < $num) 
{
 $datum = mysql_result($result,$i,"datum");
 $uur = mysql_result($result,$i,"uur");
 $zaal = mysql_result($result,$i,"zaal");
 $terrein = mysql_result($result,$i,"terrein");
 $vertrek = mysql_result($result,$i,"vertrek");
 $thuisploeg = mysql_result($result,$i,"thuisploeg");
 $bezoekers = mysql_result($result,$i,"bezoekers");
 $uitslag = mysql_result($result,$i,"uitslag");

 echo "<tr>\n";
 echo "<td>".$datum."</td>\n";
 echo "<td>".$uur."</td>\n";
 echo "<td>".$zaal."</td>\n";
 echo "<td>".$terrein."</td>\n";
 echo "<td>".$thuisploeg."</td>\n";
 echo "<td>".$bezoekers."</td>\n";
 echo "<td>".$uitslag."</td>\n";
 echo "<td><a href=\"#\" class=\"editlink\">aanpassen</td>\n";
 echo "</tr>\n";

 ++$i; 
}

echo "</table>\n";

mysql_close();

?>


Het pop-up formulier:
HTML:
33
34
35
36
37
38
39
40
41
42
43
44
45
<div id="dialog" title="Wedstrijdgegevens aanpassen">
 <form action="" method="post">
  Datum: <input type="text" name="datum"><br />
  Uur: <input type="text" name="uur"><br />
  Zaal: <input type="text" name="zaal"><br />
  Terrein: <input type="text" name="terrein"><br />
  Vertrek: <input type="text" name="vertrek"><br />
  Thuisploeg: <input type="text" name="thuisploeg"><br />
  Bezoekers: <input type="text" name="bezoekers"><br />
  Uitslag: <input type="text" name="uitlsag"><br />
  <input type="Submit" value="Aanpassen">
 </form>
</div>

Acties:
  • 0 Henk 'm!

Verwijderd

Heb je misschien ook een DB table bij de hand, hoeft niet met data maar wel de structuur. Dat maakt het wat begrijpelijker denk ik.

[ Voor 94% gewijzigd door Verwijderd op 01-11-2009 01:45 . Reden: addon ]


Acties:
  • 0 Henk 'm!

Verwijderd

Wat je waarschijnlijk wilt is elke wedstrijd een ID geven, een simpel nummertje. Als de gebruiker dan op aanpassen klikt open je de pagina wijzigwedstrijd.php?id=x in een popup. Deze pagina gaat dan zelf de velden invullen.

Regel 22 van je eerste script kun je dan aanpassen naar:
PHP:
1
echo "<td><a href=\"wijzigwedstrijd.php?id=". $id ."\" class=\"editlink\">aanpassen</td>\n";


In je wijzigwedstrijd.php pagina zul je dan eerst de gegevens op moeten halen vanuit de database aan de hand van het id. En daarna kun je hetzelfde principe toepassen uit je eerste script maar dan zonder for loop. Ongeveer zo:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$sql = "SELECT * FROM wedstrijd WHERE id='". $_GET['id'] ."'";

$result = mysql_query($sql);
$datum = mysql_result($result,0,"datum");

?>
<div id="dialog" title="Wedstrijdgegevens aanpassen">
 <form action="" method="post">
  Datum: <input type="text" name="datum" value="<?= $datum ?>"><br />
  Uur: <input type="text" name="uur"><br />
  Zaal: <input type="text" name="zaal"><br />
  Terrein: <input type="text" name="terrein"><br />
  Vertrek: <input type="text" name="vertrek"><br />
  Thuisploeg: <input type="text" name="thuisploeg"><br />
  Bezoekers: <input type="text" name="bezoekers"><br />
  Uitslag: <input type="text" name="uitlsag"><br />
  <input type="Submit" value="Aanpassen">
 </form>
</div>


En ook voor de andere velden. Snap je nu wat je ongeveer moet doen? Gewoon een ID meegeven aan het wijzigformulier en de rest daar afhandelen.

Acties:
  • 0 Henk 'm!

  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 07-09 17:50
gewoon het id van de rij doorgeven aan de popup en de data opnieuw ophalen uit de DB of denk ik nu te simpel?
edit: hmm iets te langzaam met posten :P

[ Voor 16% gewijzigd door dragontje124 op 01-11-2009 02:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk dat is nog eens een tip ;)

Denk btw ook eens aan addslashes($_GET['id']) -> voegt escape strings toe (minder injection mogelijkheden), en strlen( $_GET['id'] ) < 4 voor de veiligheid.

$id = $_GET['id'];
if (strlen($id) < 4)
{ die("foutbericht"); }

$id = addslashes($id);

Acties:
  • 0 Henk 'm!

  • Manuel
  • Registratie: Maart 2008
  • Laatst online: 17-09 14:28
Verwijderd schreef op zondag 01 november 2009 @ 01:49:
Kijk dat is nog eens een tip ;)

Denk btw ook eens aan addslashes($_GET['id']) -> voegt escape strings toe (minder injection mogelijkheden), en strlen( $_GET['id'] ) < 4 voor de veiligheid.

$id = $_GET['id'];
if (strlen($id) < 4)
{ die("foutbericht"); }

$id = addslashes($id);
Gebruik dan meteen mysql_real_escape_string of Parametrized Queries (alleen dan per PDO / MySQLi). Maar denk niet echt dat het de bedoeling is dat wij @TS zijn/haar script over de kop moeten gooien ^^

[ Voor 7% gewijzigd door Manuel op 01-11-2009 04:48 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Hou overigens wel in de gaten dat het gebruik van de functie mysql_result niet de beste is. Een van de mysql_fetch_* functies is een betere keus, omdat deze vele malen sneller zijn.
When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than mysql_result(). Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.

[ Voor 52% gewijzigd door MueR op 01-11-2009 09:59 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • torp
  • Registratie: Januari 2001
  • Laatst online: 08-09 12:48
Also, note that specifying a numeric offset for the field argument is much quicker than specifying a fieldname or tablename.fieldname argument.
Dat wist ik niet. Maar zeker bij grote result sets wordt het daardoor wel erg ingewikkeld, laat staan als je naderhand nog gegevens gaat toevoegen. Zeker in dit stadium zou ik dus zeggen: niet doen.

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Ik zeg; wel doen. Omschrijven naar het onderstaande bijvoorbeeld zou niet al te lang moeten duren. Het scheelt je ook een hoop code, wat het overzicht bevorderd.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
while ($row = mysql_fetch_object($result)) 
{
 echo "<tr>\n";
 echo "<td>".$row->datum."</td>\n";
 echo "<td>".$row->uur."</td>\n";
 echo "<td>".$row->zaal."</td>\n";
 echo "<td>".$row->terrein."</td>\n";
 echo "<td>".$row->thuisploeg."</td>\n";
 echo "<td>".$row->bezoekers."</td>\n";
 echo "<td>".$row->uitslag."</td>\n";
 echo "<td><a href=\"#\" class=\"editlink\">aanpassen</td>\n";
 echo "</tr>\n";
}

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • torp
  • Registratie: Januari 2001
  • Laatst online: 08-09 12:48
Precies wat ik bedoelde, en veel inzichtelijker dan
$row[1], $row[26], $row[12], $row[5], $row[7].

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Oh maar dat bedoelde ze ook niet in de manual. Ze bedoelen daar dat mysql_result($result, $rowCount, 1) sneller is dan mysql_result($result, $rowCount, 'datum').

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • torp
  • Registratie: Januari 2001
  • Laatst online: 08-09 12:48
Vooropgesteld dat ik uit luiheid nog steeds ezSQL gebruik (wat vast iets zegt over mijn niveau), geldt volgens mij nog steeds mijn argument om geen numerieke referenties te gebruiken...

PHP:
1
2
3
4
5
6
7
8
$datum = mysql_result($result,$i,3); 
$uur = mysql_result($result,$i,4); 
$zaal = mysql_result($result,$i,11); 
$terrein = mysql_result($result,$i,7); 
$vertrek = mysql_result($result,$i,9); 
$thuisploeg = mysql_result($result,$i,17); 
$bezoekers = mysql_result($result,$i,18); 
$uitslag = mysql_result($result,$i,14);


Ik ben het overigens van harte met je eens dat je beter een complete rij kunt fetchen.
Noot: misschien toch maar eens met ezSQL stoppen want de links lopen tegenwoordig een beetje dood.

[ Voor 50% gewijzigd door torp op 01-11-2009 11:20 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

MueR schreef op zondag 01 november 2009 @ 10:34:
Oh maar dat bedoelde ze ook niet in de manual. Ze bedoelen daar dat mysql_result($result, $rowCount, 1) sneller is dan mysql_result($result, $rowCount, 'datum').
Mysql_fetch_array is ook marginaal sneller dan mysql_fetch_assoc. Maar om alleen daarom maar jezelf in een hel te gooien waarin je velden in je resultset alleen maar numeriek aan kan spreken...nee. :+

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • torp
  • Registratie: Januari 2001
  • Laatst online: 08-09 12:48
Jammer dat er geen compile-fase mogelijk is waardoor de referenties worden geconverteerd (en gecontroleerd) naar numeriek. Of bestaat er wel een tooltje voor zoiets?

[ Voor 15% gewijzigd door torp op 01-11-2009 13:36 ]


Acties:
  • 0 Henk 'm!

  • marqram
  • Registratie: Januari 2008
  • Laatst online: 12-08 23:57
MueR schreef op zondag 01 november 2009 @ 10:25:
Ik zeg; wel doen. Omschrijven naar het onderstaande bijvoorbeeld zou niet al te lang moeten duren. Het scheelt je ook een hoop code, wat het overzicht bevorderd.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
while ($row = mysql_fetch_object($result)) 
{
 echo "<tr>\n";
 echo "<td>".$row->datum."</td>\n";
 echo "<td>".$row->uur."</td>\n";
 echo "<td>".$row->zaal."</td>\n";
 echo "<td>".$row->terrein."</td>\n";
 echo "<td>".$row->thuisploeg."</td>\n";
 echo "<td>".$row->bezoekers."</td>\n";
 echo "<td>".$row->uitslag."</td>\n";
 echo "<td><a href=\"#\" class=\"editlink\">aanpassen</td>\n";
 echo "</tr>\n";
}
het is mij ooit opgevallen(bij het runnen van een php-script in de commandline) dat echo's relatief veel tijd kosten. Daarom is het sneller ipv iedere keer de echo-functie te gebruiken, de tekst iedere keer aan een variabele toe te voegen en deze aan het einde eenmaal te echoen.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ehm, ja want die micro-optimalisatie laat je script vast 0.000001 seconde sneller draaien. ;) Laten we een beetje ontopic blijven. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Echo wegoptimaliseren ga je inderdaad pas merken als je met enorme recordsets gaat werken. Maar dan moet je toch al aan de paginering. Het gebruik van mysql_result is echter nogal zwaar vergeleken met de alternatieven. Ik bedoel, als zelfs de PHP devvers zeggen dat het beter is om de fetch varianten te gebruiken, zou je toch moeten weten hoe laat het is.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • torp
  • Registratie: Januari 2001
  • Laatst online: 08-09 12:48
De starter van dit topic is niet meer langs geweest...
Pagina: 1