Bernd: jQeury Funktion mit PHP ausführen?

Hallo,

ist es möglich wenn ich einen Eintrag bearbeite folgendes mit PHP auszuführen?

$(':radio[name=transportauftrag]').click(function(){
			    
	if($(this).val() == 'Ja'){
		$('div#transportauftrag_eingabe_box').show();
		$('div#b_transportauftrag_von_box').show();
		$('div#b_transportauftrag_bis_box').show();
		$('div#box-transportauftrag_verschicken').hide();
		$('div#retourenHinweis').show();
		$('div#apvorOrt').hide();
		$('div#angebot_location').hide();
		$('div#keineInfo').hide();
		$("#box_transportauftrag").removeClass("abstand_2");
		$("#box_transportauftrag").addClass("abstand_1");
		$("#ansprechpartner_vor_ort_ap").prop('required',false);
		$("#ansprechpartner_vor_ort_ex").prop('required',false);
		$("#b_transportauftrag_von").prop('required',true);
		<?php if ($p_dauerausleihe == 0) { ?>
		$("#b_transportauftrag_bis").prop('required',true);
		<?php } ?>
		<?php if ($p_dauerausleihe == 1) { ?>
		$("#b_transportauftrag_bis").prop('disabled',true);
		<?php } ?>


	} else{
		$('div#transportauftrag_eingabe_box').hide();
		$('div#b_transportauftrag_von_box').hide();
		$('div#b_transportauftrag_bis_box').hide();
		$("#b_transportauftrag_von").val('');
		$("#b_transportauftrag_bis").val('');
		$("#transportauftrag_eingabe").val('');
		$('div#box-transportauftrag_verschicken').show();
		$('div#retourenHinweis').hide();
		$('div#apvorOrt').show();
		$('div#keineInfo').show();
		$('div#angebot_location').show();
		$("#ansprechpartner_vor_ort_ap").prop('required',true);
		$("#ansprechpartner_vor_ort_ex").prop('required',true);
		$("#b_transportauftrag_von").prop('required',false);
		$("#b_transportauftrag_bis").prop('required',false);
	}
			
});

Wenn ich auf den JA Radio-Button "transportauftrag" klicke werde einige Felder eingeblendet bzw. wen ich auf Nein klicke, werden einige wieder ausgeblendet. Wenn ich jetzt ein Eintrag bearbeite möchte ich dass die Felder dann direkt ausgeblendet bzw. eingeblendet sind. Ich hoffe ihr versteht was ich meine.

Ist dieses denn irgendwie direkt in JS Code möglich?

In der Datenbank steht dieser Wert so

