login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Formulier werkt niet (Opgelost)

Offline Gezienus - 25/06/2011 21:23 (laatste wijziging 25/06/2011 21:30)
Avatar van GezienusLid Voor het vullen van uitslagen van wedstrijden wil ik het volgende formulier gebruiken.

  1. echo "<form method='post' name='form' action='$PHP_SELF'>";
  2. echo "<table width='805' border='0' class='hoofdtekst_2'><tr><td width='85'>$datum</td><td width='45'>$tijd</td><td width='50'>$nummer</td><td width='130' align='right'>$thuis</td><td width='10' align='center'>-</td><td width='180'>$uit</td><td width='65' align='right'><input name='score_thuis' type='text' style='width:50px' /></td><td width='10'>-</td><td width='65'><input name='score_uit' type='text' style='width:50px' /></td><td width='165'>&nbsp;</td></tr>";
  3. }
  4. echo "<tr><td colspan='10'>&nbsp;</td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table>
  5. </form>";
  6.  
  7.  
  8. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  9.  
  10. for($i=0;$i<$count;$i++){
  11. $id = $_POST['id'];
  12. $score_thuis = $_POST['score_thuis'];
  13. $score_uit = $_POST['score_uit'];
  14.  
  15. $sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='$score_thuis[$i]', score_uit='$score_uit[$i]' WHERE id='$id[$i]'") or trigger_error(mysql_error(),E_USER_ERROR);
  16.  
  17. }
  18. echo '<meta http-equiv="refresh" content="0;URL=?location=uitslagen" />';
  19. }


$count bepaal ik met het ophalen van de wedstrijden waarvoor ik een uitslag moet gaan invullen.
Als ik echter op de knop druk vult hij de uitslagen niet in.
Wie wil en kan mij helpen?

25 antwoorden

Gesponsorde links
Offline Bv202 - 25/06/2011 21:38 (laatste wijziging 25/06/2011 21:41)
Avatar van Bv202 Lid Wat is $PHP_SELF? Het is $_SERVER['PHP_SELF'] (tenzij je dat bewust in een aparte variabele hebt gestoken?)
Denk eraan dat dat sowieso al een XSS-probleem is:
http://www.scri...te-phpself

Tevens mag je nooit zomaar user input in de query meegeven - gebruik op z'n minst mysql_real_escape_string() hiervoor. Een controle op die scores/id's is tevens nodig hier.
Offline Gezienus - 25/06/2011 21:52 (laatste wijziging 25/06/2011 21:55)
Avatar van Gezienus Lid $PHP_SELF? is niet het probleem. Bij andere pagina's werkt dit wel.

Het probleem zit hem in de update, daar gaat volgens mij iets niet juist alleen kan ik het niet vinden.

Ook de "beveiliging" ga ik nog wel nader bekijken.
Offline FrankL - 25/06/2011 23:30
Avatar van FrankL Lid Probeer het eens door bij iedere variabele die je in de html stukken hebt dit te doen:
  1. "<form method='post' name='form' action='".$PHP_SELF."'>";


Dus de variabele niet in de html gedeeltes laten staan.
$PHP_SELF kan ook worden gebruikt inderdaad.
Offline mwthomas - 26/06/2011 00:33
Avatar van mwthomas Lid Gebruik $_SERVER['PHP_SELF']

  1. $sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='$score_thuis[$i]', score_uit='$score_uit[$i]' WHERE id='$id[$i]'") or trigger_error(mysql_error(),E_USER_ERROR);


Verander je door:
  1. $sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='".$score_thuis[$i]."', score_uit='".$score_uit[$i]."' WHERE id='".$id[$i]."'") or trigger_error(mysql_error(),E_USER_ERROR);
Offline WouterJ - 26/06/2011 09:04
Avatar van WouterJ HTML gevorderde En gooi eens even PHP.net: mysql_real_escape_string over de gebruiker waardes. Niet zeggen dat komt later, maar gewoon meteen goed doen.

