Formulier werkt niet (Opgelost)
Gezienus - 25/06/2011 21:23 (laatste wijziging 25/06/2011 21:30)
Lid
Voor het vullen van uitslagen van wedstrijden wil ik het volgende formulier gebruiken.
echo "<form method='post' name='form' action='$PHP_SELF'>";
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'> </td></tr>";
}
echo "<tr><td colspan='10'> </td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table>
</form>";
if($_SERVER['REQUEST_METHOD'] == 'POST') {
for($i=0;$i<$count;$i++){
$id = $_POST['id'];
$score_thuis = $_POST['score_thuis'];
$score_uit = $_POST['score_uit'];
$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);
}
echo '<meta http-equiv="refresh" content="0;URL=?location=uitslagen" />';
}
echo "<form method='post' name='form' action='$PHP_SELF '>" ; 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'> </td></tr>" ; }
echo "<tr><td colspan='10'> </td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table> </form>" ;
if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) {
for ( $i = 0 ; $i < $count ; $i ++ ) {
$id = $_POST [ 'id' ] ;
$score_thuis = $_POST [ 'score_thuis' ] ;
$score_uit = $_POST [ 'score_uit' ] ;
}
echo '<meta http-equiv="refresh" content="0;URL=?location=uitslagen" />' ; }
$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
Bv202 - 25/06/2011 21:38 (laatste wijziging 25/06/2011 21:41)
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.
Gezienus - 25/06/2011 21:52 (laatste wijziging 25/06/2011 21:55)
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.
FrankL - 25/06/2011 23:30
Lid
Probeer het eens door bij iedere variabele die je in de html stukken hebt dit te doen:
"<form method='post' name='form' action='".$PHP_SELF."'>";
"<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.
mwthomas - 26/06/2011 00:33
Lid
Gebruik $_SERVER['PHP_SELF']
$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:
$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);
$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 ) ;
Gezienus - 26/06/2011 10:03 (laatste wijziging 26/06/2011 10:46)
Lid
Ik heb nu de volgende code:
<?php
include ("authorized.php");
include ("../config/config.php");
echo "<div id='main_border'><table width='805' border='0'><tr class='blok2'><td>Uitslagen invoeren</td></tr></table><br />";
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>";
$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);
while ($row = mysql_fetch_array($sql)) {
$id = $row['id'];
$team = $row['team'];
$date = $row['datum'];
$time = $row['tijd'];
$nummer = $row['wedstrijdnummer'];
$thuis = $row['thuis'];
$uit = $row['uit'];
$score_thuis = $row['score_thuis'];
$score_uit = $row['score_uit'];
$tijd = cnv_tijd($time);
$datum = cnv_dat($date);
$count=mysql_num_rows($sql);
echo "<form method='post' name='form' action='".$_SERVER['PHP_SELF']."'>";
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'> </td></tr>";
}
echo "<tr><td colspan='10'> </td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table>
</form>";
if($_SERVER['REQUEST_METHOD'] == 'POST') {
for($i=0;$i<$count;$i++){
$id = $_POST['id'];
$score_thuis = mysql_real_escape_string($_POST['score_thuis']);
$score_uit = mysql_real_escape_string($_POST['score_uit']);
$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);
}
echo '<meta http-equiv="refresh" content="0;URL=?location=uitslagen" />';
}
echo "</div>";
?>
<?php
include ( "authorized.php" ) ;
include ( "../config/config.php" ) ;
echo "<div id='main_border'><table width='805' border='0'><tr class='blok2'><td>Uitslagen invoeren</td></tr></table><br />" ;
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>" ;
$id = $row [ 'id' ] ;
$team = $row [ 'team' ] ;
$date = $row [ 'datum' ] ;
$time = $row [ 'tijd' ] ;
$nummer = $row [ 'wedstrijdnummer' ] ;
$thuis = $row [ 'thuis' ] ;
$uit = $row [ 'uit' ] ;
$score_thuis = $row [ 'score_thuis' ] ;
$score_uit = $row [ 'score_uit' ] ;
$tijd = cnv_tijd( $time ) ;
$datum = cnv_dat( $date ) ;
echo "<form method='post' name='form' action='" . $_SERVER [ 'PHP_SELF' ] . "'>" ; 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'> </td></tr>" ;
}
echo "<tr><td colspan='10'> </td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table> </form>" ;
if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) {
for ( $i = 0 ; $i < $count ; $i ++ ) {
$id = $_POST [ 'id' ] ;
$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 ) ; }
echo '<meta http-equiv="refresh" content="0;URL=?location=uitslagen" />' ; }
?>
Er wordt echter nog niets ge-updated.
Het scherm wordt nu ook niet ge-refreshed
FrankL - 26/06/2011 12:27
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;)
Gezienus - 26/06/2011 16:03 (laatste wijziging 26/06/2011 17:14)
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?
Aar - 26/06/2011 16:27
PHP interesse
je metatag staat verkeerd geplaatst......
FrankL - 26/06/2011 16:43
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;)
Gezienus - 26/06/2011 17:14 (laatste wijziging 26/06/2011 17:17)
Lid
Wie kan mij dan vertellen hoe het wel moet?
FrankL - 26/06/2011 17:34
Lid
Zou je toevallig je database structuur/eventuele gegevens eruit kunnen posten hier, dan kan ik het even testen.
Gezienus - 26/06/2011 18:01
Lid
en hoe doe ik dat? ik heb eeb zip-file
FrankL - 26/06/2011 18:08
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
Gezienus - 26/06/2011 18:13
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?
FrankL - 26/06/2011 18:17 (laatste wijziging 26/06/2011 18:49)
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.
Gezienus - 29/06/2011 22:24
Lid
Heb je hier nog naar gekeken.
Weet iemand een oplossing?
FrankL - 30/06/2011 00:47
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
Gezienus - 04/07/2011 21:29
Lid
Iemand anders misschien nog een suggestie?
Wijnand - 06/07/2011 08:37
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 . "' />
Gezienus - 06/07/2011 20:53
Lid
Ik ben de draad volledig kwijt
Ik heb nu de volgende code:
<?php
include ("authorized.php");
include ("../config/config.php");
error_reporting(E_ALL);
ini_set('display_errors',1);
echo "<div id='main_border'>";
echo "<table width='805' border='0'><tr class='blok2'><td>Uitslagen invoeren</td></tr></table><br />";
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>";
$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);
while ($row = mysql_fetch_array($sql)) {
$id = $row['id'];
$team = $row['team'];
$date = $row['datum'];
$time = $row['tijd'];
$nummer = $row['wedstrijdnummer'];
$thuis = $row['thuis'];
$uit = $row['uit'];
$score_thuis[] = $row['score_thuis'];
$score_uit[] = $row['score_uit'];
$tijd = cnv_tijd($time);
$datum = cnv_dat($date);
$count=mysql_num_rows($sql);
echo "<form method='post' name='form'>";
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'> </td></tr></table>";
}
echo "<table><td colspan='10'> </td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table>
</form>";
if($_SERVER['REQUEST_METHOD'] == "POST") {
for ($i=0;$i<$count;$i++){
$score_thuis = mysql_real_escape_string($_POST['score_thuis']);
$score_uit = mysql_real_escape_string($_POST['score_uit']);
$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);
echo "$count";
echo "$id - ";
echo " score_thuis='".$score_thuis[$i]."', score_uit='".$score_uit[$i]."', id='".$id[$i]."';<br />";
}
//echo "<meta http-equiv='refresh' content='0;URL=index.php?location=uitslagen'/>";
}
echo "</div>";
?>
<?php
include ( "authorized.php" ) ;
include ( "../config/config.php" ) ;
echo "<div id='main_border'>" ; echo "<table width='805' border='0'><tr class='blok2'><td>Uitslagen invoeren</td></tr></table><br />" ;
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>" ;
$id = $row [ 'id' ] ;
$team = $row [ 'team' ] ;
$date = $row [ 'datum' ] ;
$time = $row [ 'tijd' ] ;
$nummer = $row [ 'wedstrijdnummer' ] ;
$thuis = $row [ 'thuis' ] ;
$uit = $row [ 'uit' ] ;
$score_thuis [ ] = $row [ 'score_thuis' ] ;
$score_uit [ ] = $row [ 'score_uit' ] ;
$tijd = cnv_tijd( $time ) ;
$datum = cnv_dat( $date ) ;
echo "<form method='post' name='form'>" ; 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'> </td></tr></table>" ; }
echo "<table><td colspan='10'> </td></tr><tr><td></td><td valign='top' colspan='9'><input type='Submit' value='Uitslagen toevoegen'></td></tr></table> </form>" ;
if ( $_SERVER [ 'REQUEST_METHOD' ] == "POST" ) {
for ( $i = 0 ; $i < $count ; $i ++ ) {
echo " score_thuis='" . $score_thuis [ $i ] . "', score_uit='" . $score_uit [ $i ] . "', id='" . $id [ $i ] . "';<br />" ; }
//echo "<meta http-equiv='refresh' content='0;URL=index.php?location=uitslagen'/>";
}
?>
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 !!!!
mwthomas - 07/07/2011 11:53
Lid
Zoals de foutmelding zegt: Je hebt als parameter een array ingegeven en geen string.
Wijnand - 07/07/2011 16:55
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....
Gezienus - 08/07/2011 12:09 (laatste wijziging 08/07/2011 14:30)
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?
if($_SERVER['REQUEST_METHOD'] == "POST") {
for ($i=0;$i<$count;$i++){
$score_thuis = $_POST['score_thuis'];
$score_uit = $_POST['score_uit'];
$id = $_POST['id'];
if (is_numeric($score_thuis));
if (is_numeric($score_uit)) ;
if (!empty($score_thuis));
if (!empty($score_uit));
//$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);
echo "$count - ";
echo " score_thuis='".$score_thuis[$i]."', score_uit='".$score_uit[$i]."', id='".$id[$i]."';<br />";
}
if ( $_SERVER [ 'REQUEST_METHOD' ] == "POST" ) {
for ( $i = 0 ; $i < $count ; $i ++ ) {
$score_thuis = $_POST [ 'score_thuis' ] ;
$score_uit = $_POST [ 'score_uit' ] ;
$id = $_POST [ 'id' ] ;
if ( ! empty ( $score_thuis ) ) ; //$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);
echo " score_thuis='" . $score_thuis [ $i ] . "', score_uit='" . $score_uit [ $i ] . "', id='" . $id [ $i ] . "';<br />" ; }
edit: Het werkt inmiddels
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.