$b_transportauftrag == 'Ja'
  1. Langfassung:

    PHP ist es egal, ob es Plaintext, Javascript oder HTML ausliefert.

    Dem Browser ist es egal ob das Javascript oder HTML-Zeug auf dem Server statisch vorhanden oder mit PHP oder irgend was anderem zusammengeschustert wurde.

    Kürzere Fassung:

    PHP weiß nicht was mit dem Zeug wird und der Browser nicht wie es entstand.

    Also ist die Antwort "Ja".

    Ich habe aber nicht geprüft, ob das, was Du da tust, in Javascript sinnvoll ist.

    1. Hallo,

      ob es sinnvoll ist oder nicht lassen wir jetzt einfach mal so stehen. Ich arbeite schon lange damit und ich komme damit sehr gut zurecht, daher würde ich für mich sagen, ja es ist sinnvoll.

      Aber egal, wichtig war mir das JA, dass es möglich ist.

      Das heißt ich muss hier mit PHP irgendetwas ändern?

      $(':radio[name=transportauftrag]').click(function(){
       
       if($(this).val() == 'Ja'){}
      
      }
      

      Die Frage ist nur, wie mache ich dieses? PHP kann ja kein Klick ausführen?

      1. Die Frage ist nur, wie mache ich dieses? PHP kann ja kein Klick ausführen?

        Kein Wunder. PHP lauft auf dem Server und erzeugt (hier) eine Menge Text, der vom Webserver an den Browser geschickt wird. Der Browser führt dann das Javascript aus.

        Javascript müsste also auf den Klick reagieren. Wenn das so sein soll dann muss dann auch Javascript irgendwelche Daten an den Server zurückschicken (wo z.B. ein PHP Skript darauf lauert) und dann die neue Antwort auswerten.

        Das ist schon eher kompliziert - oder mit wie vielen Bernds habe ich hier zu tun?

        1. Hallo,

          würde es was bringen wenn ich die Funktion einfach so lasse wie sie jetzt ist, denn ich muss ja auch weiterhin auf Klick reagieren und noch eine zusätzliche Funktion hinzufügen, die wie folgt ausschaut?

          if ($b_transportauftrag  == 'Ja') {?>
          		$('div#transportauftrag_eingabe_box').show();
          		$('div#b_transportauftrag_von_box').show();
          		$('div#b_transportauftrag_bis_box').show();
          		$('div#box-transportauftrag_verschicken').hide();
          		$('div#retourenHinweis').show();
          		$('div#apvorOrt').hide();
          		$('div#angebot_location').hide();
          		$('div#keineInfo').hide();
          		$("#box_transportauftrag").removeClass("abstand_2");
          		$("#box_transportauftrag").addClass("abstand_1");
          		$("#ansprechpartner_vor_ort_ap").prop('required',false);
          		$("#ansprechpartner_vor_ort_ex").prop('required',false);
          		$("#b_transportauftrag_von").prop('required',true);
          		<?php if ($p_dauerausleihe == 0) { ?>
          		$("#b_transportauftrag_bis").prop('required',true);
          		<?php } ?>
          		<?php if ($p_dauerausleihe == 1) { ?>
          		$("#b_transportauftrag_bis").prop('disabled',true);
          		<?php } ?>
          <?php } ?>
          

          Und für Nein, dann genau das Gegenteil

          if ($b_transportauftrag  == 'Nein') {?>
          $('div#transportauftrag_eingabe_box').hide();
          		$('div#b_transportauftrag_von_box').hide();
          		$('div#b_transportauftrag_bis_box').hide();
          		$("#b_transportauftrag_von").val('');
          		$("#b_transportauftrag_bis").val('');
          		$("#transportauftrag_eingabe").val('');
          		$('div#box-transportauftrag_verschicken').show();
          		$('div#retourenHinweis').hide();
          		$('div#apvorOrt').show();
          		$('div#keineInfo').show();
          		$('div#angebot_location').show();
          		$("#ansprechpartner_vor_ort_ap").prop('required',true);
          		$("#ansprechpartner_vor_ort_ex").prop('required',true);
          		$("#b_transportauftrag_von").prop('required',false);
          		$("#b_transportauftrag_bis").prop('required',false);
          <?php } ?>
          
          1. würde es was bringen wenn

            Das kann derzeit wohl außer Dir keiner wissen, weil (wohl, jedenfalls ich nicht) keiner außer Dir den vorgesehenen "zeitlichen" und "örtlichen" Ablauf kennt.

            1. Was heißt Zeitlich und Örtlich? Ich glaube, ich habe alles genau erklärt was passieren soll? Ich merke schon, dir ist wieder alles zu viel. Lassen wir es am besten.

              Ich wollte nur wissen ob es so mit PHP möglich wäre. Dieses hat weder etwas mit Zeitlich noch mit Örtlich zu tun.

              1. Ok, folgendes würde gehen, aber die Felder werden erst nach 1-2 Sekunden geschlossen, was unschön ist. Muss ich aber mit leben

                $(':radio[name=transportauftrag]').click(function(){
                			    
                	if($(this).val() == 'Ja'){
                		$('div#transportauftrag_eingabe_box').show();
                		$('div#b_transportauftrag_von_box').show();
                		$('div#b_transportauftrag_bis_box').show();
                		$('div#box-transportauftrag_verschicken').hide();
                		$('div#retourenHinweis').show();
                		$('div#apvorOrt').hide();
                		$('div#angebot_location').hide();
                		$('div#keineInfo').hide();
                		$("#box_transportauftrag").removeClass("abstand_2");
                		$("#box_transportauftrag").addClass("abstand_1");
                		$("#ansprechpartner_vor_ort_ap").prop('required',false);
                		$("#ansprechpartner_vor_ort_ex").prop('required',false);
                		$("#b_transportauftrag_von").prop('required',true);
                		<?php if ($p_dauerausleihe == 0) { ?>
                		$("#b_transportauftrag_bis").prop('required',true);
                		<?php } ?>
                		<?php if ($p_dauerausleihe == 1) { ?>
                		$("#b_transportauftrag_bis").prop('disabled',true);
                		<?php } ?>
                
                
                	} else{
                		$('div#transportauftrag_eingabe_box').hide();
                		$('div#b_transportauftrag_von_box').hide();
                		$('div#b_transportauftrag_bis_box').hide();
                		$("#b_transportauftrag_von").val('');
                		$("#b_transportauftrag_bis").val('');
                		$("#transportauftrag_eingabe").val('');
                		$('div#box-transportauftrag_verschicken').show();
                		$('div#retourenHinweis').hide();
                		$('div#apvorOrt').show();
                		$('div#keineInfo').show();
                		$('div#angebot_location').show();
                		$("#ansprechpartner_vor_ort_ap").prop('required',true);
                		$("#ansprechpartner_vor_ort_ex").prop('required',true);
                		$("#b_transportauftrag_von").prop('required',false);
                		$("#b_transportauftrag_bis").prop('required',false);
                	}
                			
                });
                
                if ($b_transportauftrag  == 'Ja') {?>
                		$('div#transportauftrag_eingabe_box').show();
                		$('div#b_transportauftrag_von_box').show();
                		$('div#b_transportauftrag_bis_box').show();
                		$('div#box-transportauftrag_verschicken').hide();
                		$('div#retourenHinweis').show();
                		$('div#apvorOrt').hide();
                		$('div#angebot_location').hide();
                		$('div#keineInfo').hide();
                		$("#box_transportauftrag").removeClass("abstand_2");
                		$("#box_transportauftrag").addClass("abstand_1");
                		$("#ansprechpartner_vor_ort_ap").prop('required',false);
                		$("#ansprechpartner_vor_ort_ex").prop('required',false);
                		$("#b_transportauftrag_von").prop('required',true);
                		<?php if ($p_dauerausleihe == 0) { ?>
                		$("#b_transportauftrag_bis").prop('required',true);
                		<?php } ?>
                		<?php if ($p_dauerausleihe == 1) { ?>
                		$("#b_transportauftrag_bis").prop('disabled',true);
                		<?php } ?>
                <?php } ?>
                
                if ($b_transportauftrag  == 'Nein') {?>
                $('div#transportauftrag_eingabe_box').hide();
                		$('div#b_transportauftrag_von_box').hide();
                		$('div#b_transportauftrag_bis_box').hide();
                		$("#b_transportauftrag_von").val('');
                		$("#b_transportauftrag_bis").val('');
                		$("#transportauftrag_eingabe").val('');
                		$('div#box-transportauftrag_verschicken').show();
                		$('div#retourenHinweis').hide();
                		$('div#apvorOrt').show();
                		$('div#keineInfo').show();
                		$('div#angebot_location').show();
                		$("#ansprechpartner_vor_ort_ap").prop('required',true);
                		$("#ansprechpartner_vor_ort_ex").prop('required',true);
                		$("#b_transportauftrag_von").prop('required',false);
                		$("#b_transportauftrag_bis").prop('required',false);
                <?php } ?>
                
                

                Ist zwar jede Menge Code, aber besser als nichts.

                1. Ich mach es doch nicht so, ist viel zu viel Code was gepflegt werden muss. Ich habe mich für diese Variante entschieden

                  <div style="display: <?php if ($transportauftrag == 'Ja') {?> none <?php } else { ?> block <?php } ?>></div>
                  

                  Damit kann ich mein show und hide im jQuery Code unten lassen. Funktioniert.

                2. Hallo Bernd,

                  ein typischer Bernd-Code: Wir programmieren alles Stück für Stück neu, statt es logisch in Funktionen zusammenzufassen und diese aufzurufen. Der resultierende Code wäre signifikant kürzer. Copy+Paste ist nicht immer des Programmierers Freund.

                  Kann es übrigens sein, dass Du nicht alle PHP Start- und End-Tags mitkopiert hast? So wie dein Code gesetzt ist wechselst Du übergangslos zwischen JS und PHP, das wird Errors hageln.

                  Vorschläge:

                  1. Das, was im Eventhandler passiert und das, was PHP als Initialisierungscode ausgibt, ist das gleiche. Das sollte also in einer Funktion landen und nur die Funktion aufgerufen werden. Der Logikteil reduziert sich damit auf:
                  $(':radio[name=transportauftrag]').click(function(){
                  			    
                  	if($(this).val() == 'Ja'){
                  		enableTransportauftrag();
                  	} else{
                  		disableTransportauftrag();
                  	}
                  			
                  });
                  ?>                  // <<<--------- dieses PHP Ende fehlte bei Dir. Beim Kopieren vergessen?
                  if ($b_transportauftrag  == 'Ja') {?>
                  		enableTransportAuftrag();
                  <?php } ?>
                  
                  if ($b_transportauftrag  == 'Nein') {?>
                     disableTransportauftrag();
                  <?php } ?>
                  

                  Frage wäre hier noch, warum Du Ja und Nein separat abfragst. Gibt's einen dritten Wert? Wenn nicht, genügt statt des zweiten if ein else.

                  Du musst übrigens diese Funktionsaufrufe nicht so in deine Seite hineingenerieren. In einem Stück JavaScript, das nach dem Laden der Seite abläuft, kannst Du den Zustand des Radiobuttons abfragen und danach enable oder disable aufrufen, ohne dass PHP da mithelfen muss. Wo das bei Dir wäre, musst Du natürlich selbst wissen.

                  Die Funktionen enableTransportauftrag und disableTransportauftrag sollten sich im Wesentlichen invers zueinander verhalten. Mit .show und .hide ist das mühselig, aber es gibt auch noch .toggle. toggle(true) ist gleich show(), und toggle(false) ist gleich hide(). D.h. du kannst einen großen Teil deiner show/hide Logik herausfaktorisieren. Die folgende Funktion kann beides, show und hide, je nach dem, ob du true oder false übergibst. Ich habe sie mal mit activate bezeichnet, weil da noch mehr hinein kann als show und hide.

                  // Javascript
                  function activateTransportauftrag(active) {
                  	$('#transportauftrag_eingabe_box').toggle(active);
                  	$('#b_transportauftrag_von_box').toggle(active);
                  	$('#b_transportauftrag_bis_box').toggle(active);
                  	$('div#box-transportauftrag_verschicken').toggle(!active);     // NOT
                  	$('div#retourenHinweis').toggle(active);
                  	$('div#apvorOrt').toggle(!active);                            // NOT
                  	$('div#keineInfo').toggle(!active);                           // NOT
                  	$('div#angebot_location').toggle(active);
                  }
                  

                  D.h. enableTransportauftrag und disableTransportauftrag sähen so aus:

                  // Javascript
                  function enableTransportauftrag() {
                  	activateHideTransportauftrag(true);
                  	$("#box_transportauftrag").removeClass("abstand_2");
                  	$("#box_transportauftrag").addClass("abstand_1");
                  	$("#ansprechpartner_vor_ort_ap").prop('required',false);     // !!!
                  	$("#ansprechpartner_vor_ort_ex").prop('required',false);     // !!!
                  	$("#b_transportauftrag_von").prop('required',true);          // !!!
                  	<?php if ($p_dauerausleihe == 0) { ?>
                  	$("#b_transportauftrag_bis").prop('required',true);
                  	<?php }
                          if ($p_dauerausleihe == 1) { ?>
                  	$("#b_transportauftrag_bis").prop('disabled',true);
                  	<?php } ?>
                  }
                  function disableTransportauftrag() {
                  	activateHideTransportauftrag(false);
                  	$("#b_transportauftrag_von").val('');
                  	$("#b_transportauftrag_bis").val('');
                  	$("#transportauftrag_eingabe").val('');
                  	$("#ansprechpartner_vor_ort_ap").prop('required',true);     // !!!
                  	$("#ansprechpartner_vor_ort_ex").prop('required',true);     // !!!
                  	$("#b_transportauftrag_von").prop('required',false);        // !!!
                  	$("#b_transportauftrag_bis").prop('required',false);
                  }
                  

                  Die mit // !!! markierten Zeilen unterscheiden sich ebenfalls nur durch einen booleschen Wert und könnten aus beiden Funktionen entfernt und in activateTransportauftrag hinein faktorisiert werden. Sie würden am Ende hinzugefügt und sähen dort so aus:

                  function activateTransportauftrag(active) {
                  	// ... bisherigen Code übernehmen
                  	$("#ansprechpartner_vor_ort_ap").prop('required',!active);     // NOT
                  	$("#ansprechpartner_vor_ort_ex").prop('required',!active);     // NOT
                  	$("#b_transportauftrag_von").prop('required',active);
                  }
                  

                  Was in den enable- und disable Funktionen bleibt ist das Leeren von Feldern und das Umschießen von Klassen. Zu klären ist von Dir, was mit b_transportauftrag_bis ist - da wird in einem Zweig disabled auf true gesetzt, im anderen aber nicht auf false.

                  Ich möchte auch noch hinzufügen, dass ich von dieser show/hide Orgie nicht viel halte. ICH würde schauen, ob es einen gemeinsamen Container gibt auf dem man EINE Klasse setzt oder löscht, woraufhin sich der Rest über CSS Regeln automatisch zeigt oder versteckt.

                  Rolf

                  --
                  sumpsi - posui - clusi
                3. Ok, folgendes würde gehen, aber die Felder werden erst nach 1-2 Sekunden geschlossen, was unschön ist. Muss ich aber mit leben

                  Das wage ich zu bezweifeln.

                  Offenbar wird die ganze Seite auf dem Server neu gebaut. Also wird nach dem Klick etwas an den Webserver geschickt und der schickt eine neue Seite an den Browser. Daher die 1 - 2 Sekunden. Ich bezweifle konkret dass konkret das notwendig ist.

                  Ich frage mich also, warum Du die Blöcke nicht mittels JS im Browser ein- oder ausblendest. Sowas meine ich auch mit "zeitlichen" und "örtlichen" Ablauf:

                  WAS soll WESHALB, WANN und WO geschehen? Diese Frage ist nur Durch Dich plan- und beantwortbar.

                  Ich merke schon, dir ist wieder alles zu viel.

                  Nein. Genauer "eigentlich nicht". Goldrichtig: "nicht von Anfang an"! Du bist derjenige, der jede Menge "unschlankes und lineares Zeug" schreibt, dann merkt, dass er so nicht weiter kommt, hier und auch da fragt, und dann, wenn ihm die Vorschläge nach Arbeit aussehen, entäußert, dass er keine Lust auf die Umsetzung hat. Das gilt hier und auch bei der anderen Frage.

                  Bei den Bildern wäre es sogar recht einfach meinen Vorschlag umzusetzen. Und da offenbart sich eines: Du hast hier zumindest was größeres vor, aber Deinen Fragen nach mangelt es entweder am Wissen um Grundlagen (Was [PHP, JS] wird wo [auf dem Server, im Browser] und mit welchem Resultat, wann ausgeführt?) selbst oder an dessen Anwendung. Was Dich nicht davon abhält, erstmal Tonnen von linearem Quelltext (so sieht es auch Rolf) zu schreiben, die Du dann nicht zu ändern bereit bist.

                  Und wenn Du gute Ratschläge bekommst, dann maulst Du - jedenfalls nach meinem Empfinden - herum. Klar ist es nicht schön, wenn man merkt, dass man sich verrannt hat. Aber wenn man ein vierstöckiges Gebäude will, dann kann nicht einfach eine Baracke aufstocken. Die muss man abreisen und erst mal ein Fundament errichten. Und auf der Ratgeberseite sieht es so aus, dass die Lust am Ratgeben stark nachlässt wenn der eigentlich gut Beratschlagte schmollt statt die Ratschläge anzunehmen.

                  1. Offenbar wird die ganze Seite auf dem Server neu gebaut. Also wird nach dem Klick etwas an den Webserver geschickt und der schickt eine neue Seite an den Browser. Daher die 1 - 2 Sekunden. Ich bezweifle konkret dass konkret das notwendig ist.

                    Nein, die Seite wird auf dem Server nach Klick nicht neu gebaut wie du in meinem JS Teil eigentlich sehen müsstest. Es werden lediglich Felder ein bzw. ausgeblendet mehr nicht.

                    Ich frage mich also, warum Du die Blöcke nicht mittels JS im Browser ein- oder ausblendest. Sowas meine ich auch mit "zeitlichen" und "örtlichen" Ablauf:

                    Bitte? Kann es sein dass du dir mein JS Code überhaupt nicht angeschaut hast? Da mache ich es genau so wie du es gerade geschrieben hast, ich blende Blöcke ein und aus. Ich fühle mich gerade wie im falschen Film wenn ich mir dein Text durchlese.

                    Nein. Genauer "eigentlich nicht". Goldrichtig: "nicht von Anfang an"! Du bist derjenige, der jede Menge "unschlankes und lineares Zeug" schreibt, dann merkt, dass er so nicht weiter kommt, hier und auch da fragt, und dann, wenn ihm die Vorschläge nach Arbeit aussehen, entäußert, dass er keine Lust auf die Umsetzung hat. Das gilt hier und auch bei der anderen Frage.

                    Ich schreibe es so, wie ich es kann und wie ich es zum Teil in Tutorials sehe. Man muss nicht immer alles komplett neu erfinden und es reicht oftmals etwas fertiges zu verwenden wenn es auf den Teil passt den man gerade bearbeitet.

                    Bei den Bildern wäre es sogar recht einfach meinen Vorschlag umzusetzen. Und da offenbart sich eines: Du hast hier zumindest was größeres vor, aber Deinen Fragen nach mangelt es entweder am Wissen um Grundlagen (Was [PHP, JS] wird wo [auf dem Server, im Browser] und mit welchem Resultat, wann ausgeführt?) selbst oder an dessen Anwendung.

                    Nein, hättest du dazu vielleicht noch etwas geschrieben wäre es mir vielleicht gelungen es einzubauen. Machst du nicht, für dich ist alles klar, mag auch stimmen für mich nicht. Ich sehe z.B. in deinem Code nicht wo du festlegst woher die Bilder kommen wie ich es mache oder auch dass ich die Bilder beim aufrufen klein rechnen lasse.

                    Und da offenbart sich eines: Du hast hier zumindest was größeres vor

                    Was ich vorhabe und nicht musst du mir schon überlassen. Und nur an diesem Teil sieht man noch lange nicht dass ich etwas größeres vorhabe. Ich möchte nur ein paar Sachen automatisieren um es mir einfacher zu machen.

                    Was Dich nicht davon abhält, erstmal Tonnen von linearem Quelltext (so sieht es auch Rolf) zu schreiben, die Du dann nicht zu ändern bereit bist.

                    Und schon wieder bin ich in einem falschen Film? Was habe ich gestern Abend noch geschrieben? Kann es sein du liest überhaupt nicht was ich schreibe? Ich habe in meinem letzen Posting geschrieben es ist viel zu viel Code der da entsteht daher habe ich dieses wieder verworfen. Aber nein, so etwas wird von dir überhaupt nicht beachtet.

                    Und was Rolf geschrieben hat bezüglich show und hide war mir neu, denn überall wird dieses so wie ich es geschrieben habe vorgegeben. Man merkt du bist nicht viel auf Tutorialsseiten unterwegs.

                    Und wenn Du gute Ratschläge bekommst, dann maulst Du - jedenfalls nach meinem Empfinden - herum. Klar ist es nicht schön, wenn man merkt, dass man sich verrannt hat. Aber wenn man ein vierstöckiges Gebäude will, dann kann nicht einfach eine Baracke aufstocken. Die muss man abreisen und erst mal ein Fundament errichten. Und auf der Ratgeberseite sieht es so aus, dass die Lust am Ratgeben stark nachlässt wenn der eigentlich gut Beratschlagte schmollt statt die Ratschläge anzunehmen.

                    Du hast mich noch nie maulen gehört. Un ich habe mich nicht verrannt ich wusste nur nicht wie ich etwas umsetzten kann. Ob ich jetzt 200.000 Zeilen Code habe oder 2.000 ist für den Ablauf doch wohl egal. Ärgerlich nur wenn man den Code pflegen muss.

                    Und du kannst auch auf eine Baracke aufstocken wenn du diese gut sicherst und etwas drum herum baust.

                    1. Offenbar wird die ganze Seite auf dem Server neu gebaut. Also wird nach dem Klick etwas an den Webserver geschickt und der schickt eine neue Seite an den Browser. Daher die 1 - 2 Sekunden. Ich bezweifle konkret dass konkret das notwendig ist.

                      Nein, die Seite wird auf dem Server nach Klick nicht neu gebaut wie du in meinem JS Teil eigentlich sehen müsstest. Es werden lediglich Felder ein bzw. ausgeblendet mehr nicht.

                      Ich frage mich also, warum Du die Blöcke nicht mittels JS im Browser ein- oder ausblendest. Sowas meine ich auch mit "zeitlichen" und "örtlichen" Ablauf:

                      Bitte? Kann es sein dass du dir mein JS Code überhaupt nicht angeschaut hast?

                      Also ich sehe hier PHP:

                      	<?php if ($p_dauerausleihe == 0) { ?>
                      	$("#b_transportauftrag_bis").prop('required',true);
                      	<?php }
                              if ($p_dauerausleihe == 1) { ?>
                      	$("#b_transportauftrag_bis").prop('disabled',true);
                      	<?php } ?>
                      

                      und sehe da PHP:

                      <div style="display: <?php if ($transportauftrag == 'Ja') {?> none <?php } else { ?> block <?php } ?>></div>
                      

                      Und ich lese, dass Du von 1 bis 2 Sekunden schreibst. Nur mit JS müsste das sehr viel schneller gehen - es sei denn das läuft auf einem 386er, auf dem aber ein Browser mit so modernem JS nicht mehr zum Laufen zu bringen ist.

                      Der Vorwurf, dass ICH mir den Code nicht mal angesehen habe, geht an den erwiesenen Tatsachen vorbei.

                      Und du kannst auch auf eine Baracke aufstocken wenn du diese gut sicherst und etwas drum herum baust.

                      Und wie aufwendig, also teuer wird das? Sowas hat man früher mal in Istanbul gemacht, Erdogan lässt hunderte von dieser Sorte "Haus" mit guter Begründung abreisen.

                      1. Hallo ursus,

                        ja, den von dir zitierten Block hab ich auch nicht verstanden. Der wird einmal ausgeführt bevor die Seite an den Client geht, und sort dafür dass je nach Wert von $p_dauerausleihe das Script so ausgegeben wird, dass das Element #b_transportauftrag_bis entweder required oder disabled gesetzt wird. Ich habe das als "muss fachlich wohl so sein" abgehakt. Man könnte es anders lösen, indem man die Information zur Dauerausleihe irgendwie dem Client übermittelt und dort dann im JavaScript auswertet, aber wenn der Client diese Info nicht braucht, dann muss das nicht sein.

                        Ich hoffe nur, dass Bernd mit meinen Refaktorisierungsvorschlägen was anfangen kann.

                        Rolf

                        --
                        sumpsi - posui - clusi
                        1. Hallo,

                          bei mir im Shop kann man etwas bestellen was kein Rückgabedatum hat, dann muss dieses auch nicht ausgefüllt werden, da dieses immer um ein Jahr automatisch verlängert wird.

                          Dann gibt es Artikel die benötigen zwingend ein Rückgabedatum, dann muss das Feld natürlich ein Pflichtfeld werden. Diese Werte habe ich bereits, bevor ich die Seite aufrufe, daher habe ich dieses so umgesetzt.

                    2. Hallo Bernd,

                      Du hast mich noch nie maulen gehört.

                      Doch, haben wir schon. Habe grad nur keine Lust es rauszusuchen. Ich glaube, da ging's um den Kalender und eine Refaktorisierung, das war etwas komplizierter. Oder verwechsele ich dich da gerade?

                      Dass Du deinen linearen Code verworfen hast, das hatte ich übrigens nicht gesehen.

                      Und du kannst auch auf eine Baracke aufstocken wenn du diese gut sicherst und etwas drum herum baust.

                      Schade. Es ist SOWAS von schade. Ich hätte es gerne verlinkt. Ich finde nur keine Quelle. Vor vielen Jahren hatte ritsch-renn in der c't eine Schlagseite mit einem Bild, wo unten MS-DOS war, darüber Windows 95, darüber Win32s (ein Aufsatz auf Windows 95 zum Ausführen von 32-bit Programmen für Win NT). Ein glänzendes prächtiges Gebäude, aufgebaut auf einem schäbigen Dings, aufgebaut auf einer klapprigen Bruchbude. Rundum mit vibrierenden Streben abgestützt.

                      Also - ja, man kann. Aber man sollte nicht. Weil's schnell ärgerlich wird.

                      Rolf

                      --
                      sumpsi - posui - clusi
                      1. Hallo,

                        ich kann aber nicht ständig alles neu programmieren wenn ich nur an einer Stelle etwas geändert haben möchte oder muss. Die Seite hat, wenn ich ganz nach unten Scrolle mittlerweile 4251 Zeilen.

                        Wenn ich jedesmal alles ändern müsste, dann könnte ich nur noch an dieser Datei arbeiten und meine Hauptaufgabe links liegen lassen und meine Kunden würden die bestellte Ware nie erhalten, ist auch nicht wirklich gut.

                        Außerdem kann ich einige Sachen nicht einfach so ändern, da ich z.B. auf Scripte von Magento angewiesen bin. Wenn die etwas ändern muss ich es auch, wenn ich jetzt das Update auf die Version 2.0 einspielen würde, könnte ich alles in die Tonne treten, deshalb bleibe ich bei der alten Version und passe meine Scripte so an, dass es weiterhin funktioniert.

                        1. Wenn die etwas ändern muss ich es auch, wenn ich jetzt das Update auf die Version 2.0 einspielen würde, könnte ich alles in die Tonne treten, deshalb bleibe ich bei der alten Version und passe meine Scripte so an, dass es weiterhin funktioniert.

                          Bad, bad, bad! Dir ist schon klar, dass Du dann selbst auch Sicherheitspatches schreiben musst, Module für Zahlungssysteme selbst pflegen musst? Und das alles für Code der womöglich in Deinem Shop nicht mal benutzt werden soll.

                          Da ist es sehr einfacher, statt derart zu murksen, sich vorher mal ein Pflichtenheft zu schreiben, daraus dann die Programmdokumentation mit Mocks und dann den Ablaufplan und dann einen eigenen Webshop, der genau das kann, was er soll.

                          1. Mach dir da keine Sorgen. Dieses übernimmt wunderbar mein Webhoster. Der spielt alle Update ein die innerhalb einer Version passen. Wenn es gar nicht mehr geht wird ein Hinweis angezeigt, spätestens dann muss man drauf reagieren.

                            Ach ja bei mir im Shop kann man nicht bezahlen!

                            1. Ach ja bei mir im Shop kann man nicht bezahlen!

                              Aber der Code dafür ist vorhanden. Regel: "Mehr Code mehr Fehler."

      2. Die Frage ist nur, wie mache ich dieses? PHP kann ja kein Klick ausführen?

        Das Kann JS auch nicht. Die Frage ist, was Du eigentlich machen willst.

        MfG

        1. Hallo,

          nur zur Klarstellung: es gibt die Methode click(). Nach meiner Erfahrung funktioniert die auch bei Links.

          Gruß
          Jürgen

        2. Das Kann JS auch nicht. Die Frage ist, was Du eigentlich machen willst.

          Naja ich möchte beim Laden der Seite unter Umständen Felder ein bzw. ausblenden, abhängig vom Wert, welcher ich aus der Datenbank auslese. Weiterhin muss es natürlich sein auf einen Klick zu reagieren, denn die Felder sollen bearbeitbar sein.

          1. Hallo

            Das Kann JS auch nicht. Die Frage ist, was Du eigentlich machen willst.

            Naja ich möchte beim Laden der Seite unter Umständen Felder ein bzw. ausblenden, abhängig vom Wert, welcher ich aus der Datenbank auslese. Weiterhin muss es natürlich sein auf einen Klick zu reagieren, denn die Felder sollen bearbeitbar sein.

            Jetzt wird so langsam klar, worauf du hinaus willst. Das war es bisher leider nicht.

            Um das, was Jörg a.k.a. ursus contionabundo sagte, noch einmal (hoffentlich) klar auszudrücken:

            Von der Server- und PHP-Seite betrachtet

            Mit PHP erstellst du auf deinem Webserver ein HTML-Dokument. Wenn es an den Browser ausgeliefert wird, ist PHP mit seiner Arbeit fertig. Der Browser bekommt ein HTML-Dokument, dass es mit PHP erstellt wurde, interessiert ihn nicht.

            Du kannst beim erstellen des Dokuments aber natürlich den HTMl-Quelltext je nach Datenlage unterschiedlich aufbauen, Elemente weglassen oder einfügen, aus- oder einblenden, was immer du willst. Hinten kommt aber ein statisches HTML-Dokument heraus, das, so, wie es ist, an den Browser geliefert wird.

            Von der Browser- und damit der JavaScript-Seite betrachtet

            Ist das HTML-Dokument im Browser angekommen, wird es ganz notrmal angezeigt. Du kannst es dort auch mit JS-Techniken manipulieren, was du ja auch schon tust. Du kannst auch hier Elemente löschen und ein- oder ausblenden. Das wirkt sich aber erst einmal nur auf das fertig geladene Dokument aus.

            Wenn du neue Inhalte erzeugen willst und dazu Daten vom Server brauchst, kannst du mit Ajax/Fetch den Server kontaktieren, um sie anzufordern. Auf dem selben Weg kannst du auch Daten an den Server senden, um sie dort zu speichern. In beiden Fällen wirst du wahrscheinlich ein PHP-Skript auf dem Server ansprechen. Aber auch hier gilt: Das angesprochene Skript wird den Bedingungen entsprechend seinen Code ausführen und ein fertiges, statisches Ergebnis zurückliefern. Die Manipulation udn/oder Weiterverarbeitung der zurückgelieferten Daten obliegt nun wieder JavaScript im Browser.

            Tschö, Auge

            --
            Eine Kerze stand [auf dem Abort] bereit, und der Almanach des vergangenen Jahres hing an einer Schnur. Die Herausgeber kannten ihre Leser und druckten den Almanach auf weiches, dünnes Papier.
            Kleine freie Männer von Terry Pratchett
          2. Das Kann JS auch nicht. Die Frage ist, was Du eigentlich machen willst.

            Naja ich möchte beim Laden der Seite unter Umständen Felder ein bzw. ausblenden, abhängig vom Wert, welcher ich aus der Datenbank auslese.

            Kein Problem, das Laden der Seite ist ja ein Event. Notiere die diesbezügliche Handlerfunktion im Dokument-<script>-Bereich und setze dort den Wert mit PHP da rein.

            Weiterhin muss es natürlich sein auf einen Klick zu reagieren, denn die Felder sollen bearbeitbar sein.

            Klarer Fall für ein Formular.