You are not logged in.

  • Login

1

Friday, February 8th 2008, 1:51pm

Checkbox array an Ajax übermitteln

Hey. Ich hab mal wieder eine Frage. Ich hab im Internet gesucht, aber nicht wirklich was gefunden, was mir gesagt hat, ahh das könnte was sein.
So sieht mein Script aus. Ich würde gerne die Ausgewählten Checkboxen per Ajax übertragen. Aber mit cb[] scheint das nicht so ganz zu Funktionieren. ^^
Was muss ich machen, damit ich es an Ajax weiter übergeben kann?

Danke im Vorraus :)

<form method=\"POST\" name=\"bearbeiten\" id=\"bearbeiten\" onsubmit=\"return sendRequest('cb=this.cb[].value,'go_nachrichten.php');\">

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Betreff:
 
fetch_array($sql)) {
 
$id=$res['id'];
$betreff=$res['betreff'];
 
 
 
echo "$betreff";
echo "<\input type=\"checkbox\" name=\"cb[]\" value=\"$id\">";
 
}
?>
Und dann hier noch das ende vom Formular mit formtag schließen. Sumitbutton und so

</form>

2

Friday, February 8th 2008, 2:06pm

senRequest ist ja keine standard js funktion. Woher beziehst du sie? Benutzt du irgendein Framework?

3

Friday, February 8th 2008, 2:15pm

Achso ja sry vergessen zu ergänzen. Ich benutze die Funktion aus dem Coder Wiki. Inhalte nachladen =)

Formulare mit AJAX.. und ohne

4

Friday, February 8th 2008, 2:23pm

Da sieht die Funtkion aber ein wenig anders aus. Poste doch einfach mal deine komplette Funktion...

5

Friday, February 8th 2008, 3:52pm

Hi so hier mal das Script :)

http://paste.frubar.net/7526

6

Friday, February 8th 2008, 4:12pm

JavaScript Code

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
#
function sendRequest(formdata,url) {
#
        try {
#
                req = window.XMLHttpRequest?new XMLHttpRequest(): new ActiveXObject("Microsoft.XMLHTTP");
#
        } catch (e) {
#
                alert('Kein Ajax');
#
        }
#
 
#
        req.onreadystatechange = handleResponse;
#
 
#
        req.open('POST', url);
#
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
#
        req.send(formdata);
#
        return false;
#
}


probiers mal mit:

sendRequest('cb[]=this.cb[],'go_nachricht.php');

7

Friday, February 8th 2008, 7:17pm

Hi. Danke für deine Hilfe, aber scheint nicht zu funktionieren. Nach abschicken, passiert einfach gar nichts.

8

Friday, February 8th 2008, 7:41pm

knifflige Sache. Wenn du statt cb[] einfach cb nimmst, hast du keine Probleme. Dann bekommst du ein JavaScript Array, wie du es mit AJAX verarbeiten kannst.
Aber wenn du (für deaktiviertes JavaScript) eine alternative Verarbeitung per PHP ermöglichen willst, wirds komplizierter. Dann musst du cb[] als Namen verwenden und damit kann JavaScript nicht so einfach umgehen.
Hab dir mal folgendes Beispiel gebastelt, wie es mit PHP und JavaScript funktioniert.

HTML Code

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
29
30
<html><head>
<title>Checkbox Values per PHP oder JavaScript</title>
 
<script type="text/javascript">
<!--
function buildCheckboxString(form, pattern) {
	var ret = '';
	for(var i=0; i<form.elements.length; i++) {
		if(form.elements[i].name == pattern && form.elements[i].checked) {
			ret += '&'+pattern+'='+form.elements[i].value;
		}
	}
	alert(ret);
	return false;
}
//-->
</script>
 
</head>
<body>
 
<form onsubmit="return buildCheckboxString(this, 'cb[]')">
 
	<input type="checkbox" name="cb[]" value="val1"/> Val1<br/>
	<input type="checkbox" name="cb[]" value="val1"/> Val2<br/>
	<input type="submit" />
</form>
 
</body>
</html>

9

Friday, February 8th 2008, 8:16pm

Hey dankeschön hab es jetzt hinbekommen.

Aber irgendwie denke ich nie Weitgenug.

Das ajaxscript ruft ja die datei go_nachricht.php auf. die sieht so aus:

PHP Quellcode

1
2
3
4
header( "Content-type: application/txt" );
header('Content-Disposition: attachment; filename=my_file.txt');
 
print_r($_GET['cb']);


Normalerweise, sollte sich ein Downloadfenster öffnen, wo dann die my_file.txt als download angeboten wird. so wird mir aber nur der array ausgegeben. leider...

10

Friday, February 8th 2008, 9:00pm

mit ajax holst du dynamisch daten nach... startest aber keinen downloaddialog... willst du einen download starten ohne, dass dabei die seite neu geladen wird solltest du die URL in einem versteckten Iiframe laden.

11

Friday, February 8th 2008, 10:05pm

Achsoo. Okay. Dann war ajax wohl die Falsche wahl. Naja so hab ich wenigstens was neues dazu gelernt. Ist doch auch positiv :-)

