Laat melding zien bij dubbele array value

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Danny von Gaal

Danny von Gaal

20/10/2015 21:09:44
Quote Anchor link
Hallo Mensen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!!";
    
}

?>



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
 
PHP hulp

PHP hulp

15/01/2025 10:46:22
 
Thomas van den Heuvel

Thomas van den Heuvel

20/10/2015 21:40:45
Quote Anchor link
$arraypos[] = $pos;

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
 
Eddy E

Eddy E

20/10/2015 22:28:10
Quote Anchor link
Kan veel korter:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!!";
}

?>
 
Thomas van den Heuvel

Thomas van den Heuvel

21/10/2015 13:42:39
Quote Anchor link
@Eddy E

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
// aanname: de waarden in $_POST['waarden'] zijn alle ingevuld en zijn positieve, gehele getallen
$waarden = array()
foreach ($_POST['waarden'] as $val) {
    if (isset($waarden[$val])) {
        // foutafhandeling hier...
    } else {
        $waarden[$val] = true;
    }
}

?>

(daarbij moet je dus ook een controle uitvoeren om te kijken of de waarden in $_POST['waarden'] ook echt bestaan uit positieve gehele getallen)
 
Danny von Gaal

Danny von Gaal

21/10/2015 14:45:04
Quote Anchor link
Wat is er mis met goto? Ik heb dit letterlijk van de php site af 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.
Gewijzigd op 21/10/2015 18:14:28 door Danny von Gaal
 
Dennis Snijder

Dennis Snijder

23/10/2015 02:43:59
Quote Anchor link
Hiervoor zou je simpel weg de functie array_intersect kunnen gebruiken

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

$result
= array_intersect($array1, $array2)

if(count($result) == 0) {
// er zijn geen overeenkomsten tussen de 2 arrays.
}
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.