Precies zoals de foutafhandeling. Hoe weet je nu of de query gelukt is? Gebruik hiervoor PHP.net: mysql_affected_rows.
Offline Gezienus - 26/06/2011 10:03 (laatste wijziging 26/06/2011 10:46)
Avatar van Gezienus Lid Ik heb nu de volgende code:

  1. <?php
  2. include ("authorized.php");
  3. include ("../config/config.php");
  4.  
  5. echo "<div id='main_border'><table width='805' border='0'><tr class='blok2'><td>Uitslagen invoeren</td></tr></table><br />";
  6.  
  7. echo "<table width='805px' class='blok3' border='0'><tr><td width='85'>Datum</td><td width='45'>Tijd</td><td width='50'>Nr.</td><td width='130' align='right'>Thuis</td><td width='10' align='center'></td><td width='180'>Uit</td><td width='140' align='center'>Uitslag</td><td width='165'></td></tr></table><br>";
  8.  
  9. $sql = mysql_query("SELECT * FROM wedstrijden WHERE (datum <= current_date()) AND (score_thuis IS NULL) ORDER BY datum ASC") or trigger_error(mysql_error(),E_USER_ERROR);
  10. while ($row = mysql_fetch_array($sql)) {
  11. $id = $row['id'];
  12. $team = $row['team'];
  13. $date = $row['datum'];
  14. $time = $row['tijd'];
  15. $nummer = $row['wedstrijdnummer'];
  16. $thuis = $row['thuis'];
  17. $uit = $row['uit'];
  18. $score_thuis = $row['score_thuis'];
  19. $score_uit = $row['score_uit'];
  20. $tijd = cnv_tijd($time);
  21. $datum = cnv_dat($date);
  22. $count=mysql_num_rows($sql);
  23.  
  24. echo "<form method='post' name='form' action='".$_SERVER['PHP_SELF']."'>";
  25. echo "<table width='805' border='0' class='hoofdtekst_2'><tr><td width='85'>".$datum."</td><td width='45'>".$tijd."</td><td width='50'>".$nummer."</td><td width='130' align='right'>".$thuis."</td><td width='10' align='center'>-</td><td width='180'>".$uit."</td><td width='65' align='right'><input name='".score_thuis."' type='text' style='width:50px' /></td><td width='10'>-</td><td width='65'><input name='".score_uit."' type='text' style='width:50px' /></td><td width='165'>&nbsp;</td></tr>";
  26.  
  27.  
  28. }
  29. echo "<tr><td colspan='10'>&nbsp;</td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table>
  30. </form>";
  31.  
  32.  
  33. if($_SERVER['REQUEST_METHOD'] == 'POST') {
  34.  
  35. for($i=0;$i<$count;$i++){
  36. $id = $_POST['id'];
  37. $score_thuis = mysql_real_escape_string($_POST['score_thuis']);
  38. $score_uit = mysql_real_escape_string($_POST['score_uit']);
  39.  
  40. $sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='".$score_thuis[$i]."', score_uit='".$score_uit[$i]."' WHERE id='".$id[$i]."'") or trigger_error(mysql_error(),E_USER_ERROR);
  41. }
  42. echo '<meta http-equiv="refresh" content="0;URL=?location=uitslagen" />';
  43. }
  44. echo "</div>";
  45. ?>


Er wordt echter nog niets ge-updated.
Het scherm wordt nu ook niet ge-refreshed
Offline FrankL - 26/06/2011 12:27
Avatar van FrankL Lid <input name='".score_thuis."' ....

uh, ik neem aan dat dat ook een variabele hoort te zijn, dus daar meot je nog $-teken voor zetten, en anders gewoon <input name='score_thuis' van maken;)

Zelfde geld voor score_uit als input name.
En $_POST['id'] kan niet, er is geen id meegepost;)
Dus de sql gaat sowieso al fout doordat where id=$id[$i] niet kan;)

Offline Gezienus - 26/06/2011 16:03 (laatste wijziging 26/06/2011 17:14)
Avatar van Gezienus Lid <input name='".score_thuis."' .... was ik inmiddels achter dat het niet correct is.
Is aangepast.

Het id wordt toch al opgehaald in de SELECT query?


Offline Aar - 26/06/2011 16:27
Avatar van Aar PHP interesse je metatag staat verkeerd geplaatst......
Offline FrankL - 26/06/2011 16:43
Avatar van FrankL Lid id wordt wel opgehaald in de SELECT query, maar vervolgens noem je $id=$_POST['id'] en dat kan niet, want $_POST['id'] gaat niks opleveren;)
Offline Gezienus - 26/06/2011 17:14 (laatste wijziging 26/06/2011 17:17)
Avatar van Gezienus Lid Wie kan mij dan vertellen hoe het wel moet?
Offline FrankL - 26/06/2011 17:34
Avatar van FrankL Lid Zou je toevallig je database structuur/eventuele gegevens eruit kunnen posten hier, dan kan ik het even testen.
Offline Gezienus - 26/06/2011 18:01
Avatar van Gezienus Lid en hoe doe ik dat? ik heb eeb zip-file
Offline FrankL - 26/06/2011 18:08
Avatar van FrankL Lid je zou hier kunnen aangeven welke velden je hebt in je tabel, en daarbij horende gegevens als : is het int of varchar enz.
en de gegevens die vervolgens in de tabel komen, dus welke teams enz
Offline Gezienus - 26/06/2011 18:13
Avatar van Gezienus Lid Tabelstructuur voor tabel `wedstrijden`
--

