Cronjob script
Nu wil ik graag dat er iedere eerste van de maand een geldbedrag wordt gestort met omschrijving.
-Het begroting_bedrag staat in de tabel "begroting" en hoort bij een begroting_id.
Dus dat bedrag moet erin gezet worden.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
include("../budget/inloggen.php");
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
$uitgave_naam = 'Storting';
$uitgave_datum = 'NOW()';
$uitgave_tekst = 'Maandelijkse storting';
$uitgave_bedrag = 'SELECT begroting_bedrag FROM begroting WHERE begroting_id = '.$begroting_id.' AND budget_id = 2';
$query='INSERT INTO uitgaven (uitgave_naam,uitgave_datum,uitgave_tekst,uitgave_bedrag)
VALUES ('$uitgave_naam','$uitgave_datum','$uitgave_tekst','$uitgave_bedrag') WHERE begroting_id = '.$begroting_id.'';
$result=mysql_query($query) or die ('Het is niet gelukt om de gegevens in de database te zetten');
?>
include("../budget/inloggen.php");
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
$uitgave_naam = 'Storting';
$uitgave_datum = 'NOW()';
$uitgave_tekst = 'Maandelijkse storting';
$uitgave_bedrag = 'SELECT begroting_bedrag FROM begroting WHERE begroting_id = '.$begroting_id.' AND budget_id = 2';
$query='INSERT INTO uitgaven (uitgave_naam,uitgave_datum,uitgave_tekst,uitgave_bedrag)
VALUES ('$uitgave_naam','$uitgave_datum','$uitgave_tekst','$uitgave_bedrag') WHERE begroting_id = '.$begroting_id.'';
$result=mysql_query($query) or die ('Het is niet gelukt om de gegevens in de database te zetten');
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$query = "INSERT INTO uitgaven (
uitgave_naam,
uitgave_datum,
uitgave_tekst,
uitgave_bedrag
) VALUES (
'Storting',
NOW(),
'Maandelijkse storting',
SELECT begroting_bedrag
FROM begroting
WHERE begroting_id = " . $begroting_id . "
AND budget_id = 2;
)";
$result = mysql_query($query) or die ('Het is niet gelukt om de gegevens in de database te zetten');
?>
$query = "INSERT INTO uitgaven (
uitgave_naam,
uitgave_datum,
uitgave_tekst,
uitgave_bedrag
) VALUES (
'Storting',
NOW(),
'Maandelijkse storting',
SELECT begroting_bedrag
FROM begroting
WHERE begroting_id = " . $begroting_id . "
AND budget_id = 2;
)";
$result = mysql_query($query) or die ('Het is niet gelukt om de gegevens in de database te zetten');
?>
Ik heb bij mij server alleen in het eerst vakje bij minutes */1 gezet en de rest op *.
Als het goed is zou hij de opdracht dus iedere minuut moeten uitvoeren.
Er gebeurt niets.
Kan het script ook gedeeltelijk werken?
Dus dat hij wel de tijd erin zet zodat ik kan zien dat in ieder geval iets het wel doet.
Ik heb het script in een map zitten en erbuiten om ze allebei te testen.
Om dit script te testen hoef je het niet in een cronjob te zetten. Je kan het net als anders normaal openen in de browser en dan moet het werken. Cronjob stel je pas in als het script goed werkt.
Ik krijg dan deze foutmelding:
Het is niet gelukt om de gegevens in de database te zetten
Misschien moet ik er even een paar dingen uithalen en dan testen?
Maak de foutmelding even zo dat je (tijdelijk) de mysql_error() te zien krijgt.
Ik heb het SELECT gedeelte even weggehaald en nu zet hij de gegevens wel in de tabel. Alleen moet er ook nog een begroting_id in gezet worden.
Parse error: syntax error, unexpected T_STRING in /usr/home/cronjobbudget.php on line 22
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
include("../budget/inloggen.php");
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
$query = "INSERT INTO uitgaven (
uitgave_naam,
uitgave_datum,
uitgave_tekst,
uitgave_bedrag
) VALUES (
'Storting',
NOW(),
'Maandelijkse storting',
SELECT begroting_bedrag
FROM begroting
WHERE begroting_id = " . $begroting_id . "
AND budget_id = 2;
)";
$result = mysql_query($query) or die mysql_error();
?>
include("../budget/inloggen.php");
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
$query = "INSERT INTO uitgaven (
uitgave_naam,
uitgave_datum,
uitgave_tekst,
uitgave_bedrag
) VALUES (
'Storting',
NOW(),
'Maandelijkse storting',
SELECT begroting_bedrag
FROM begroting
WHERE begroting_id = " . $begroting_id . "
AND budget_id = 2;
)";
$result = mysql_query($query) or die mysql_error();
?>
Nu is dit de foutmelding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') VALUES ( 'Storting', NOW(), 'Maandelijkse storting', ' at line 6
EDIT: Misschien is NOW() niet goed? In de database staat hier DATE
Volgens mij zou NOW() wel moeten werken..., je zou ook eens CURDATE kunnen proberen, maar ik kan eigenlijk geen fout in je query ontdekken, ik vermoed dat je fout bij de SELECT query zit die in een INSERT query zit.
En als je alle whitespace weghaalt tussen 'uitgave_bedrag' en de ')'
Hij moet wel weten welk bedrag in welke rij gezet moet worden.
Dus ook die select?
CURDATE maakt geen verschil
@SanThe
Nee, geen verandering
@Niek, dat is niet zo, de reden waarom er geen haken om de opdracht NOW() moeten is omdat deze niet letterlijk moet worden ingevoerd, maar de output van de functie, aangezien de select query niet letterlijk in de database moet komen horen hier geen haken omheen ;)
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
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
<?php
include("../budget/inloggen.php");
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
$query = "SELECT begroting_bedrag
FROM begroting
WHERE begroting_id = " . $begroting_id . "
AND budget_id = 2";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$query = "INSERT INTO uitgaven (
uitgave_naam,
uitgave_datum,
uitgave_tekst,
uitgave_bedrag
) VALUES (
'Storting',
NOW(),
'Maandelijkse storting',
'" . $row['begroting_bedrag'] . "'
)";
$result = mysql_query($query) or die(mysql_error());
?>
include("../budget/inloggen.php");
//maak verbinding met de database
$connection = mysql_connect ($hostname,$user,$password) or die ( "Sorry maar ik kan geen contact maken met de database, probeer het later opnieuw of ververs uw browser.");
$db = mysql_select_db ($database, $connection) or die ("Sorry, maar ik kan de database niet openen.");
$query = "SELECT begroting_bedrag
FROM begroting
WHERE begroting_id = " . $begroting_id . "
AND budget_id = 2";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
$query = "INSERT INTO uitgaven (
uitgave_naam,
uitgave_datum,
uitgave_tekst,
uitgave_bedrag
) VALUES (
'Storting',
NOW(),
'Maandelijkse storting',
'" . $row['begroting_bedrag'] . "'
)";
$result = mysql_query($query) or die(mysql_error());
?>
Edit: Foutje gefixed.
Gewijzigd op 01/01/1970 01:00:00 door - SanThe -
Hij zet nu alle gegevens in de tabel (26x terwijl dat 39x moet zijn) maar zonder bedrag en zonder begroting_id.
Dat laatste kan kloppen omdat we dat nog niet in de query hebben gezet.
Hij moet het nu dus nog 39 keer erin zetten bij het juiste begroting_id met het bedrag uit de tabel "begroting" (begroting_bedrag)
Dit is de foutmelding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND budget_id = 2' at line 4
Dan bestaat $begroting_id niet.