You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Wednesday, September 1st 2010, 11:02pm

Datenbankeintrag mit AJAX nach einer gewissen Zeit

Hallo easy-coding.de-Community,

habe schon in Google gesucht, aber nichts gefunden.

Ich suche ein AJAX Script, das nach etwa 10 Sekunden einen einfachen Datenbankeintrag macht.
Nur einen Eintrag mit: timestamp - IP
(Mit timestamp meine ich time()-Funktion bei PHP.)

Das ist/wäre das erste mal, dass ich mit AJAX arbeite!
Also bin ich in AJAX ein "voll-noob"...

Auch wenn es nicht so wichtig ist, wieso ich das Script brauche, werde ich es euch trotzdem sagen:
Ich habe auf meiner Homepage etwas Werbung (Layer) um etwas Geld zu verdienen.
Jedoch stört das bei jeden Aufruf... Deshalb der Datenbankeintrag.
Beim aufrufen der Seite, wird überprüft ob die IP bereits in der Datenbank gespeichert ist.
Wenn ja, wird die Werbung nicht angezeigt. Wenn nein, dann nicht.
Mit dem Timestamp überprüf ich, ob es schon 24h vergangen sind.

Ich bin bereit, etwas AJAX zu lernen, aber nur die wichtigsten Funktionen, die man so braucht.
Ich denke da so an: Datenbank-"verwaltung" (Eintragen, Löschen, Auflisten)

Ich weiß, dass es nicht besonders gut aussieht, wenn man sich in einen Forum anmeldet und gleich nach einen fertigen Script fragt.
Werde ich aber leider machen - Werde aber etwas das Script verlegen und quälen, damit ich etwas den Umgang mit AJAX lerne.

Wer gute Seiten weiß, wie ich mit AJAX auch Lösche oder Aufliste, darf sie gerne auch posten!
Am wichtigsten wäre aber jetzt das Eintragen nach einer gewissen Zeit!

Ich bedanke mich jetzt schon herzlichst für das Script/Hilfe :)

MfG,
Patschi

2

Thursday, September 2nd 2010, 7:55pm

Ok wir verwenden mal den AJAX Wrapper von hier: Formulare mit AJAX.. und ohne

Lade dir also die ajax.js von hier herunter: http://demo.easy-coding.de/ajax/forms-wi…ut-ajax/ajax.js
und binde sie wie folgt ein:

HTML Code

1
<script type="text/javascript" src="ajax.js"></script>


Danach machst du den AJAX Aufruf um 10 Sekunden verzögert.

JavaScript Code

1
2
3
window.setTimeout(function() {
	ajaxPost('speichere_werbung.php');	
}, 10 * 1000);


Ob das geklappt hat siehst du am besten im Firebug (Netzwerk Tab)

3

Thursday, September 2nd 2010, 8:27pm

Ok, danke für die Hilfe.

Würde das funktionieren?

JavaScript/AJAX

JavaScript Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<script type="text/javascript">
window.setTimeout(function() { 
$ip = "UNBEKANNT"; if(getenv("HTTP_X_FORWARDED_FOR")) { $ip = getenv("HTTP_X_FORWARDED_FOR"); }else{ $ip = getenv("REMOTE_ADDR"); } 
ajaxPost(time(),$ip); }, 10000);
 
function ajaxPost(postData) {
	var req;
 	try {
		req = window.XMLHttpRequest ? new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP"); 
	} catch (e) {
		// browser does not have ajax support
	}
	req.open('POST', 'werbung_save.php', true);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	req.send(postdata);
	return true;
}
</script>


PHP - werbung_save.php:

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include("config.inc.php");
$Verbindung = mysql_connect($DatabaseHost,$DatabaseUser,$DatabasePassword);
mysql_select_db($Database,$Verbindung);
 
$sql="INSERT INTO `werbung` (`ip` , `timestamp`) 
VALUES (
'".mysql_real_escape_string($_POST['ip'])."', '".mysql_real_escape_string($_POST['time'])."'
);";
 
mysql_query($sql);
 
mysql_close($Verbindung);
?>


Aber wie geb ich die Daten richtig weiter?
Stimmt das so in etwa?

4

Friday, September 3rd 2010, 9:46am

warum musst du denn Daten weitergeben?
Auf die Variablen "IP" und "Zeit" hast du doch ion der werbung_save.php auch Zugriff?

5

Friday, September 3rd 2010, 1:08pm

AJAX gibt ja per Post die Daten (IP, time()) weiter...
Die PHP Verarbeitet das dann.

Hab ich das jetzt richtig verstanden?

