hoe krijg ik het Ip-adres te zien
ik wil de Ip adressen van de bezoekers die een bericht hebben geplaatst in het gastenboek zichbaar maken in de admin, zodat ik die eventueel kan blokkeren voor het posten van berichten
nu heb ik nu dit gedaan:
if($_POST[Submit]){
if($_POST[titel] != \"\" AND $_POST[naam] != \"\" AND $_POST[bericht] != \"\" ){
mysql_query(\"INSERT INTO gboek (titel, naam, bericht, datum, ip )
VALUES (\'$_POST[titel]\', \'$_POST[naam]\', \'$_POST[bericht]\', \'$datum\', \'$ip\' )\");
en deze tabel gemaakt:
CREATE TABLE `gboek` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(40) NOT NULL,
`naam` varchar(40) NOT NULL,
`bericht` text NOT NULL,
`datum` varchar(20) NOT NULL,
`ip` text NOT NULL,
PRIMARY KEY (`id`) ) ;
maar ik krijg een 0 als resultaat
ook met `ip` int NOT NULL,
wat doe ik fout
nu heb ik nu dit gedaan:
if($_POST[Submit]){
if($_POST[titel] != \"\" AND $_POST[naam] != \"\" AND $_POST[bericht] != \"\" ){
mysql_query(\"INSERT INTO gboek (titel, naam, bericht, datum, ip )
VALUES (\'$_POST[titel]\', \'$_POST[naam]\', \'$_POST[bericht]\', \'$datum\', \'$ip\' )\");
en deze tabel gemaakt:
CREATE TABLE `gboek` (
`id` int(11) NOT NULL auto_increment,
`titel` varchar(40) NOT NULL,
`naam` varchar(40) NOT NULL,
`bericht` text NOT NULL,
`datum` varchar(20) NOT NULL,
`ip` text NOT NULL,
PRIMARY KEY (`id`) ) ;
maar ik krijg een 0 als resultaat
ook met `ip` int NOT NULL,
wat doe ik fout
Gewijzigd op 01/01/1970 01:00:00 door Niek Kasius
Gesponsorde koppelingen:
$_SERVER['REMOTE_ADDR']
maar dat is natuurlijk mosterd na de maaltijd.
check je input op correctheid, voeg captcha toe en klaar ben je
maar dat is natuurlijk mosterd na de maaltijd.
check je input op correctheid, voeg captcha toe en klaar ben je
De meest eenvoudige manier om een ip-adres te achterhalen is via $_SERVER['REMOTE_ADDR']. In de meeste gevallen bevat deze variabele het juiste ip-adres.
Maar wellicht dat het handiger is om een andere aanpak te kiezen, bijvoorbeeld door het gebruiken van een captcha bij het toevoegen van een nieuw bericht.
Maar wellicht dat het handiger is om een andere aanpak te kiezen, bijvoorbeeld door het gebruiken van een captcha bij het toevoegen van een nieuw bericht.
`datum` varchar(20) NOT NULL,
Wanneer ik 'datum' vertaal naar het engels, kom ik toch echt op 'date'. Dat klinkt toch heel anders dan bv. 'varchar'...
Een ip-adres opslaan in een veld van het type text is ook wat overdreven, of je moet een ip-adres hebben wat enkele MB's groot is. Ik moet ze nog tegenkomen! Een CHAR(20) o.i.d. is meer dan genoeg, al kun je ook met een INT aan de slag, mits je het ip-adres omrekent. MySQL heeft daar ergens een functie voor, de naam is me even ontschoten.
Edit; INET_ATON() heb je nodig om een ip-adres naar een integer om te zetten. Met INET_NTOA() maak je van een integer weer een ip-adres. Beetje omslachtig allemaal, maar dat is niet anders, daarvoor kies je MySQL.
Wanneer ik 'datum' vertaal naar het engels, kom ik toch echt op 'date'. Dat klinkt toch heel anders dan bv. 'varchar'...
Een ip-adres opslaan in een veld van het type text is ook wat overdreven, of je moet een ip-adres hebben wat enkele MB's groot is. Ik moet ze nog tegenkomen! Een CHAR(20) o.i.d. is meer dan genoeg, al kun je ook met een INT aan de slag, mits je het ip-adres omrekent. MySQL heeft daar ergens een functie voor, de naam is me even ontschoten.
Edit; INET_ATON() heb je nodig om een ip-adres naar een integer om te zetten. Met INET_NTOA() maak je van een integer weer een ip-adres. Beetje omslachtig allemaal, maar dat is niet anders, daarvoor kies je MySQL.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Quote:
INET_ATON() en INET_NTOA() zijn dat...MySQL heeft daar ergens een functie voor, de naam is me even ontschoten.
edit: Je had ze zelf ook alweer gevonden ;-)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
pgFrank!
dit is wel goed datum` varchar(20) NOT NULL default,
want met date geeft die: 0000-00-00
en ik heb ip` text veranderd in varchar(20) NOT NULL default, en dat geeft ook een 0 aan net als met: int(20).
dit is wel goed datum` varchar(20) NOT NULL default,
want met date geeft die: 0000-00-00
en ik heb ip` text veranderd in varchar(20) NOT NULL default, en dat geeft ook een 0 aan net als met: int(20).
niek58 schreef op 13.03.2008 13:58:
Nee, jouw opzet is fout.pgFrank!
dit is wel goed datum` varchar(20) NOT NULL default,
want met date geeft die: 0000-00-00
en ik heb ip` text veranderd in varchar(20) NOT NULL default, en dat geeft ook een 0 aan net als met: int(20).
dit is wel goed datum` varchar(20) NOT NULL default,
want met date geeft die: 0000-00-00
en ik heb ip` text veranderd in varchar(20) NOT NULL default, en dat geeft ook een 0 aan net als met: int(20).
Dat jij liever de datum in een ander formaat presenteert, dat is een ander verhaal, daarvoor ga je niet de data naar de klote helpen. Ga jij maar eens sorteren op jouw "datum", dan snap je direct wat ik bedoel...
Een datum sla je op in een DATE of DATETIME, andere formaten in MySQL zijn fout of leveren problemen op. Het opmaken van de datum in een SELECT-query, doe je met de MySQL-functie DATE_FORMAT().
Jouw ip-adres kent waarschijnlijk problemen in de PHP, maar echo de INSERT-query eens, dan wordt duidelijk wat daar nu precies in staat.
@pgFrank, je hebt ook Timestamp.
Als je daarbij het vinkje current-timestamp aanvinkt, bespaart je dat nog wat moeite. Je hoeft dan in je sql datum niet meer te noemen bij het invoeren van een nieuw bericht. Mysql zet dan automatisch de tijd en datum erin van het moment van aanmaken van het record.
Als je daarbij het vinkje current-timestamp aanvinkt, bespaart je dat nog wat moeite. Je hoeft dan in je sql datum niet meer te noemen bij het invoeren van een nieuw bericht. Mysql zet dan automatisch de tijd en datum erin van het moment van aanmaken van het record.
@Terence, Timestamp is met een heel ander doel uitgevonden namelijk voor update queries zo dat jij niet een record gaat zitten wijzigen nadat in de tussentijd iemand anders dat gedaan heeft. (Ik ben het nog weinig tegen gekomen maar hoorde ik laatst ergens).
Voor een date of datetime type kan je prima CURRENT_DATE als default gebruiken.
Voor een date of datetime type kan je prima CURRENT_DATE als default gebruiken.
Terence schreef op 13.03.2008 14:08:
Pfffff, hoeveel risico's wil je lopen? Dit is een bug in MySQL (zie de handleiding) die ze recht proberen te praten.@pgFrank, je hebt ook Timestamp.
Als je daarbij het vinkje current-timestamp aanvinkt, bespaart je dat nog wat moeite. Je hoeft dan in je sql datum niet meer te noemen bij het invoeren van een nieuw bericht. Mysql zet dan automatisch de tijd en datum erin van het moment van aanmaken van het record.
Als je daarbij het vinkje current-timestamp aanvinkt, bespaart je dat nog wat moeite. Je hoeft dan in je sql datum niet meer te noemen bij het invoeren van een nieuw bericht. Mysql zet dan automatisch de tijd en datum erin van het moment van aanmaken van het record.
Daarnaast wil geen hond weten hoeveel secondes er sinds 1-1-1970 zijn verstreken, men wil een datum hebben.
En om PostgreSQL nog even te noemen, de TIMESTAMP in pgSQL is heel wat anders dan de TIMESTAMP in MySQL, ze zijn niet vergelijkbaar. De DATETIME van MySQL lijkt er nog het meeste op, ondanks zijn beperkingen.
ik snap het niet! wil je zeggen dat ik in de mysql query "datum" en value de "$datum" moet verandere in date,
want met: `datum` date(20) NOT NULL, geeft die alleen maar 0000-00-00
het is trouwens geen eigen script. en in het orginele script staat het zo ik heb alleen de ip toegevoegd.
omdat ik dacht dat het misschien aan de localhost lag heb het nu ff geprobeerd op de server zelf, maar daar doet die het zelfde.
zou het kunnen dat het aan de instellingen van mijn pc ligt, heb pas een crass gehad waardoor ik alles opnieuw heb moeten installeren.
want toen ik de eerste keer die ip erbij had gezet werkte het wel.
want met: `datum` date(20) NOT NULL, geeft die alleen maar 0000-00-00
het is trouwens geen eigen script. en in het orginele script staat het zo ik heb alleen de ip toegevoegd.
omdat ik dacht dat het misschien aan de localhost lag heb het nu ff geprobeerd op de server zelf, maar daar doet die het zelfde.
zou het kunnen dat het aan de instellingen van mijn pc ligt, heb pas een crass gehad waardoor ik alles opnieuw heb moeten installeren.
want toen ik de eerste keer die ip erbij had gezet werkte het wel.
er bestaat ook zo iets als een handleiding...
DATE(20) bestaat niet, daar hoor een error op te krijgen. Dat MySQL dat niet doet, is weer eens een bug van MySQL, dat is geen nieuws onder de zon. DATE is alles, gaat prima.
Een datum sla je op in een DATE in het formaat yyyy-mm-dd. Hoe jij met een html-formuliertje de datum opgeeft, maakt geen moer uit, zolang jij er maar voor zorgt dat in de query de boel goed staat. Daar zijn 1000-en-1 manieren voor. Daarnaast zul je in PHP met de functie checkdate() moeten controleren of jouw opgegeven datum wel een geldige datum is, MySQL controleert standaard weer eens helemaal niks, 'broodje aap' is in MySQL een geldige datum... Dat deze "geldige datum" wordt omgezet naar de waarde 0000-00-00, dat is jouw probleem, maar jij kiest voor MySQL, dan mag je niet zeuren dat MySQL jouw data naar de bliksem helpt. Dat is een basisfunctionaliteit van MySQL.
Voorbeeld van een INSERT-query:
Met de constante CURRENT_DATE pakt de database automatisch de datum van vandaag.
DATE(20) bestaat niet, daar hoor een error op te krijgen. Dat MySQL dat niet doet, is weer eens een bug van MySQL, dat is geen nieuws onder de zon. DATE is alles, gaat prima.
Een datum sla je op in een DATE in het formaat yyyy-mm-dd. Hoe jij met een html-formuliertje de datum opgeeft, maakt geen moer uit, zolang jij er maar voor zorgt dat in de query de boel goed staat. Daar zijn 1000-en-1 manieren voor. Daarnaast zul je in PHP met de functie checkdate() moeten controleren of jouw opgegeven datum wel een geldige datum is, MySQL controleert standaard weer eens helemaal niks, 'broodje aap' is in MySQL een geldige datum... Dat deze "geldige datum" wordt omgezet naar de waarde 0000-00-00, dat is jouw probleem, maar jij kiest voor MySQL, dan mag je niet zeuren dat MySQL jouw data naar de bliksem helpt. Dat is een basisfunctionaliteit van MySQL.
Voorbeeld van een INSERT-query:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
INSERT INTO
tabelnaam (
oude_datum,
vandaag
)
VALUES (
'2007-03-18',
CURRENT_DATE
);
tabelnaam (
oude_datum,
vandaag
)
VALUES (
'2007-03-18',
CURRENT_DATE
);
Met de constante CURRENT_DATE pakt de database automatisch de datum van vandaag.
handleiding!!!
Ik heb me een boek laten aanpraten met 1060 pagina's "de PHP bijbel" voor iets meer dan 60 euro maar dat ik daar iets wijzer van ben geworden! ja alleen dat ik me van "ze lang zal ze leven" niet meer laat beroven door een verhaaltje.
Ik heb me een boek laten aanpraten met 1060 pagina's "de PHP bijbel" voor iets meer dan 60 euro maar dat ik daar iets wijzer van ben geworden! ja alleen dat ik me van "ze lang zal ze leven" niet meer laat beroven door een verhaaltje.
Nou, dat is anders wel een goed boek, het is alleen geen vervanging voor de online handleiding van jouw database.
De titel zegt het al: PHP. Dat is wat anders dan SQL. Er zijn maar heel weinig mensen (schrijvers in dit geval) die goed zijn in meerdere dingen, koop dus een boek over PHP en een boek over SQL (databases), dat bestaat er een kans dat je met 2 experts te maken hebt.
De titel zegt het al: PHP. Dat is wat anders dan SQL. Er zijn maar heel weinig mensen (schrijvers in dit geval) die goed zijn in meerdere dingen, koop dus een boek over PHP en een boek over SQL (databases), dat bestaat er een kans dat je met 2 experts te maken hebt.
Als jij iets wilt leren zonder te lezen wens ik je suc6
heb het in orde met die ip ! heb advies van Blance en wes opgevolg.
Ik heb dit geplaatst: $ip = $_SERVER['REMOTE_ADDR'];
En mijn dank voor de snelle reacties.
Ik heb dit geplaatst: $ip = $_SERVER['REMOTE_ADDR'];
En mijn dank voor de snelle reacties.
Gewijzigd op 01/01/1970 01:00:00 door Niek Kasius
Heb je die datum nu ook aangepast? Of kunnen we vast een nieuw topic reserveren voor een probleem met datums?
Edit:
Deze query sorteert mijn datums niet goed, 25 januari 2008 komt nĂ¡ 1 april 2008...
Edit:
Deze query sorteert mijn datums niet goed, 25 januari 2008 komt nĂ¡ 1 april 2008...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Nee heb ik niet! wel bijna alle type's uit geprobeerd maar geen die wel werkte. en nog gekeken in andere scrips die hier op deze site staan maar ook daarin verschillende de datum op varchar staan heb ik gezien.
Het is niet zo moeilijk, een datum sla je op in een kolom van het type DATE en een combinatie van datum en tijd in een DATETIME kolom.
Dan dien je je uiteraard wel aan het standaard formaat yyyy-mm-dd hh:mm:ss te houden om data en tijden op te slaan in de database. Het formateren doe je pas tijdens het uitlezen...
Dan dien je je uiteraard wel aan het standaard formaat yyyy-mm-dd hh:mm:ss te houden om data en tijden op te slaan in de database. Het formateren doe je pas tijdens het uitlezen...
niek58 schreef op 13.03.2008 21:11:
Ook de bijbehorende bugs opgezocht?Nee heb ik niet! wel bijna alle type's uit geprobeerd maar geen die wel werkte. en nog gekeken in andere scrips die hier op deze site staan maar ook daarin verschillende de datum op varchar staan heb ik gezien.
Wees nu niet zo eigenwijs en ga een DATE gebruiken om een datum in MySQL op te slaan. Een datum is geen stuk tekst, dat snap je zelf toch ook wel? Hoe moeilijk is het nu om aan te nemen dat je een datum in het formaat yyyy-mm-dd (bv. 2008-03-13) moet opslaan? Je bent nooit te oud om te leren!
Aanpassen die zooi!
ja ik geloof je wel! maar mijn probleem is dat ik niet kan scripten in php. ik snap er een beetje van (niet genoeg dus) zodat ik er het een en ander in kan veranderen en wijzigen.
ik heb verschillende query's. en in het gastenboek zelf staan er 2.
$query2 = mysql_query("SELECT * FROM gboek WHERE id='" .$_GET["id"] . "'");
while($show = mysql_fetch_object($query2)){
en
$query = mysql_query("select * from gboek ORDER BY id DESC LIMIT 1");
while($gboek = mysql_fetch_object($query)){
plus dat er in de ander 9 scripts ook nog een deel staan. en nu denk ik dat ik die niet allemaal hoef aan te passen, maar alleen die waarin ook de datum in voor komt. maar ik weet niet hoe, of doe ik dat gewoon zo: ORDER BY id DESC LIMIT 1, AND datum ASC"); of moet ik er een query bij maken? ik weet het niet.
ik heb verschillende query's. en in het gastenboek zelf staan er 2.
$query2 = mysql_query("SELECT * FROM gboek WHERE id='" .$_GET["id"] . "'");
while($show = mysql_fetch_object($query2)){
en
$query = mysql_query("select * from gboek ORDER BY id DESC LIMIT 1");
while($gboek = mysql_fetch_object($query)){
plus dat er in de ander 9 scripts ook nog een deel staan. en nu denk ik dat ik die niet allemaal hoef aan te passen, maar alleen die waarin ook de datum in voor komt. maar ik weet niet hoe, of doe ik dat gewoon zo: ORDER BY id DESC LIMIT 1, AND datum ASC"); of moet ik er een query bij maken? ik weet het niet.



