AJAX - Nachricht posten

ueler

Cadet 2nd Year
Dabei seit
Dez. 2008
Beiträge
25
Ich möchte ein Formular, das einen Text per AJAX an eine php-Datei übergibt. Die php-Datei schreibt dann alles in eine Datenbank.

Meine Ajax-Funktion:
Code:
function ajaxSend(){
	var ajaxRequest;  // The variable that makes Ajax possible!
	
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("Your browser broke!");
				return false;
			}
		}
	}
	var param="msg=hoi";
	ajaxRequest.onreadystatechange=handleServerResponse; 
	ajaxRequest.open("POST", "sendmsg.php", true);
	ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajaxRequest.setRequestHeader("Content-length", param.length);
	ajaxRequest.setRequestHeader("Connection", "close");
	
	ajaxRequest.send(param);
}

Mein html-Formular:
HTML:
<form method="post" action="javascript:ajaxSend()">
<textarea id="msgback" name="tfmsgback" rows="3" style="width:500px"></textarea>
<br>
<input type="submit" name="sendback" value="Nachricht senden">
</form>

Meine php-Datei (sendmsg.php):
PHP:
<? $con = mysql_connect("localhost", "******", "******");
$db = mysql_select_db("*******", $con);
session_start();

  $actconid=$_SESSION['conidsession'];
  $msgback=mysql_real_escape_string($_POST['msg']);
  
  $resultid = mysql_query("SELECT * FROM `conversations` WHERE `conid`  = '$actconid'"); //anfrage an
  $array = mysql_fetch_array($resultid);
  $lastid=$array['lastid'];
  $nextid=$lastid+1;
  
  $sqlupcon="UPDATE `conversations` SET `lastid` = '".$nextid."' , `log1` = '1' , `log2` = '1' WHERE `conid` = '$actconid' LIMIT 1 ;";
mysql_query($sqlupcon);
  
  mysql_query("INSERT INTO messages (conid, id, sender, nachricht) VALUES ('$actconid', '$nextid', '$activeuser', '$msgback')") or die(			mysql_error());   			
  
  
  ?>

Aber es passiert irgendwie nichts wenn ich auf den Button klicke und ich verstehe nicht warum.
Lg ueler
 
weißt du wie weit die nachricht kommt? also in welcher datei bleibt sie hängen? erste, zweite oder erst bei der db-abfrage?
 
Die Funktion ajaxSend() ist irgendwie falsch. Das php-Skript wird überhaupt nicht ausgeführt, denn es wird nichts in die Datenbank geschrieben.
 
Hast du PHP-Errormeldungen aktiviert (in der php.ini nach "debug" oder "error" suchen)?
 
es kann aber dennoch sein das es ausgeführt wird und die datenbank den datensatz verweigert und dadurch wird auch nichts reingeschrieben.
hab gesehen das in der sendmsg.php-datei in der db-query folgendes steht:

mysql_query("INSERT INTO messages (conid, id, sender, nachricht) VALUES ('$actconid', '$nextid', '$activeuser', '$msgback')") or die( mysql_error());

versuch doch mal die variable $msgback durch $_POST['tfmsgback'] zu tauschen und schau mal ob er es dann gibt. du führst ja immerhin einen post aus --> die variable steckt dann normalerweise im $_POST-Array...
 
1. Ja PHP-Errormeldungen sind aktiviert.

2. Ich habe folgendes in die sendmsg.php geschrieben:
Code:
  mysql_query("INSERT INTO messages (conid, id, sender, nachricht) VALUES ('1', '1', '1', '1')") or die(mysql_error());
Bei normalen aufrufen schreibt das Skript überall 1 hinein.
Mit AJAX (also wenn ich auf den Button klicke) passiert gar nichts --> das Skript wird nicht ausgeführt.

Mfg ueler
 
Hmm... vieleicht die Funktion auf einen Button legen in dem Formular?

zb. <button onclick="AJAXFUNKTIONSAUFRUF()" >

soweit ich weiß muss man dem javascript doch noch sagen was per post übermittelt wird oder?

irgendwie var TEXTINHALT=document.getElementById("TEXTFELDID").value

und die variable TEXTINHALT muss irgendwie per POST noch übermittelt werden das du in deinem .php script per $_POST['Textinhalt'] drauf zugreifen kannst. du greifst ja auf $_POST['msg'] zu aber ich kann nicht erkennen wo die "generiert" wird.
 
Zuletzt bearbeitet:
Hast du irgendwo noch die Funktion "handleServerResponse" daklariert? "onreadystatechange" ist ein EventHandler , dem der Name eine Funktion zugewiesen wird. Diese muss natürlich auch irgendwo existieren...

Wenn "onreadystatechange" keine Funktionsname zugewiesen wird, dann bricht das Script an diesem Punkt ab.
 
Genau. Das habe ich auch gemerkt, dank Firebug. Super Programm für den Firefox, zeigt alle Fehler in den Skripts an. Es hat genau das gleiche gesagt wie Cobinja, handleServerResponse ist nicht deklariert. Löscht man die Zeile geht's.
Vielen Dank an alle, mfg ueler
 
Zurück
Top