solaris-ch
Goto Top

AJAX Form Feld von PHP Script anfügen

Hallo zusammen

Ich habe folgende Aufgabenstellung bei der ich nicht weiterkomme:

1. ein Formular mit diversen Formularfeldern und einem "Add Step" genannten Button
2. get_step.php dieses File generiert neue Steps. Ein Step ist grundsätzlich nichts anderes als weitere Formularfelder, welche aber anhand Datenbankdaten erstellt werden.

Nun sollte es so funktioniere, das wenn ich "Add Step" drücke, vom PHP Script ein neuer solcher Step - Inhalt angefordert wird, und an bestimmter Stelle im Formular eingefügt wird...

Hat jemand eine Idee wie ich das machen kann?

Gruss und danke!

Content-ID: 132064

Url: https://administrator.de/contentid/132064

Ausgedruckt am: 15.11.2024 um 23:11 Uhr

nxclass
nxclass 21.12.2009 um 13:45:37 Uhr
Goto Top
Erstmal würde ich ein PHP Script schreiben das den HTML Code bzw. XML Daten generiert welche später eingefügt werden sollen.
Danach musst Du noch dein HTML Formular und den Button mit dem entsprechenden Javascript Code versehen.

Die Zauberworte für Javascript sind 'Event Handler' und 'XMLHttpRequest' bzw 'ActiveXObject'.

Ich habe folgende Aufgabenstellung ...
... mehr sag ich deshalb erstmal nicht.
solaris-ch
solaris-ch 21.12.2009 um 13:57:58 Uhr
Goto Top
Hallo nxclass

ja, also ich bin schon ein wenig über ddas Aufgabenstadium raus face-wink.
Das PHP ist geschrieben, der Button existiert und ich habe bereits mit mehreren Librarys rumgespielt.
Mit Prototype kam ich relativ weit, jedoch wurde der Inhalt nicht "appended"...

Die entsprechende Funktion sah dann so aus:

function getStep() {

var url = 'get_step.php';
var pars = 'campID='+campID;
cStepContainer.style.visibility = 'visible';
var myAjax = new Ajax.Request(
url,
{
method: 'POST',
parameters: pars
});
}

Gruss und sorry für die Halbinfo zu Beginn.
nxclass
nxclass 21.12.2009 um 20:13:23 Uhr
Goto Top
... woher soll er auch wissen was er ersetzen/anfügen soll.

vollgendes Beispiel habe ich aus dem WIKI: http://de.wikipedia.org/wiki/Ajax_%28Programmierung%29
var myAjax = new Ajax.Request(  "datum.php",  {  
    method: 'get',  
    onComplete: zeige_datum
} );
Dir fehlt also noch der Funktionsaufruf ('zeige_datum') welcher dann das Ergebnis in deinen HTML Code einfügt.

d.h.
var myAjax = new Ajax.Request( url, {
  method: 'POST',  
  parameters: pars,
  onComplete: appendForm
});
//...
function appendForm( request )
{
    $('deine_form_id').innerHTML = request.responseText;  
    // alert( request.responseText );
}

Ich benutze AJAX nur selten, da es mir für solche Aufgaben einfach zu überladen ist. Ein xmlHttpRequest Objekt ist auch schnell selbst geschrieben.
solaris-ch
solaris-ch 22.12.2009 um 07:20:35 Uhr
Goto Top
Hallo nxclass

du hast mir den Anstoss gegeben den ich brauchte face-wink Vielen Dank dafür!

Habe das ganze noch etwas umgebaut, da es mir den neuen Request nicht angefügt hat, sondern den alten ersetzt. Aber nun sieht das ganze so aus:

function getStep(campID) {
	
	var url = 'get_step.php';  
	var pars = 'campID='+campID;  
	moreStep.style.visibility = 'visible';  
		var myAjax = new Ajax.Request(
		url, 
		{
			method: 'POST',   
			parameters: pars,
			onComplete: zeige_step
		});
}


function zeige_step(request){ 
	$('moreStep').innerHTML += request.responseText;   
	 // alert( request.responseText ); 
}

Besten Dank für deine Hilfe! Auf ein nächstes Mal face-wink
solaris-ch
solaris-ch 22.12.2009 um 11:31:57 Uhr
Goto Top
Mist, muss nochmal öffnen. Sorry.

Nun funktioniert die Geschichte eigentlich. Nur:

Im Script: get_step.php werden u.A. Checkboxen und Textfelder generiert.
Wenn ich nun den Button betätige um einen neuen "Step" zu erzeugen, vorher aber eine Checkbox markiert habe, wird zwar der neue Step angefügt, jedoch die zuvor bei Step1 markierte Checkbox wieder "deselektiert"...

Wieso ist das?

Gruss
nxclass
nxclass 22.12.2009 um 12:29:01 Uhr
Goto Top
das Input Feld wird ersetzt ? - hast Du da auch
checked="checked"  
eingefügt ?
solaris-ch
solaris-ch 22.12.2009 um 12:40:42 Uhr
Goto Top
Ne, sorry. Ich drück mich etwas unverständlich aus. Auch Fragen will gelernt sein. face-wink

Also: get_step.php sieht wie folgt aus:

session_start();
include_once("class/dbhandler.class.php");  
$db 		= new DbHandler();
$db->mySqlConnect();
$campID 	= $_POST['campID'];  
$today		= date("Y-m-d H:i:s");  
$uid		= $_SESSION['uid'];  

// get step id

$insert_step = "insert into cat.step (create_date,create_by,campaign_id)  
values (sysdate(),'$uid','$campID')";  

mysql_query($insert_step);
$step_id = mysql_insert_id();

$count_step = "select id from cat.step where campaign_id='$campID'";  
$cres = mysql_query($count_step);
$stepnumber = mysql_num_rows($cres);

	echo "<br /><br />Step: $stepnumber, StepID: $step_id  
	<table width=920px>
	<tr>
	<td class=tdtitle style=\"width:25%\">Step Name</td>  
	<td class=feld colspan=7><input type=\"text\" id=\"campStepName\" name=\"campStepName\"/>\n</td>  
	
	</tr>
	
	<tr>
	<input type=\"hidden\" name=\"stepNum\" value=\"$stepnumber\">  
	<input type=\"hidden\" name=\"stepId\" value=\"$step_id\">  
	<td class=tdtitle>Target Quantity</td>
	<td class=feld colspan=7><input type=\"text\" id=\"campTargetQtyFT\" name=\"campTargetQtyFT\"/>\n</td>  
	</tr>
	
	<tr>
	<td class=tdtitle>Channels
	<p class=cAdditional>What channel is being used (call center, DM etc.) for In- and Outbound</p></td>
	<td class=feld colspan=6>";  
	// checkbox für die kommunikations kanäle
		$q_campChannelsCB = "select distinct id, show_text from cat.constant where area='campChannelsCB' order by foreign_id ASC, show_text ASC";  
		$r_campChannelsCB = mysql_query($q_campChannelsCB);
		echo "<table class=tablecb cellspacing=0><tr>\n";  
		$count = 0;
		while($rr_campChannelsCB = mysql_fetch_array($r_campChannelsCB)){
			echo "<td class=feldcb><input type=\"checkbox\" name=\"campChannelsCB\" value=\"".$rr_campChannelsCB['id']."\" id=\"".$rr_campChannelsCB['show_text']."_$stepnumber\"><label for=\"".$rr_campChannelsCB['show_text']."_$stepnumber\">&nbsp;".$rr_campChannelsCB['show_text']."</td>\n";  
			$count++;
			if($count == 5){
				echo "</tr><tr>\n";  
				$count = 0;
			}
				
		}
		$rest = 5-$count; // bestimmen wieviele leere <td> noch benötigt werden
		for($c = 0; $c < $rest; $c++){
			echo "<td class=feldcb></td>\n";  
		}
		echo "</tr></table>\n";  
		
	echo "</td>  
	</tr>
	
	<tr>
	<td class=tdtitle>Communication Period Start
	<p class=cAdditional>Start and end date of campaign</p></td>
	<td class=feld><input type=\"text\" id=\"campComPeriodStartCA_$stepnumber\" name=\"campComPeriodStartCA\">YYYY-MM-DD  
	</td>
	<td class=tdtitle>Comminication Period End</td>
	<td class=feld colspan=4><input type=\"text\" id=\"campComPeriodEndCA_$stepnumber\" name=\"campComPeriodEndCA\">YYYY-MM-DD</td>  
	</tr>
	<tr>";  

Jedesmal wenn auf der Startseite "Add Step" gedrückt wird, erzeugt obiges PHP Script Checkboxen. Wenn nun eine Checkbox angewählt wird und danach erneut "Add Step" gedrückt wird, passiert folgendes:

1. die vorher angewählte Checkbox wird wieder "abgewählt"
2. das neue Formular wird unter das bereits erstellte angefügt, was auch gut ist.

Nur Punkt 1 ist schlecht. Weil wenn einer einen solchen Step hinzufügt, die Formularfelder ausfüllt und erst danach "Add Step" drückt verfallen alle bisherigen Angaben.

Hoffe du verstehst was ich meine.
Gruss, tom
nxclass
nxclass 23.12.2009 um 09:29:57 Uhr
Goto Top
Das hat sicherlich etwas mit deinem Javascript zu tun - evtl. ist es ein Nebeneffekt des AJAX Request.
Da musst Du wahrscheinlich mal den Javascript Ablauf verfolgen.
solaris-ch
solaris-ch 23.12.2009 um 10:34:38 Uhr
Goto Top
Wie meinst du das, den Javascript Ablauf verfolgen?
nxclass
nxclass 24.12.2009 um 00:04:53 Uhr
Goto Top
schau Dir mal die Erweiterung 'Firebug' für Firefox an - damit kann man u.a. sehr einfach Javascript debugen.
solaris-ch
solaris-ch 28.12.2009 um 07:53:44 Uhr
Goto Top
Besten Dank. Habe mich durch das ganze Script durchgewühlt und durch den ganzen Ablauf verfolgt. Aber ich begreiff einfach nicht wieso der die olle Checkbox nicht markiert behält, sondern den Haken rausnimmt. Niemand ne Idee?