formulier met countdown en Submit na einde, werkt niet

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan te Pas

Jan te Pas

03/01/2018 20:00:22
Quote Anchor link
Ik heb een pagina gemaakt waarmee ik iemand de mogelijkheid wil geven om een artikel op zijn site uitgesteld te plaatsen. Timer werkt. Maar Submit werkt niet. Het is geen Wordpressite en ook geen cronjob op server.

De code:
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
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!DOCTYPE html>
<HEAD>
<TITLE>Count Down Timer</TITLE>
<style>
input[type=submit]  {
    padding:5px 15px;
    background:red;
    color:#ffffff;
    border:0 none;
    cursor:pointer;
    -webkit-border-radius: 5px;
    border-radius: 5px;
}

input[type=text] {
     background:aliceblue;
     color:green;
     font-weight: bold;
}

textarea {
     background:aliceblue;
     color:green;
     font-weight: bold;
}

h1 {
     color:red;
}
</style>
<SCRIPT>
var running = false
var endTime = null
var timerID = null
function startTimer(duration) {
    running = true
    now = new Date()
    now = now.getTime()
    // change last multiple for the number of minutes
    endTime = now + (1000 * 60 * duration)
    showCountDown()
    document.getElementById("submit").disabled = true
}

function showCountDown() {
    var now = new Date()
    now = now.getTime()
    if (endTime - now <= 0) {
        stopTimer('Einde')
        formSubmit()
        //  of alert("Time is up.  Put down your pencils.")
    } else {
        var delta = new Date(endTime - now)
        var theMin = delta.getMinutes()
        var theSec = delta.getSeconds()
        var theHour = delta.getHours() -1
        var theTime = ((theMin < 10) ? "0" : "") + theMin
        theTime +=  ((theSec < 10) ? ":0" : ":") + theSec
        document.forms[0].timerDisplay.value = "resttijd: "+ ((theHour<1) ? "0":theHour) + ":" +theTime
        if (running) {
            timerID = setTimeout("showCountDown()",1000)
        }
    }
}

function stopTimer(status) {
    clearTimeout(timerID)
    running = false
    document.forms[0].timerDisplay.value = status
    document.getElementById("submit").disabled = false
}

function formSubmit() {
    //activate submit button
    document.getElementById("submit").disabled = false;
    //and submit form
    document.getElementById("MyForm").submit();
}
</SCRIPT>
</HEAD>
<BODY>
<center>
<h2>Artikel plaatsen</h2>
</center>
<FORM name="MyForm" id=MyForm" action="PlaatsArtikel.php" onkeypress="return event.keyCode != 13;">
      <center>
      Kopzin<br>
      <INPUT TYPE="text" NAME="KopArtikel" PLACEHOLDER="Kopzin" SIZE="100" required ><br><br>
      Tekst<br>
      <TEXTAREA ROWS="8" COLS="100" NAME="BodyArtikel" PLACEHOLDER="Tekst" required></TEXTAREA>
     <br><hr width="65%">
     Klik "verstuur nu" of klik op een van onderstaande knoppen voor uitgesteld verzenden.<br>
     <INPUT TYPE="button" NAME="startTime" VALUE="1 minuut" onClick="startTimer(1)">
     <INPUT TYPE="button" NAME="startTime" VALUE="1 uur" onClick="startTimer(60)">
     <INPUT TYPE="button" NAME="startTime" VALUE="3 uur" onClick="startTimer(180)">
     <INPUT TYPE="button" NAME="startTime" VALUE="6 uur" onClick="startTimer(360)">
     <INPUT TYPE="button" NAME="startTime" VALUE="9 uur" onClick="startTimer(540)">    
     <INPUT TYPE="button" NAME="startTime" VALUE="12 uur" onClick="startTimer(720)">    
     <br><br>
     <INPUT TYPE="button" NAME="clearTime" VALUE="Stop Timer" onClick="stopTimer('Gestopt!')" style="color:red;">
     <INPUT TYPE="text" NAME="timerDisplay" VALUE="00:00" Size="17">
     <br><br><hr width="65%"><center>
     <INPUT TYPE="submit" id="submit" NAME="submit" Value="Verstuur Nu" >
     </form>
</FORM>
</BODY>
</HTML>


Graag jullie hulp.
 
PHP hulp

PHP hulp

19/01/2022 15:05:06
 
- Ariën -
Beheerder

- Ariën -

03/01/2018 20:15:47
Quote Anchor link
Een artikel staat op de server, neem ik aan, en dan neem ik meteen aan dat dit in een database staat?
Dan is het juist de bedoeling dat je dit server-side moet regelen.

De timer die dan bepaalt of de review mag worden bekeken staat dan in de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT id,title,content,date_posted FROM reviews WHERE id = '42' AND date_posted <= NOW()
 
