Ik kom er nog steeds niet compleet uit....quote:Op maandag 17 december 2007 16:06 schreef Mordreth het volgende:
[..]
Deze is simpel aan te passen :
[ code verwijderd ]
1 |
En Apache parsed de "<?" niet als PHP?quote:Op maandag 31 december 2007 11:34 schreef Xcalibur het volgende:
Ik heb het volgende probleem:
Ik ben bezig een Google Sitemap XML bestand te genereren. Lokaal (Windows XP, IIS) werkt dit allemaal, en als ik het bestand in m'n browser open krijg ik netjes een XML tree te zien. Nu upload ik het naar mijn server (Linux, Apache) en daar krijg ik een blanco bestand.
Ik ben er achter gekomen dat dit veroorzaakt wordt door de eerste regel van het XML bestand, namelijk:
[ code verwijderd ]
Als ik deze regel weghaal krijg ik wel output te zien, maar is het (natuurlijk) geen XML meer...
Ik heb werkelijk waar géén idee waarom dit is of wat ik er aan zou moeten doen
Scherp.... dat zou het wel eens kunnen zijn.quote:Op maandag 31 december 2007 11:49 schreef Geqxon het volgende:
En Apache parsed de "<?" niet als PHP?
quote:Tells whether the short form (<? ?> ) of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you can disable this option in order to use <?xml ?> inline. Otherwise, you can print it with PHP, for example: <?php echo '<?xml version="1.0"'; ?> . Also if disabled, you must use the long form of the PHP open tag (<?php ?> ).
Mocht je het niet aan kunnen passen:quote:Op maandag 31 december 2007 11:50 schreef Xcalibur het volgende:
[..]
Scherp.... dat zou het wel eens kunnen zijn.
Lokaal staat short open tags uit, online staat het aan.... eens kijken of ik die kan aanpassen :)
1 2 3 | echo "<?xml ............ ": ?> |
En dat lukt mij inmiddels. Het blijft echter gestoei met de weeknummers. Het is op het moment Week 1 van 2007, en dat is waar het ook gelijk goed fout gaat in het script. Ik ga maar weer even worstelen.quote:Op maandag 31 december 2007 11:30 schreef Geqxon het volgende:
[..]
Ik kom er nog steeds niet compleet uit....
Wat ik zoek is een functie die mij de timestamp van de eerste dag van weeknummer X in jaar Y geeft. Ik heb er net weer mee zitten te stoeien, maar ik krijg geen algoritme uit mijn pols geschud die dit voor elkaar krijgt op een manier dat het ook met de jaarwisseling goed gaat.
1 |
quote:Using extended regular expressions, you can specify arbitrary pattern occurrence counts using a more verbose syntax than the question-mark, plus-sign, and asterisk quantifiers. The curly-braces ("{" and "}") can surround a precise count of how many occurrences you are looking for.
The most general form of the curly-brace quantification uses two range arguments (the first must be no larger than the second, and both must be non-negative integers). The occurrence count is specified this way to fall between the minimum and maximum indicated (inclusive). As shorthand, either argument may be left empty: if so the minimum/maximum is specified as zero/infinity, respectively. If only one argument is used (with no comma in there), exactly that number of occurrences are matched.
http://gnosis.cx/publish/programming/regular_expressions.html
Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.quote:Op maandag 31 december 2007 12:30 schreef Geqxon het volgende:
[..]
En dat lukt mij inmiddels. Het blijft echter gestoei met de weeknummers. Het is op het moment Week 1 van 2007, en dat is waar het ook gelijk goed fout gaat in het script. Ik ga maar weer even worstelen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function firstDayOfWeek($week, $year) { $jan1st = mktime(0,0,0,1,1,$year); if(date('W', $jan1st) == 1) { //Correctie toepassen, alleen voor als 1 januari in week 1 zit // En 1 januari kan soms ook bij week 53 of 52 worden gerekend. $week--; } $weekday = date('N', $jan1st) - 1; //Dag 1 is maandag return strtotime('+'.$week.' weeks -'.$weekday.' days', $jan1st); } echo date('Y-m-d', firstDayOfWeek(1,2008)); //Levert 2007-12-31 ?> |
Dat klopt, en als "date('W-Y')" keurig 01-2008 zou tonen dan zou mijn pagina perfect werken, want ook het algoritme dat ik gebruik geeft dan 31 december weer. Helaas, hij geeft nu 01-2007 weer.quote:Op maandag 31 december 2007 14:48 schreef Light het volgende:
[..]
Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.
Edit - de code:
[ code verwijderd ]
Met date("W o") krijg je wel het ISO weeknummer en het ISO jaar. Nadeel is dat je PHP 5.1.0 of nieuwer nodig hebt.quote:Op maandag 31 december 2007 15:04 schreef Geqxon het volgende:
[..]
Dat klopt, en als "date('W-Y')" keurig 01-2008 zou tonen dan zou mijn pagina perfect werken, want ook het algoritme dat ik gebruik geeft dan 31 december weer. Helaas, hij geeft nu 01-2007 weer.
Het is jammer dat de date & time functies van PHP wat rommelig zijn, want "strftime("%W-%Y")" geeft 53-2007 weer, aangezien die weer geen ISO weeknummer geeft.
Een IP is wel een string, bestaat uit getallen met puntjes.quote:Op maandag 31 december 2007 10:32 schreef Tarabass het volgende:
Fix-List:
Variable (volgens mij) nu global gemaakt.
Escape bij declaratie weggehaald en in de query pas meegegeven
If-statements verkort naar 1 if-statement
ID-integer uit de query gesloopt, ook geen idee waarom ik hem er bij had gezet (en dan ook nog als string).
exit; comment weggehaald.
Waarom moet ik de variable $ip escapen in de query? Dit is een integer, en geen string.
$date is een datetime. Waarom vraag je dat?
A List Apart wordt doorgenomen, dank voor de link.
Code na aanpassingen:
[ code verwijderd ]
Kijk voor de grap eens goed naar zijn codequote:Op maandag 31 december 2007 15:29 schreef colourAgga het volgende:
[..]
Een IP is wel een string, bestaat uit getallen met puntjes.
Kijk voor de grap ook eens naar: http://nl3.php.net/manual/en/function.ip2long.php
Dat gebruik ik ook in m'n code. Ik haal hem ook op met long2ipquote:Op maandag 31 december 2007 15:29 schreef colourAgga het volgende:
[..]
Een IP is wel een string, bestaat uit getallen met puntjes.
Kijk voor de grap ook eens naar: http://nl3.php.net/manual/en/function.ip2long.php
Die server_admin variabele bevat de waarde uit de apache config ServerAdmin. CLI gebruikt niet de SAPI en die variabele hoort gewoon leeg te zijn in CLI.quote:Op maandag 31 december 2007 14:43 schreef mschol het volgende:
iemand een idee of ik de $_SERVER['SERVER_ADMIN'] kan benaderen met php in CLI?
of is dat echt helemaal onmogelijk en zal ik het moeten hardcoden?
Wat opmerkingen:quote:Op maandag 31 december 2007 10:32 schreef Tarabass het volgende:
Code na aanpassingen:
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<?php
function CheckPostData() {
$ip = $_SERVER['REMOTE_ADDR'];
$ip = ip2long($ip);
$data = $_POST['data'];
$date = date('y-m-j H:i:s');
Global $mysql_tbn;
if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) {
InsertQuery($ip, $data, $date);
}
}
function InsertQuery($ip, $data, $date) {
Global $mysql_tbn;
$sql_insert = "INSERT INTO " . $mysql_tbn . " SET ";
$sql_insert .= "ip = " . $ip;
$sql_insert .= ", data = '" . mysql_real_escape_string($data) . "'";
$sql_insert .= ", date = '" . $date . "'";
$result = mysql_query($sql_insert);
header("Location: " . $_SERVER['PHP_SELF']);
exit;
}
?>
1 2 3 | $sql_insert = sprintf("INSERT INTO %s SET date='%s',ip=%d, data=' %s' ",$mysql_tbn,$date,$ip,mysql_real_escape_string($data)); ?> |
Dat kan mooier :Pquote:Op maandag 31 december 2007 14:48 schreef Light het volgende:
[..]
Het is week 1 van 2008. En met wat code om de eerste dag van die week te bepalen kom ik op 31 december 2007.
Edit - de code:
[ code verwijderd ]
1 2 3 4 5 6 | { $jan4th = mktime(0, 0, 0, 1, 4, $year); $weekday = date('N', $jan4th) + 6; return strtotime("+$week weeks -$weekday days", $jan4th); } |
1 2 3 4 5 6 7 8 9 | function StartOfWeek($year, $week) { $Jan1 = mktime(1,1,1,1,1,$year); $MondayOffset = (11-date('w',$Jan1))%7-3; $desiredMonday = strtotime(($week-1) . ' weeks '.$MondayOffset.' days', $Jan1); return $desiredMonday; } ?> |
True, rommelig van me maar die had ik laten staan na aanpassingen van de vorige keer (gaf hem toen mee naar de insertquery)quote:Op maandag 31 december 2007 18:55 schreef smesjz het volgende:
* Global $mysql_tbn; heb je niet nodig in CheckPostData
Dit begrijp ik nietquote:* is_string geeft ook true als de invoer ($data) leeg is en dus overbodig.
Eens. Is ook niet de manier die ik nu veel gebruik, inderdaad omdat het zo vervelend lezen is.quote:* De opbouw van $sql_insert vind ik vervelend lezen, gebruik OF een prepared statement of iets als sprintf:
1 2 3 | $sql_insert = "INSERT INTO " . $mysql_tbn . " (ip, data, date) VALUES ('$ip', '" . mysql_real_escape_string($data) . "', '$date')"; ?> |
Is wel netter, maar had het even snel gebouwd, om de veilig te leren en te testen. Beetje zonde van de tijd dus.quote:* Waarom geen else clause bij if ($data blabla) ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function CheckPostData() { $ip = $_SERVER['REMOTE_ADDR']; $ip = ip2long($ip); $data = $_POST['data']; $data = trim($data); $date = date('y-m-j H:i:s'); if(($data != "Hier je bericht....." && $data != "") && (is_string($data))) { InsertQuery($ip, $data, $date); } } function InsertQuery($ip, $data, $date) { Global $mysql_tbn; $sql_insert = "INSERT INTO " . $mysql_tbn . " (ip, data, date) VALUES ('$ip', '" . mysql_real_escape_string($data) . "', '$date')"; $sql_insert = mysql_query($sql_insert); header("Location: " . $_SERVER['PHP_SELF']); exit; } ?> |
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |