IP Adres opslaan in database.
voor mijn berichtenbalk zou ik graag iets extra erbij willen.
Dit is nu mijn script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
include('config.php');
include('functions.php');
if($_SERVER['REQUEST_METHOD']=="POST") {
header('location:http://www.smik.tk/gepost.php');
$sql = "INSERT INTO balk SET id = '', naam ='".$_POST['naam']."', bericht='".$_POST['bericht']."'";
mysql_query($sql);
$post = smilie($_POST['bericht']);
echo "U heeft het volgende bericht gepost: <br>".$post.".";
}
else {
?>
include('config.php');
include('functions.php');
if($_SERVER['REQUEST_METHOD']=="POST") {
header('location:http://www.smik.tk/gepost.php');
$sql = "INSERT INTO balk SET id = '', naam ='".$_POST['naam']."', bericht='".$_POST['bericht']."'";
mysql_query($sql);
$post = smilie($_POST['bericht']);
echo "U heeft het volgende bericht gepost: <br>".$post.".";
}
else {
?>
Ik zou graag als iemand een bericht post, ook dat z'n ip adres wordt opgeslagen in mijn database.
Maar hoe sla ik het op? En Hoe moet ik mijn tabel in mijn database maken?
Ik ondersteun php 5.2 en en mysql 5.1
Alvast bedankt!
- SQL injectie in mogelijk. Gebruik mysql_real_escape_string() over je POST-variabele heen.
- Ik mis foutafhandeling op je query. Zodra je query is gelukt plaats je de header()
- Een IP kan je opvragen met $_SERVER['REMOTE_ADDR'], en deze kan je in de INSERT-query verwerken. $REMOTE_ADDR is al vele jaren verouderd en zal tegenwoordig geen IP meer geven en dus leeg zijn.
ip ='".$_POST[$_SERVER['REMOTE_ADDR']]."'
ip = '" . $_SERVER['REMOTE_ADDR'] . "'
php beginners handleiding doorlezen.
Ik denk het niet als ik jou was zal ik eens de En laat die quotes ook gelijk maar weg.
Dem Ian op 06/11/2011 12:53:31:
Dus eigenlijk voor het ip adres, moet ik dit er nog bijvoegen:
ip ='".$_POST[$_SERVER['REMOTE_ADDR']]."'
ip ='".$_POST[$_SERVER['REMOTE_ADDR']]."'
$_POST[$_SERVER['REMOTE_ADDR']]
Dit is onzin, lees mijn reactie maar eens goed.
ik moet gewoon dit zetten: $_SERVER['REMOTE_ADDR']
En daarna moet ik dit oproepen via:
ip ='".$_POST[REMOTE_ADDR]."'
Ofzo?
- Aar - op 06/11/2011 12:40:51:
Een IP kan je opvragen met $_SERVER['REMOTE_ADDR']
Maar waar moet ik het plaatsen?
Jordi kroon op 06/11/2011 13:10:34:
als ik jou was zal ik eens de php beginners handleiding doorlezen.
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
27
28
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
<?php
include("config.php"); // Configuratie bestand
include("functions.php"); // Standaard functies
// Als er op post gedrukt wordt:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Stuur de gebruiker door naar gepost.php (weet ik niet wrm, maarja):
// Ik denk dat dit hier ook niet hoor, eerst doorsturen en dan pas de query uitvoeren???
// Hoe doe je dat en waarom toon je dan nog dat het bericht gepost is?
header("Location: http://www.smik.tk/gepost.php"); // Dus ik denk dat dit weg moet :p
// De database connectie (je kan ook natuurlijk config.php of functions.php gebruiken:
$Conn = mysqli_connect(MYSQLI_SERVER, MYSQLI_USERNAME, MYSQLI_PASSWORD, MYSQLI_DATABASENAME) or trigger_error('Het was onmogelijk om database connectie te maken.');
// Alles in de database stoppen, maak een extra veld in de database genaamd ip:
$SQL = mysqli_query($Conn, "INSERT INTO balk SET id = '', naam = '".mysqli_real_escape_string($Conn, $_POST['naam'])."', bericht = '".mysqli_real_escape_string($Conn, $_POST['bericht'])."', ip = '".mysqli_real_escape_string($Conn, $_SERVER['REMOTE_ADDR'])."'") or trigger_error('Er is iets fout gelopen met het maken van de datbase connectie (input).');
// Sluit de connectie:
mysqli_close($Conn);
// Kijken of de database is geupdatet:
if($SQL) {
echo 'U hebt het volgende bericht gepost: <br>'.smilie($_POST['bericht']).'.'; }
else {
echo 'Probeer het later nog eens opnieuw, want er is iets fout gegaan.'; } }
// Ik weet niet waarom je else zou doen... Maar dat kan je er zelf wel nog bijvoegen natuurlijk.
?>
include("config.php"); // Configuratie bestand
include("functions.php"); // Standaard functies
// Als er op post gedrukt wordt:
if($_SERVER['REQUEST_METHOD'] == 'POST') {
// Stuur de gebruiker door naar gepost.php (weet ik niet wrm, maarja):
// Ik denk dat dit hier ook niet hoor, eerst doorsturen en dan pas de query uitvoeren???
// Hoe doe je dat en waarom toon je dan nog dat het bericht gepost is?
header("Location: http://www.smik.tk/gepost.php"); // Dus ik denk dat dit weg moet :p
// De database connectie (je kan ook natuurlijk config.php of functions.php gebruiken:
$Conn = mysqli_connect(MYSQLI_SERVER, MYSQLI_USERNAME, MYSQLI_PASSWORD, MYSQLI_DATABASENAME) or trigger_error('Het was onmogelijk om database connectie te maken.');
// Alles in de database stoppen, maak een extra veld in de database genaamd ip:
$SQL = mysqli_query($Conn, "INSERT INTO balk SET id = '', naam = '".mysqli_real_escape_string($Conn, $_POST['naam'])."', bericht = '".mysqli_real_escape_string($Conn, $_POST['bericht'])."', ip = '".mysqli_real_escape_string($Conn, $_SERVER['REMOTE_ADDR'])."'") or trigger_error('Er is iets fout gelopen met het maken van de datbase connectie (input).');
// Sluit de connectie:
mysqli_close($Conn);
// Kijken of de database is geupdatet:
if($SQL) {
echo 'U hebt het volgende bericht gepost: <br>'.smilie($_POST['bericht']).'.'; }
else {
echo 'Probeer het later nog eens opnieuw, want er is iets fout gegaan.'; } }
// Ik weet niet waarom je else zou doen... Maar dat kan je er zelf wel nog bijvoegen natuurlijk.
?>
Die header zou dan beter kunnen verdwijnen, omdat je op lijn 23 al een bevestiging toont. Desgewenst zou je op die lijn die header kunnen plaatsen.
Ik ga straks aan de slag met dat script om dingen uit te proberen!
Bedankt :)
Dus er zijn twee mogelijk heden.
1. Laat de header weg
2. Zet op regel 23 de header, dan wordt de gebruiker doorgestuurd naar de gepost.php pagina als de database is geüpdatet (zie post - Aar -)
ik heb zonet het script uitgeporbeerd, hij verzend een bericht en de naam, alleen krijg ik geen IP adres in mijn database.
Zou er een fout kunnen zijn in mijn database tabel? En hou zou die er moeten uitzien?
Hoe ziet de database er uit?
een gewone, varchar 14
Ik zou er maar varchar 15 van maken. Niet dat het je probleem oplost, maar er zitten drie punten in een IP-adres, en elke octet kan uit 3 tekens bestaan.
Volgens mij kan je net zo makkelijk varchar 39 er van maken i.v.m. IPv6.
Ik zal het eens problemen en kijken of het probleem opgelost is.