$_POST haalt hij niet meer op
Testen kun je hier:
http://dj-jeremy.nl/wk/raden.php
hier is de code:
Code (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
session_start();
include 'header.php';
include 'config.php';
echo "<div id=content>";
echo "<div id=vak>";
if(isset($_POST['submit']))
{
$sesId = mysql_real_escape_string($_SESSION['userid']);
$scoreThuis = $_POST['scorethuis'];
$scoreUit = $_POST['scoreuit'];
echo $sesId.$scoreThuis.$scoreUit;
$query = "INSERT INTO raden (user_id, raden1, raden2)
VALUES ('$sesId', '$scoreThuis', '$scoreUit')";
$result = mysql_query($query)
or die(mysql_error());
echo "Uw score is opgeslagen!";
}
else
{
$query = "SELECT t1.id, t1.wedstrijd1, t1.wedstrijd2
FROM wedstrijden AS t1";
$result = mysql_query($query)
or die(mysql_error());
echo "<table>";
echo "<form action=raden.php method=post>";
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>".$row['wedstrijd1']."</td><td> <input type=text name=scorethuis style=width:50px;></td><td> - </td><td><input type=text name=scoreuit style=width:50px;> </td><td>".$row['wedstrijd2']."</td></tr>";
}
echo "<tr><td colspan=4 align=right><input type=submit name=submit value=Verzenden></td></tr>";
echo "</form>";
echo "</table>";
}
echo "</div>";
echo "</div>";
include 'footer.php';
?>
session_start();
include 'header.php';
include 'config.php';
echo "<div id=content>";
echo "<div id=vak>";
if(isset($_POST['submit']))
{
$sesId = mysql_real_escape_string($_SESSION['userid']);
$scoreThuis = $_POST['scorethuis'];
$scoreUit = $_POST['scoreuit'];
echo $sesId.$scoreThuis.$scoreUit;
$query = "INSERT INTO raden (user_id, raden1, raden2)
VALUES ('$sesId', '$scoreThuis', '$scoreUit')";
$result = mysql_query($query)
or die(mysql_error());
echo "Uw score is opgeslagen!";
}
else
{
$query = "SELECT t1.id, t1.wedstrijd1, t1.wedstrijd2
FROM wedstrijden AS t1";
$result = mysql_query($query)
or die(mysql_error());
echo "<table>";
echo "<form action=raden.php method=post>";
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>".$row['wedstrijd1']."</td><td> <input type=text name=scorethuis style=width:50px;></td><td> - </td><td><input type=text name=scoreuit style=width:50px;> </td><td>".$row['wedstrijd2']."</td></tr>";
}
echo "<tr><td colspan=4 align=right><input type=submit name=submit value=Verzenden></td></tr>";
echo "</form>";
echo "</table>";
}
echo "</div>";
echo "</div>";
include 'footer.php';
?>
De namen van de input velden zijn gelijk. Geef de thuis en uit velden andere namen (bijvoorbeeld thuis1/thuis2, uit1/uit2) dan zou het wel moeten lukken.
Code (php)
1
echo "<tr><td>".$row['wedstrijd1']."</td><td> <input type=text name=thuis1 style=width:50px;></td><td> - </td><td><input type=text name=thuis2 style=width:50px;> </td><td>".$row['wedstrijd2']."</td></tr>";
Dus jij zegt dat ik die in thuis1 moet veranderen en die andere in thuis2 ofzo?? of hoe anders?
eerste wedstrijd:
<input type="text" style="width:50px;" name="thuis1">
<input type="text" style="width:50px;" name="thuis2">
tweede wedstrijd
<input type="text" style="width:50px;" name="thuis1">
input type="text" style="width:50px;" name="thuis2">
de twee velden hebben dus dezelfde naam en daarmee krijg je in je $_POST array maar twee element te zien (thuis1 en thuis2) en niet vier zoals je zou willen (lijkt mij).
Zorg dus dat alle vier de velden unieke namen hebben dan zou je ze alle vier ook in je POST array moeten krijgen.
1) if(isset($_POST['submit'])) {
Dit is niet een goede manier, niet elke browser gaat er goed mee om.
Gebruik liever if($_SERVER['REQUEST_METHOD']=="POST") {
2) Overschrijf geen variabelen, je kan prima je $_POST-variabelen (met beveiliging van mysql_real_escape_string()) gebruiken in je query.
3) Pas goede foutafhandeling toe. Waarom zou je een script direct willen laten stoppen? Stel dat er een functie komt die de laadtijd meet, of de statistieken verwerkt. Die zal dan ook niet worden geladen, en je zit tevens met corrupte HTML, wat een gebruiker ook niet mooi zou vinden. Dus gebruik gewoon bij queries netjes een if-else afhandeling, en verban die die() naar het kerkhof....
4) variabelen horen buiten quotes.
Zie je dat je code een stuk beter leesbaarder is, en dat je direct ziet waar er variabelen staan? Tevens is dit ook net weer een tikkeltje sneller.
Ik hoop dat je nu zeker wat met deze tips gaat doen. Je maakt je eigen script een hiermee een stuk efficiënter en logischer, waar je zeker veel profijt van zal hebben.
Print deze post anders eens uit, en hang het boven je monitor, om je er aan te herinneren, als je anders gewend bent.
Gewijzigd op 08/12/2011 11:43:27 door - Ariën -
Ja, -aar- dat klopt. daar moet ik op letten. Heb je ook nog een antwoord op mijn probleem?
Dus als je je input een naam "thuis1" geeft, dan komt dat in de $_POST te staan als $_POST['thuis1']. etc etc etc
En dan met de verder opmerkingen van Aar moet het wel goed kunnen komen....
Ja, maar hoe geef ik die 2e wedstrijd dan een andere input??
Ik volg je even niet meer... dit is niet dezelfde vraag als in het begin, dus leg uit.
Ik heb in mijn database wedstrijden staan, en die worden dus steeds meer. Nu wil ik die uitlezen op het scherm, en dan kunnen mensen raden wat het word. Maar de inputs krijgen dus allemaal één name, en dan haal ik dus inderdaad niet alle dingen op. Dus moeten ze allemaal een andere name krijgen, maar hoe ga ik doe dat doen, want de wedstrijden zitten in een while lus.
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$i=0;
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>".$row['wedstrijd1']."</td><td> <input type=text name=scorethuis".$i." style=width:50px;></td><td> - </td><td><input type=text name=scoreuit".$i." style=width:50px;> </td><td>".$row['wedstrijd2']."</td></tr>";
$i++;
}
?>
$i=0;
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>".$row['wedstrijd1']."</td><td> <input type=text name=scorethuis".$i." style=width:50px;></td><td> - </td><td><input type=text name=scoreuit".$i." style=width:50px;> </td><td>".$row['wedstrijd2']."</td></tr>";
$i++;
}
?>
Ik begrijp alleen niet helemaal wat $row['wedstrijd1'] en $row['wedstrijd2'] erin doen, maar dat is in dit geval puur copy-paste van mij natuurlijk, stond al in jouw code.
Sorry, maakte een foutje en toch nog een bij het verbeteren. Bovenstaande zou volgens mij redelijk het goede moeten zijn...
Gewijzigd op 08/12/2011 12:08:34 door Erwin H
dat zijn de wedstrijden die uit de database komen.
Alleen nu is het probleem, hoe voeg ik alles toe dan? stel voor ik vul alle velden in, hoe zet ik dan in één keer alle velden in de database?
Toevoeging op 08/12/2011 12:10:56:
En btw, hij doet het nog steeds niet, want ik moet ze ook ophalen, en hoe gebeurt dat dan?
Want ik heb nu gewoon dit:
$scoreThuis = $_POST['scorethuis1'];
$scoreUit = $_POST['scoreuit1'];
Code (php)
1
2
3
4
2
3
4
"INSERT INTO raden (user_id, raden1, raden2)
VALUES ('".$sesId."', '".$scoreThuis[0]."', '".$scoreUit[0]."'),
('".$sesId."', '".$scoreThuis[1]."', '".$scoreUit[1]."'),
('".$sesId."', '".$scoreThuis[2]."', '".$scoreUit[2]."')"
VALUES ('".$sesId."', '".$scoreThuis[0]."', '".$scoreUit[0]."'),
('".$sesId."', '".$scoreThuis[1]."', '".$scoreUit[1]."'),
('".$sesId."', '".$scoreThuis[2]."', '".$scoreUit[2]."')"
Zoals je ziet heb ik al een array gebruikt voor de waardes van de wedstrijden. Nu kan je vast zelf wel met enig puzzelen die arrays vullen en de query aanmaken. Zelfs als je vooraf niet weet hoeveel wedstrijden er zijn ingevuld...
Het spijt me maar ik snap het niet.. Dus ik kan nu eigenlijk nog niet precies verder. heeft u niet msn of iets dergelijks? Pm me maar please