Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP/JS] Alert melding met vertraagde inhoud

Pagina: 1
Acties:

  • computer1_up
  • Registratie: December 2012
  • Laatst online: 14-10 20:42
Momenteel ben ik bezig met het leren van Javascript, HTML en PHP (o.a. via stage) en mijn stage begeleider had me de opdracht gegeven om een script te maken waarin ik twee getallen, ingevoerd in een form, bij elkaar optel, die weer in een form wordt weergegeven met een submit knop die het uiteindelijke getal echo't naar gewone text buiten een form.

Het script wat ik hiervoor gemaakt heb, werkt niet helemaal lekker. Het moet namelijk een melding geven in de vorm van een Alert als één van de twee bovenste velden of beide niet zijn ingevuld. De Alert bevat dan een door mij geschreven melding. Echter komt de passende melding niet op tijd. Na een keer op de submit knop te hebben gedrukt, komt de foutmelding die bij de vorige staat van de pagina hoorde. Voorbeeld:
David = NULL
David2 = NULL
Foutmelding moet zijn "Vul beide velden in!"
Foutmelding geeft geen text weer.
Pagina wordt niet herladen.
David=1
David2=NULL
Foutmelding moet zijn: "David=1, David2 is nog leeg!"
Foutmelding die wordt weergegeven is "Vul beide velden in!"
En na de volgende keer iets invullen, komt de foutmelding die die nu had moeten weergeven.

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
 
<?php

if (empty($_POST)){
}
else{
    
$dDavid=$_POST["David"];
$cDavid=$_POST["David2"];
}

if ($_POST["test"] == '1') {
if (empty($dDavid) && empty($cDavid)){
    //echo "Vul beide velden in!";
    $aError = "Vul beide velden in!";
    /**echo "<script type='text/javascript'>
    var error = '$aError';
    </script>";**/
}

else if (empty($dDavid)){
    //echo "David2=$cDavid, David is nog leeg!";
    $aError = "David2=$cDavid, David is nog leeg!";
    /**echo "<script type='text/javascript'>
    var error = '$aError';
    </script>";**/
}
else if (empty($cDavid)){
    //echo "David=$dDavid, David2 is nog leeg!";
    $aError = "David=$dDavid, David2 is nog leeg!";
    /**echo "<script type='text/javascript'>
    var error = '$aError';
    </script>";**/
}
else if ($dDavid != NULL && $cDavid != NULL) { 
    $aError = "NULL";
    $eDavid = $cDavid + $dDavid;
    
}
}

?>
<html>
<script type="text/javascript">


var error = "<?php echo $aError ?>";

function myFunction() {
    if (error != "NULL"){
    alert(error);
    };
};

</script>
<body>


<form action="form.php" method="post" onclick="myFunction();">

David:      <input type="text" name="David" id="David">
<br>
David2:     <input type="text" name="David2" id="David2">
<br>
<input type="hidden" name="test" value="1">
<input type="submit" name="submit2" value="Submit" id="1000">

</form>
<br>
<br>
<br>
<br>
<br>
<br>

<form action="form.php" method="post">
<input type="text" name='var' value="<?php echo $eDavid; ?>">
<!--<input type="hidden" name="test2" value="1">-->
<input type="hidden" name="test2" value="1">
<input type="submit" name="submit" value="Submit">
</form>

</body>

</html>


Let niet op stijlfouten, ik ben nog in de leer :+

Did you try turning it off and on again?


  • ZpAz
  • Registratie: September 2005
  • Laatst online: 08:27
Als je via JS wilt controleren moet je eerst op de pagina zelf in JS kijken of de velden leeg zijn. En dan kan je de alert weergeven. Daar heb je helemaal nog geen PHP voor nodig.

Wanneer je het dan wil verwerken op de server moet je het uiteraard eerst nog controleren op de server, maar daar hoef je geen javascript alert te geven als het niet goed gaat.

Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF


  • computer1_up
  • Registratie: December 2012
  • Laatst online: 14-10 20:42
Oke, dan ga ik daar eens wat mee knoeien.
JavaScript:
1
 if (document.getElementById("David").value == "" || document.getElementById("David2").value == "" || document.getElementById("David").value == "" && document.getElementById("David2").value == "") { 


Iets wat hier op lijkt?

Did you try turning it off and on again?


  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 00:07

Onbekend

...

Je kunt volgens mij beter alles in JavaScript maken. Hierdoor heb je minder dataverkeer en serverbelasting, maar misschien was het juist de opdracht om dit via php te laten verlopen.

Verder raad ik aan om als je || en && in een if-statement gebruikt, altijd haakjes te gebruiken tussen de verschillende operatoren. Dat leest een if-statement eenvoudiger is en is minder foutgevoelig.

Voor de controle van de invoer zou ik de functie isFinite() gebruiken.

Speel ook Balls Connect en Repeat


  • computer1_up
  • Registratie: December 2012
  • Laatst online: 14-10 20:42
Wat betreft het maken van het script in JS/PHP, het is de bedoeling dat ik ze leer en het hoeft nog niet optimaal te zijn, als het maar werkt. (Ik zit op het speciaal onderwijs waar een stage bij hoort, nog niet op een echte opleiding. ) Alles wat ik van code en servers tot nu toe heb geleerd, heb ik via stage gedaan.

Verder bedankt voor de tips!

[ Voor 9% gewijzigd door computer1_up op 03-08-2014 17:35 ]

Did you try turning it off and on again?


  • computer1_up
  • Registratie: December 2012
  • Laatst online: 14-10 20:42
Zowel document.getElementByID() en isFinite hebben me nog niet geholpen. Eerstgenoemde kan geen value van null uitlezen en aan een var koppelen, tweede werkt in mijn situatie niet heel handig, misschien doe ik iets fout.

Did you try turning it off and on again?


  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik zou je sowieso aanraden om de namen voor variabelen te hernoemen naar iets waar je iets aan hebt. Getal1 of Invoer1 is een stuk leesbaarder dan David en David2 :)

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 02:56

Tribits

Onkruid vergaat niet

Je roept nu "myFunction" aan op het moment dat er op je invoer formulier wordt geklikt. Ik neem aan dat je de melding, voor zover aanwezig, wilt laten zien zodra de pagina geladen is, dus iets als <body onLoad="MyFunction();"> doet waarschijnlijk meer wat je in gedachten hebt.

Bedenk dus goed wanneer je iets van de server terugkrijgt en wanneer je dat via Javascript op het scherm kan en wil zetten.

Master of questionable victories and sheer glorious defeats


  • computer1_up
  • Registratie: December 2012
  • Laatst online: 14-10 20:42
Body onLoad zat ik zelf ook al over na te denken. Het probleem hiermee is, dat de code herhaald moet worden totdat er op de submit knop wordt gedrukt. Tijdens het proberen hiermee kwam ik regelmatig in ee infinite loop terecht.

Wat de variabelen betreft: bedankt voor de tip!

Waar ikzelf aan zit te denken, is om een loop te maken waarin de variabelen worden gedefinieerd, zodat de variabelen altijd up to date zijn. En daarna met die variabelen de functie te laden.

[ Voor 25% gewijzigd door computer1_up op 05-08-2014 15:36 ]

Did you try turning it off and on again?


  • computer1_up
  • Registratie: December 2012
  • Laatst online: 14-10 20:42
Probleem is opgelost. De declaratie van de variabelen had niet gemoeten met getElementByID, maar met document.forms[""][""].

Did you try turning it off and on again?

Pagina: 1