CREATE TABLE IF NOT EXISTS `wedstrijden` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`team` text NOT NULL,
`competitie` text NOT NULL,
`wedstrijdnummer` int(4) DEFAULT NULL,
`datum` date NOT NULL,
`tijd` time NOT NULL,
`thuis` text NOT NULL,
`uit` text NOT NULL,
`score_thuis` int(4) DEFAULT NULL,
`score_uit` int(4) DEFAULT NULL,
`sporthal` text NOT NULL,
`plaats` text NOT NULL,
`bestuursdienst` text,
`ordedienst` text,
`scheidsrechter` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=18 ;

--
-- Gegevens worden uitgevoerd voor tabel `wedstrijden`
--

INSERT INTO `wedstrijden` (`id`, `team`, `competitie`, `wedstrijdnummer`, `datum`, `tijd`, `thuis`, `uit`, `score_thuis`, `score_uit`, `sporthal`, `plaats`, `bestuursdienst`, `ordedienst`, `scheidsrechter`) VALUES
(3, 'B1', 'Meisjes B-jeugd', 401, '2011-06-10', '00:00:00', 'Unitas B1', 'Hazewind B1', NULL, NULL, 'De Boerhoorn', 'Rolde', NULL, NULL, NULL),
(14, 'A1', 'Meisjes A-jeugd', 307, '2011-06-22', '00:00:00', 'Hazewind A1', 'S.V. Hoogersmilde A1', NULL, NULL, 'de Goorns', 'GIETEN', 'pietje', 'puk', 'klaas'),
(16, 'B1', 'Meisjes B-jeugd', 200, '2011-06-25', '21:00:00', 'Hazedwind B1', 'Unitas B1', NULL, NULL, 'de Goorns', 'GIETEN', 'Klaas', 'Hendrik Pietersen / Klaas Klaassens', 'Pieter');


Kun je hier iets mee?
Offline FrankL - 26/06/2011 18:17 (laatste wijziging 26/06/2011 18:49)
Avatar van FrankL Lid ja, dankje:)

EDIT:
ik kan het zo snel niet vinden, ik heb het nu wel werkend dat er 1 per keer kan worden ge-update. Morgen na 12:00 zal ik er verder na kijken, ik moet nu helaas verder met leren.
Offline Gezienus - 29/06/2011 22:24
Avatar van Gezienus Lid Heb je hier nog naar gekeken.
Weet iemand een oplossing?
Offline dmbekker - 29/06/2011 23:32
Avatar van dmbekker Lid voor die redirect, meta refresh. Kijk hier eens
http://www.phph...fresh-/608/
Offline FrankL - 30/06/2011 00:47
Avatar van FrankL Lid Ik heb er nog nagekeken, maar het lukte helaas niet;) Het spijt me. Ik kan je wel het script geven dat er telkens 1 toevoegd:P
Offline Gezienus - 04/07/2011 21:29
Avatar van Gezienus Lid Iemand anders misschien nog een suggestie?
Offline Wijnand - 06/07/2011 08:37
Avatar van Wijnand Moderator 1. Kun je bij die POST even de $count echo-en?

2. Je gebruikt $_POST['score_thuis'] en $_POST['score_uit'] als een array, terwijl het in het formulier maar is als een normaal veld.

Je zult dus dit moeten doen met de namen van de formulieren (dan worden ze namelijk van 0 t/m de laatste genummerd):
<input name='score_thuis[]' type='text' style='width:50px' />
<input name='score_uit[]' type='text' style='width:50px' />

3. In het formulier staat nergens een veld met de ID erin, dat moet dus ook nog.
<input name='id[]' type='hidden' value='" . $id_uit_de_loop . "' />
Offline Gezienus - 06/07/2011 20:53
Avatar van Gezienus Lid Ik ben de draad volledig kwijt