Jan te Pas

Jan te Pas

03/01/2018 20:43:08
Quote Anchor link
Hoi Ariën, hij heeft helemaal niets. De artikelen worden live geplaatst. Dus ik dacht dan aan de browserkant eea uit te stellen. Uiteraard moet hij de computer aan laten staan, om te plaatsen. Plaatsing op server is direct vanaf zijn huidige formulier. Daarom had ik dit bedacht.
 
- Ariën -
Beheerder

- Ariën -

03/01/2018 20:47:13
Quote Anchor link
JavaScript is client-side en wordt de computer van de bezoeker uitgevoerd. Google en andere bots kunnen je review dan voortijdig indexeren, bezoekers kunnen je review voortijdig lezen. met andere woorden: met jouw optie bereik je weinig.

De vraag is nog steeds: Hoe plaatst hij zijn artikelen dan online, en waar slaat hij die dan op?
Gewijzigd op 03/01/2018 20:47:22 door - Ariën -
 
Jan te Pas

Jan te Pas

03/01/2018 20:50:29
Quote Anchor link
Het zijn allemaal tekstbestanden. Het laatste bestand heet “nws-artikel.txt” en dat wordt door php op de pagina getoond. En wat er niet is, wordt dus niet geïndexeerd. Een nieuw artikel wordt gewoon over de oude geschreven. Erg simpel. Maar voor hem werkt het.
 
- Ariën -
Beheerder

- Ariën -

03/01/2018 20:51:59
Quote Anchor link
Dan kan je beter op de php-pagina de beveiliging inbouwen. Ik neem aan dat er ergens een datum wordt opgeslagen, anders bereik je nog niks.

Met een database werkt het wel stukken makkelijker. Vooral al je extra data wilt opslaan, of dingen wilt koppelen. Als je het simpel wilt doen zou WordPress ook prima voldoen.
Gewijzigd op 03/01/2018 20:54:39 door - Ariën -
 
Jan te Pas

Jan te Pas

03/01/2018 20:55:26
Quote Anchor link
Ik bedacht dit formulier waar hij dus de inhoud kan invoeren. De timer aanklikken en vervolgens wordt door de browser het artikel, formulier geplaatst. Zo simpel mogelijk. Het zou dus lukken als het formulier na de countdown wordt gesumbitted. Een php-pagina wordt, uiteraard beveiligd, aangeroepen en die plaatst dan het artikel. Maar wellicht te simpel bedacht door mij.
 
- Ariën -
Beheerder

- Ariën -

03/01/2018 20:58:28
Quote Anchor link
Dus je moet constant je PC aan hebben staan voor jouw situatie, begrijp ik.
Niet echt handig. Stel je voor dat deze uitvalt, er een stroomstoring is of heel simpel je browser opeens wordt afgesloten. Dan kan je lang wachten totdat die online komt te staan.

De beste oplossing is om het artikel gewoon online te zetten, maar met een publicatiedatum. De server bepaald dan of iemand hem wel of niet mag bekijken.

Je kan dan zelfs tijdens vakanties of tijdens je afwezigheid een artikel inplannen.

Waarom gebruik je geen Wordpress? Is in een handomdraai geinstalleerd, en je kan ook gepland berichten uitvoeren.
Gewijzigd op 03/01/2018 21:00:14 door - Ariën -
 
Jan te Pas

Jan te Pas

03/01/2018 21:00:20
Quote Anchor link
Dat moet zijn hele site overgezet gaan worden. Dus had ik deze tussenoplossing bedacht. Wellicht te simpel. Nu kan ik niets verder doen voor hem.
 
- Ariën -
Beheerder

- Ariën -

03/01/2018 21:02:11
Quote Anchor link
Geen idee om hoeveel artikelen het gaat. Maar je kan het vast en zeker zelf geautomatiseerd in Wordpress opslaan. Vooral gezien het feit dat er simpel gezien alleen maar textbestanden worden gebruikt.

Als ik hier lees zie ik al heel veel mogelijkheden:
https://codex.wordpress.org/Importing_Content#Importing_from_a_Site_of_Static_Pages

En deze addon, lijkt mij ook waardevol: https://wordpress.org/plugins/import-html-pages/
Gewijzigd op 03/01/2018 21:04:02 door - Ariën -
 
Jan te Pas

Jan te Pas

03/01/2018 21:03:39
Quote Anchor link
Ik had voorgesteld om over te stappen op Wordpress. Maar wil hij nog niet. Dank voor jouw advies in deze.
Gewijzigd op 03/01/2018 21:04:16 door Jan te Pas
 
- Ariën -
Beheerder

- Ariën -