Also mir ist es eigentlich egal, ob die Seite neu geladen wird, oder nicht. Hauptsache der Download startet. ^^

Das mit dem Hidden iframe ist mir eben auch eingefallen. Wollte das mal ausprobieren. Aber sobald ich dann auf submit klicke, spinnt der. bin ich noch was am kämpfen mit. hehe. ^^
Aber danke für den tipp.

Ich probier einfach mal was rum. ^^



Edit //

Kurze Frage.
Mein Script.

HTML Code

1
2
3
4
<.iframe src="ajax1.php" name="hidden_upload" >
<.form action="ajax2.php" method="POST" target="hidden_upload">
<.input type="submit">
<./form>


So ich rufe die Seite auf, und dann habe ich den Iframe, der die Seite ajax1.php anzeig. Klicke ich auf abschicken öffnet sich ajax2.php im iframe normal?

Eigentlich bräuchte ich, dass sobald ich auf abschicken klicke, sich im iframe ajax1.php nochmal aufruft, da ich mit ajax2. nichts anfangen kann. ^^

This post has been edited 1 times, last edit by "Snowflake" (Feb 8th 2008, 10:14pm)


12

Friday, February 8th 2008, 11:25pm

du kannst natürlich auch direkt action="ajax1.php" benutzen.Aber der iframe wird doch sowieso versteckt und ajax2 ist das Script das den Download startet, oder?

13

Saturday, February 9th 2008, 12:33am

du kannst natürlich auch direkt action="ajax1.php" benutzen.Aber der iframe wird doch sowieso versteckt und ajax2 ist das Script das den Download startet, oder?
Hey. also ich glaub ich code meine scripte zu kompliziert.

Ich will eigentlich das ganze so machen, dass ich entweder die nachrichten lösche, oder herrunterlade.

in der ajax2.php wird abgefragt, ob das optionfeld download oder löschen ausgibt. wenn es löschen ausgibt, wird ein sql lösch befehl ausgeführt.

und wenn es download ausgibt, sollte eigentlich im ajax1.php was ja hidden ausgeführt wird, das download script ausgeführt werden.

14

Saturday, February 9th 2008, 10:12am

jein.. also dass du eine Auswahl zwischen löschen und herunterladen hast, hast du ja bisher nicht gesagt.

Das Bedarf natürlich einer spezielleren Lösung. Mach dir nur Gedanken, ob du überhaupt mehrere Elemente auf einmal herunterladen willst. Ansonsten reicht ja schon ein Downloadlink pro Element. Und dann entfällt der ganze Stress.

Außerdem fällt mir gerade wieder ein, dass es target und iframes nach XHTML gar nicht mehr gibt. Sogesehen vergiss auch die vorherige Idee mit dem versteckten Downloadframe.
Willst du Gruppendownloads versuchs so:

HTML Code

1
<form onsubmit="return loesche(this, 'cb[]')" action="download.php">

in loesche() wird geprüft ob überhaupt der Löschen-Button gedrückt wurde. Wenn stattdessen der Downloadbutton gedrückt wurde, dann mach ein return true und download.php wird aufgerufen.
Wenn aber löschen gedrückt wurde, mach deinen AJAX-Kram und return false.

15

Saturday, February 9th 2008, 12:21pm

Oh tut mir leid, hab das vergessen zu sagen, mit dem wechseln zwischen download und löschen. War dumm von mir.
Dein lösungsansatz hört sich weitaus besser an als meine. Werd mich nachher mal dransetzen, und das versuchen. Danke schonmal =)

16

Saturday, February 9th 2008, 6:21pm

Soo danke für eure Geduld und Hilfe. Jetzt funktioniert alles wunderbar.

Nochmal dankeschön :)

Similar threads

Social bookmarks