Ik heb nu de volgende code:
  1. <?php
  2. include ("authorized.php");
  3. include ("../config/config.php");
  4.  
  5. ini_set('display_errors',1);
  6.  
  7. echo "<div id='main_border'>";
  8. echo "<table width='805' border='0'><tr class='blok2'><td>Uitslagen invoeren</td></tr></table><br />";
  9.  
  10. echo "<table width='805px' class='blok3' border='0'><tr><td width='25'>id</td><td width='85'>Datum</td><td width='45'>Tijd</td><td width='50'>Nr.</td><td width='130' align='right'>Thuis</td><td width='10' align='center'></td><td width='180'>Uit</td><td width='140' align='center'>Uitslag</td><td width='140'></td></tr></table><br>";
  11.  
  12. $sql = mysql_query("SELECT * FROM wedstrijden WHERE (datum <= current_date()) AND (score_thuis IS NULL) ORDER BY datum ASC") or trigger_error(mysql_error(),E_USER_ERROR);
  13. while ($row = mysql_fetch_array($sql)) {
  14. $id = $row['id'];
  15. $team = $row['team'];
  16. $date = $row['datum'];
  17. $time = $row['tijd'];
  18. $nummer = $row['wedstrijdnummer'];
  19. $thuis = $row['thuis'];
  20. $uit = $row['uit'];
  21. $score_thuis[] = $row['score_thuis'];
  22. $score_uit[] = $row['score_uit'];
  23. $tijd = cnv_tijd($time);
  24. $datum = cnv_dat($date);
  25. $count=mysql_num_rows($sql);
  26.  
  27. echo "<form method='post' name='form'>";
  28. echo "<table width='805' border='0' class='hoofdtekst_2'><tr><td><input name='id[]' type='hidden' ></td><td width='25'>$id</td><td width='85'>$datum</td><td width='45'>$tijd</td><td width='50'>$nummer</td><td width='130' align='right'>$thuis</td><td width='10' align='center'>-</td><td width='180'>$uit</td><td width='65' align='right'><input name='score_thuis[]' type='text' style='width:30px' ></td><td width='10' align='center'>-</td><td width='65'><input name='score_uit[]' type='text' style='width:30px' ></td><td width='140'>&nbsp;</td></tr></table>";
  29. }
  30. echo "<table><td colspan='10'>&nbsp;</td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table>
  31. </form>";
  32.  
  33. if($_SERVER['REQUEST_METHOD'] == "POST") {
  34. for ($i=0;$i<$count;$i++){
  35. $score_thuis = mysql_real_escape_string($_POST['score_thuis']);
  36. $score_uit = mysql_real_escape_string($_POST['score_uit']);
  37.  
  38. $sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='$score_thuis[$i]', score_uit='$score_uit[$i]' WHERE id='$id[$i]'") or trigger_error(mysql_error(),E_USER_ERROR);
  39. echo "$count";
  40. echo "$id - ";
  41. echo " score_thuis='".$score_thuis[$i]."', score_uit='".$score_uit[$i]."', id='".$id[$i]."';<br />";
  42. }
  43. //echo "<meta http-equiv='refresh' content='0;URL=index.php?location=uitslagen'/>";
  44. }
  45. echo "</div>";
  46. ?>


Ik krijg nu de volgende foutmelding:

Warning: mysql_real_escape_string() expects parameter 1 to be string, array given ....

Waar gaat het nu nog fout !!!!
Offline mwthomas - 07/07/2011 11:53
Avatar van mwthomas Lid Zoals de foutmelding zegt: Je hebt als parameter een array ingegeven en geen string.
Offline Wijnand - 07/07/2011 16:55
Avatar van Wijnand Moderator Oftewel niet om de array heen:
mysql_real_escape_string($_POST['score_thuis'])

maar in de query om de varchar heen:

$sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='" . mysql_real_escape_string($score_thuis[$i]) . "', etc....
Offline Gezienus - 08/07/2011 12:09 (laatste wijziging 08/07/2011 14:30)
Avatar van Gezienus Lid Ik heb nu dat de velden in de database worden gevuld.
Alleen kan ik daar nu nog in zetten wat ik wil.

Er mag echter alleen geüpdated worden als het veld niet leeg is en er een getal is ingevuld.

Kan dat met de volgende controle?

  1. if($_SERVER['REQUEST_METHOD'] == "POST") {
  2. for ($i=0;$i<$count;$i++){
  3. $score_thuis = $_POST['score_thuis'];
  4. $score_uit = $_POST['score_uit'];
  5. $id = $_POST['id'];
  6. if (is_numeric($score_thuis));
  7. if (is_numeric($score_uit)) ;
  8. if (!empty($score_thuis));
  9. if (!empty($score_uit));
  10. //$sql_update= mysql_query("UPDATE wedstrijden SET score_thuis='" . mysql_real_escape_string($score_thuis[$i]) . "', score_uit='" . mysql_real_escape_string($score_uit[$i]) . "' WHERE id='".$id[$i]."'") or trigger_error(mysql_error(),E_USER_ERROR);
  11. echo "$count - ";
  12. echo " score_thuis='".$score_thuis[$i]."', score_uit='".$score_uit[$i]."', id='".$id[$i]."';<br />";
  13. }


edit: Het werkt inmiddels
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.253s