03/01/2018 21:06:09
Quote Anchor link
Wie weet stapt hij later wel op een CMS over.
Graag gedaan!
Gewijzigd op 03/01/2018 21:06:24 door - Ariën -
 
Jan te Pas

Jan te Pas

04/01/2018 08:41:39
Quote Anchor link
Hi Ariën, ik heb wel een oplossing gevonden. Door een ding aan te passen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
function formSubmit() {
    //activate submit button
    document.getElementById("submit").disabled = false;
    //and submit form
    document.getElementById("submit").click();
}


De click drukt de Submit in. Kleine aanpassing. Neemt niet weg dat de hele oplossing een workaround is voor zijn probleem. Nogmaals dank.
 
- Ariën -
Beheerder

- Ariën -

04/01/2018 08:54:34
Quote Anchor link
Het blijft gewoon niet handig om je browser open te houden om iets te plaatsen. Zorg liever voor een oplossing dat je de publicatiedatum opslaat en serverside controleert.

Je kan deze in je .txt bestanden opslaan.
Of gebruik XML voor een betere structuur als je dergelijke metadata wilt opslaan. Hoewel een database nog verstandiger is.
Gewijzigd op 04/01/2018 08:54:56 door - Ariën -
 
Jan te Pas

Jan te Pas

04/01/2018 12:50:27
Quote Anchor link
Ik ga druk uitoefenen om het systeem ‘eindelijk’ over te zetten. Groet
 
Thomas van den Heuvel

Thomas van den Heuvel

04/01/2018 16:08:22
Quote Anchor link
En als iemand over een week iets wil publiceren, moet 'ie dan een week zijn PC aan laten staan?

Ik denk dat het handiger is als je inderdaad het moment van schrijven en het moment van publiceren ontkoppelt. Dit kun je heel eenvoudig doen door artikelen een status te geven en/of een publicatiedatum op grond waarvan je bepaalt of een artikel getoond moet worden of niet.

Vraag ik mij opnieuw af: waarom de hang naar werken met bestanden? Je bent ondertussen op een niveau bezig waarin je naar wat intelligentere automatisering moet gaan kijken dan -excusez le mot- het priegelen met bestanden. Dit werkt op een gegeven moment meer tegen dan mee, vooral wanneer je met (nu wellicht nog kleine, maar op den duur groeiende) collecties gestructureerde data werkt.

En vooral als je op deze collectie data allerlei vragen gaat afvuren waarbij je moet kunnen rekenen, en de data moet kunnen filteren, sorteren en manipuleren. Stel dat dadelijk alle artikelen in een (of meer) bestand(en) zitten. Stel vervolgens dat je verschillende auteurs hebt. Hoe trek je dan alle artikelen uit zo'n (of meerdere) bestand(en) als je geïnteresseerd bent in alle artikelen van de auteur "Henk" die dit jaar geschreven zijn? Dat is een hels karwei om dat uit een ongestructureerd bestand te trekken. En deze vragen zullen op den duur komen. Voor een backend waarin je deze data beheert, of een rapport waarin je dit soort statistieken verzamelt. Dit is een haast ondoenlijke klus als de data waarop je deze vraagstukken wilt loslaten totaal ongestructureerd is. In een database is dit anders, dan komt het ophoesten van al deze informatie neer op een query als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT *
FROM articles
WHERE author = 'Henk'
AND YEAR(publish_date) = YEAR()
AND published = 1
(NB dit is een voorbeeld, en daarom versimpeld)

Ik bedoel, dat lijkt mij simpeler dan bestanden uitpakken, doorploeteren, resultaten verzamelen et cetera.

Dus: wat is de reden dat je niet van het hulpmiddel "database" gebruik maakt? Heb je hier geen ervaring mee? (Gewoon beginnen!) Ondersteunt je webhost wel PHP maar niet het gebruik van databases? (Wie doet dat nog tegenwoordig, tijd om over te stappen?). Een andere reden? (Ik hoor het graag).

Op het moment dat je een artikelsysteem (of liever gezegd, een soort workflow) aan het bouwen bent kom je er eigenlijk niet meer omheen dat je van een soort van DB gebruikt. Het gebruik van platte bestanden schiet dan gewoon tekort.
Gewijzigd op 04/01/2018 16:11:21 door Thomas van den Heuvel
 
Jan te Pas

Jan te Pas

04/01/2018 22:11:15
Quote Anchor link
Hoi Thomas, dank voor jouw stuk. Ik ga er helemaal in mee. Echter mijn kennis wil (nog) niet veranderen. Dit wordt het laatste dat ik voor hem doe op het oude platform van hem. Liever goed dan houtje touwtje.... ik werk liever database gestuurd omdat ik in tabellen het denkmodel kan vastleggen. Dank.
 



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.