Versio

hoe krijg ik het Ip-adres te zien

Overzicht Reageren

Pagina: 1 2 volgende »

Niek Kasius

Niek Kasius

13/03/2008 12:12:00
Quote Anchor link
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
Gewijzigd op 01/01/1970 01:00:00 door Niek Kasius
 
PHP hulp

PHP hulp

24/05/2012 21:20:04
Gesponsorde koppelingen:
 
Wes

wes

13/03/2008 12:16:00
Quote Anchor link
$_SERVER['REMOTE_ADDR']

maar dat is natuurlijk mosterd na de maaltijd.
check je input op correctheid, voeg captcha toe en klaar ben je
 
Joren de Wit
Beheerder

Joren de Wit

13/03/2008 12:17:00
Quote Anchor link
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.
 
Frank -

Frank -

13/03/2008 12:22:00
Quote Anchor link
`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.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Joren de Wit
Beheerder

Joren de Wit

13/03/2008 12:26:00
Quote Anchor link
Quote:
MySQL heeft daar ergens een functie voor, de naam is me even ontschoten.
INET_ATON() en INET_NTOA() zijn dat...

edit: Je had ze zelf ook alweer gevonden ;-)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Niek Kasius

Niek Kasius

13/03/2008 13:58:00
Quote Anchor link
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).
 
Frank -

Frank -

13/03/2008 14:02:00
Quote Anchor link
niek58 schreef op 13.03.2008 13:58:
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).
Nee, jouw opzet is fout.

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.
 
Terence Hersbach

Terence Hersbach

13/03/2008 14:08:00
Quote Anchor link
@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.
 
Bo az

Bo az

13/03/2008 14:12:00
Quote Anchor link
@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.
 
Frank -

Frank -

13/03/2008 14:18:00
Quote Anchor link
Terence schreef op 13.03.2008 14:08:
@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.
Pfffff, hoeveel risico's wil je lopen? Dit is een bug in MySQL (zie de handleiding) die ze recht proberen te praten.

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.
 
Niek Kasius

Niek Kasius

13/03/2008 15:25:00
Quote Anchor link
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.
 
Frank -

Frank -

13/03/2008 15:33:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
INSERT INTO
  tabelnaam (
    oude_datum,
    vandaag
  )
VALUES (
  '2007-03-18',
  CURRENT_DATE
);

Met de constante CURRENT_DATE pakt de database automatisch de datum van vandaag.
 
Niek Kasius

Niek Kasius

13/03/2008 16:03:00
Quote Anchor link
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.
 
Frank -

Frank -

13/03/2008 16:07:00
Quote Anchor link
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.
 
Jacco Engel

Jacco Engel

13/03/2008 16:08:00
Quote Anchor link
Als jij iets wilt leren zonder te lezen wens ik je suc6
 
Niek Kasius

Niek Kasius

13/03/2008 21:00:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Niek Kasius
 
Frank -

Frank -

13/03/2008 21:02:00
Quote Anchor link
Heb je die datum nu ook aangepast? Of kunnen we vast een nieuw topic reserveren voor een probleem met datums?

Edit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM gboek ORDER BY datum ASC;

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 -
 
Niek Kasius

Niek Kasius

13/03/2008 21:11:00
Quote Anchor link
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.
 
Joren de Wit
Beheerder

Joren de Wit

13/03/2008 21:13:00
Quote Anchor link
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...
 
Frank -

Frank -

13/03/2008 21:16:00
Quote Anchor link
niek58 schreef op 13.03.2008 21:11:
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.
Ook de bijbehorende bugs opgezocht?

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!
 
Niek Kasius

Niek Kasius

13/03/2008 21:49:00
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren