Laat melding zien bij dubbele array value
Ik maak een array met waardes uit een formulier. Nou wil ik controleren of een waarde dubbel voor komt en dan het formulier nog eens laten zien. Er mogen namelijk geen dubbele waardes in voor komen.
Ik heb wat op internet gevonden alleen het vreemde is wanneer ik dit doe en ik heb 4, 4, 1, 1 dan ga ik weer terug naar het formulier. Maar met de waardes 4, 4, 4, 4 gaat het script verder.
Iemand idee?
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
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
<?php
// Als formulier al is ingevuld ga naar posities
if (isset($_POST['gotoposities'])) {
// Maak een array();
$arraypos = array();
foreach ($_POST as $naam => $pos) {
$arraypos[] = $pos;
// Check of er geen dubbele posities zijn ingevuld
if (isset($arraypos[$pos])) {
// Dubbele? Go to positie form
$positiemelding = "<div class='warning'>Dubbele posities ingevuld, probeer het opnieuw.</div>";
goto a;
break;
}
$SQLUpdatePositie = "UPDATE warstats SET positie='" . $pos . "'
WHERE warid='" . $_SESSION['warid'] . "'
AND gebruikersnaam='" . $naam . "'";
if ($conn->query($SQLUpdatePositie) === FALSE) {
echo "<div class='error'>MySQL Error 3!! GVD @#$!!!<br/>Raadpleeg een beheerder!!</div>";
exit;
}
}
echo "De war is gestart!!";
}
?>
// Als formulier al is ingevuld ga naar posities
if (isset($_POST['gotoposities'])) {
// Maak een array();
$arraypos = array();
foreach ($_POST as $naam => $pos) {
$arraypos[] = $pos;
// Check of er geen dubbele posities zijn ingevuld
if (isset($arraypos[$pos])) {
// Dubbele? Go to positie form
$positiemelding = "<div class='warning'>Dubbele posities ingevuld, probeer het opnieuw.</div>";
goto a;
break;
}
$SQLUpdatePositie = "UPDATE warstats SET positie='" . $pos . "'
WHERE warid='" . $_SESSION['warid'] . "'
AND gebruikersnaam='" . $naam . "'";
if ($conn->query($SQLUpdatePositie) === FALSE) {
echo "<div class='error'>MySQL Error 3!! GVD @#$!!!<br/>Raadpleeg een beheerder!!</div>";
exit;
}
}
echo "De war is gestart!!";
}
?>
Edit: Het lijkt wel alleen bij vier keer het hoogste getal te gebeuren.
Gewijzigd op 20/10/2015 21:14:23 door Danny von Gaal
if (isset($arraypos[$pos])) {
:/
kun je niet beter doen:
$arraypos[$pos] = true;
en dan
if (isset($arraypos[$pos])) {
?
Euh, en dan natuurlijk eerst controleren of deze NIET geset is, en dan pas toevoegen aan $arraypos misschien :s.
Gewijzigd op 20/10/2015 21:42:16 door Thomas van den Heuvel
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Als formulier al is ingevuld ga naar posities
if (isset($_POST['gotoposities']))
{
// om deze regel hieronder gaat het...
if($_POST !== array_unique($_POST)
{
$positiemelding = "<div class='warning'>Dubbele posities ingevuld, probeer het opnieuw.</div>";
goto a; // is dit handig in PHP?
break;
}
// updaten
$SQLUpdatePositie = "UPDATE warstats SET positie='" . $pos . "'
WHERE warid='" . $_SESSION['warid'] . "'
AND gebruikersnaam='" . $naam . "'";
if ($conn->query($SQLUpdatePositie) === FALSE) {
echo "<div class='error'>MySQL Error 3!! @#$!!!<br/>Raadpleeg een beheerder!!</div>";
exit;
}
echo "De war is gestart!!";
}
?>
// Als formulier al is ingevuld ga naar posities
if (isset($_POST['gotoposities']))
{
// om deze regel hieronder gaat het...
if($_POST !== array_unique($_POST)
{
$positiemelding = "<div class='warning'>Dubbele posities ingevuld, probeer het opnieuw.</div>";
goto a; // is dit handig in PHP?
break;
}
// updaten
$SQLUpdatePositie = "UPDATE warstats SET positie='" . $pos . "'
WHERE warid='" . $_SESSION['warid'] . "'
AND gebruikersnaam='" . $naam . "'";
if ($conn->query($SQLUpdatePositie) === FALSE) {
echo "<div class='error'>MySQL Error 3!! @#$!!!<br/>Raadpleeg een beheerder!!</div>";
exit;
}
echo "De war is gestart!!";
}
?>
array_unique op $_POST lijkt mij een beetje link - als er nu verschillende velden zijn met een verschillende betekenis, maar met dezelfde waarde worden deze zonder pardon gestript.
@Danny
goto a; // is dit handig in PHP?
Gebruik dit alsjeblieft nooit meer (op deze manier) :).
Als je dan toch array_unique wilt gebruiken om te controleren of er dubbele waarden in zitten, zorg dan dat de te controleren waarden in één aparte index in $_POST zitten. Dit lijkt mij sowieso wel handig.
Als je zoiets hebt:
<input type="whatever" name="waarden[]" />
<input type="whatever" name="waarden[]" />
<input type="whatever" name="waarden[]" />
Bevat na submitten $_POST['waarden'] een array.
De vraag is dan nog steeds: is een gestripte invoer met unieke waarden dan wel goed, of moeten alle "waarden[]" velden echt een unieke waarde bevatten? In dat geval kun je nog steeds mijn eerdere strategie toepassen: bouw het array, kom je iets tegen wat je al had dan is het mis:
Code (php)
(daarbij moet je dus ook een controle uitvoeren om te kijken of de waarden in $_POST['waarden'] ook echt bestaan uit positieve gehele getallen)
http://php.net/manual/en/control-structures.goto.php en het werkt goed!
Ik was ook al de array_unique functie tegen gekomen maar er mogen geen waardes weggehaald worden omdat deze niet unique zijn. Het script moet gewoon gestopt worden en er moet een melding worden getoond. Dan kan het formulier nog een keer worden ingevuld.
En thomas bij jou laatste stukje is bij mij alleen "$arraypos[] = $pos;" weggehaald? Maar dan werkt het helaas nog niet.
Edit: Mijn code werkt goed alleen de waardes bevatten getallen. En dat is 1 t/m het aantal leden. En wanneer de waardes allemaal het hoogste getal bevatten dan wordt dit wel in de db geplaatst. Maar wanneer ik allemaal enen of tweeën kies dan niet.
Wat is er mis met goto? Ik heb dit letterlijk van de php site af Ik was ook al de array_unique functie tegen gekomen maar er mogen geen waardes weggehaald worden omdat deze niet unique zijn. Het script moet gewoon gestopt worden en er moet een melding worden getoond. Dan kan het formulier nog een keer worden ingevuld.
En thomas bij jou laatste stukje is bij mij alleen "$arraypos[] = $pos;" weggehaald? Maar dan werkt het helaas nog niet.
Edit: Mijn code werkt goed alleen de waardes bevatten getallen. En dat is 1 t/m het aantal leden. En wanneer de waardes allemaal het hoogste getal bevatten dan wordt dit wel in de db geplaatst. Maar wanneer ik allemaal enen of tweeën kies dan niet.
Gewijzigd op 21/10/2015 18:14:28 door Danny von Gaal
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$result = array_intersect($array1, $array2)
if(count($result) == 0) {
// er zijn geen overeenkomsten tussen de 2 arrays.
}
$result = array_intersect($array1, $array2)
if(count($result) == 0) {
// er zijn geen overeenkomsten tussen de 2 arrays.
}