Deshalb muss ich ja wissen, wie ich mit $_POST['ip'], usw.. das wieder aufrufen kann.

6

Friday, September 3rd 2010, 6:40pm

AJAX könnte dir via POST JavaScript Daten an PHP schicken. Aber für IP Adresse und Uhrzeit ist macht das kann ja keinen Sinn, da der Empfänger die Uhrzeit kennt.
Aber von mir aus können wir uns auch gerne einen künstlichen Fall generieren.

Also deiner Timer sollen nun nach 10 Sekunden die Uhrzeit schicken, wann der Benutzer die Seite betreten hat.

Source code

1
ajaxPost('speichere_werbung.php', { starttime: <?=time()?> });

7

Friday, September 3rd 2010, 7:42pm

Der Besucher kann ruhig die Uhrzeit kennen.
Bringt ihm nichts.

Und wie fang ich jetzt in der "speichere_werbung.php" die Zeit ab?
"$_POST['starttime']" ?

Und wie geb ich zusätzlich die IP noch mit?

8

Friday, September 3rd 2010, 8:33pm

Nur so am Rand, wieso nicht den normalen Weg mit einer Cookie Sperre gehen?

- Prüfen ob Cookie 24 Stunden alt ist, sollte dem nicht so sein Layer anzeigen
- Layer einblenden
- Cookie setzen
- Prüfen ob Cookie 24 Stunden alt ist, sollte dem nicht so sein Layer anzeigen

This post has been edited 1 times, last edit by "Torsten" (Sep 3rd 2010, 8:43pm)


9

Friday, September 3rd 2010, 8:35pm

Ja, hab ich ja zurzeit...
Nur ist das mit Cookie nicht besonders sicher...

10

Friday, September 3rd 2010, 8:44pm

sicher? Was soll denn passieren, außer dass der Benutzer die Werbung zweimal sieht ;)

11

Friday, September 3rd 2010, 8:51pm

Das er die Zeit selber immer ändert und dann nie wieder die Zeit anzeigt.
Deshalb will ich das ja selber per IP speichern, weil ich da sicher sein kann, das der da nichts manipulieren kann.

Nur will ich das eben halt machen, dass man nicht eine eigene Seite aufrufen muss - deshalb AJAX.

12

Friday, September 3rd 2010, 10:53pm

Wer sich die Mühe macht zu diesem Zweck speziell für deine Seite (regelmäßig) den betreffenden Cookie zu ändern statt einen allgemeinen Werbeblocker zu verwenden, muss ziemlich blöd sein.

13

Friday, September 3rd 2010, 10:56pm

Ok, dass ist ein Argument...

Aber ich hab das schon mit JavaScript probiert, hat nicht funktioniert...
Nicht mal mein Timer :D

14

Friday, September 3rd 2010, 11:08pm

Zurück zum Thema - eigentlich würde es auch genügen d0nut zu zitieren:

Und wie geb ich zusätzlich die IP noch mit?

Du musst weder die Zeit noch die IP mithilfe von JS ermitteln und übergeben. Wozu auch? PHP bietet dir dazu time() und $_SERVER['REMOTE_ADDR'].

15

Friday, September 3rd 2010, 11:12pm

Ok, danke für die Hilfe.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
include("config.inc.php");
$Verbindung = mysql_connect($DatabaseHost,$DatabaseUser,$DatabasePassword);
mysql_select_db($Database,$Verbindung);
 
$sql="INSERT INTO `werbung` (`ip` , `timestamp`) 
VALUES (
'".mysql_real_escape_string($_POST['ip'])."', '".mysql_real_escape_string($_POST['time'])."'
);";
 
mysql_query($sql);
 
mysql_close($Verbindung);
?>


Wie ich die IP und Zeit anzeige weiß ich, beweißt mein Script oben ^^

Bin nicht so ein Profi beim Verbinden von JS und PHP :S

16

Friday, September 3rd 2010, 11:29pm

Scheinbar ja nicht. Zu verbinden gibt es nun nicht viel, du musst einfach nur wie in d0nuts erster Antwort eine Anfrage an das entsprechende PHP-Script senden. Ganz ohne zusätzliche POST-Parameter o. Ä..

17

Sunday, September 5th 2010, 1:23am

Sieht man dann im Quelltext, welche PHP Datei aufgerufen wird?
Wie kann ich dann verhindern, dass man die selber manuel aufrufen kann?

18

Sunday, September 5th 2010, 8:24am

Das kannst du nicht. AJAX ist ein Aufruf vom Client zum Server. Du kannst den Client nicht irgendwas machen lassen, was er nicht mitbekommt.

Similar threads

Social bookmarks