Gerd: form action-Reaktion je nach Auswahl

Dies ist vermutlich ein typisches Anfängerproblem, aber ich weis keine Lösung.

Ich frage eine SQL-Datenbank ab. Dazu wähle ich in einem Form-Element mit mehrerer radio-Button den Umfang, wie Anzahl der auszuwertenden Tabellenspalten und den Zeitraum aus, mittels je einer radio-Button-Gruppe. Das Ergebnis wird nach drücken eines Weiter-Button in dem Form-Element durch Angabe der form-action-Eigenschaft in drei Diagrammen dargestellt. Das funktioniert alles schon sehr gut. Nun möchte ich das ganze erweitern, indem die gewählten Daten alternativ als Tabelle dargestellt werden sollen. Ich wollte dies durch einen zweiten alternativen button und einem eigenen Script realisieren kann aber dieses andere Script in der action-Eigenschaft nicht ändern. Bilde ich eigene form-Elemente für jeden button, dann werden die radio-button-Informationen der ersten form-Gruppe nicht übertragen. Das Problem ist sicher mit javascript zu lösen. Aber ich habe nichts dergleichen gefunden, was mir irgendwie helfen könnte. Und nun hoffe ich, dass mir hier jemand helfen kann. Ich würde mich sehr freuen. Danke.

  1. Hallo,

    Dies ist vermutlich ein typisches Anfängerproblem

    in gewisser Weise schon, aber auch Experten sind da manchmal betriebsblind.

    Nun möchte ich das ganze erweitern, indem die gewählten Daten alternativ als Tabelle dargestellt werden sollen. Ich wollte dies durch einen zweiten alternativen button und einem eigenen Script realisieren kann aber dieses andere Script in der action-Eigenschaft nicht ändern. Bilde ich eigene form-Elemente für jeden button, dann werden die radio-button-Informationen der ersten form-Gruppe nicht übertragen.

    Natürlich, weil immer nur die Daten eines Formulars übermittelt werden.

    Das Problem ist sicher mit javascript zu lösen. Aber ich habe nichts dergleichen gefunden, was mir irgendwie helfen könnte.

    Javascript wäre eine Möglichkeit: Auf den Klick auf einen der Absende-Buttons reagieren und das action-Attribut des Formulars ändern.

    Aber es geht auch eleganter: Fasse die beiden serverseitigen Aktionen in einem Script zusammen und unterscheide dort anhand des übermittelten Submit-Buttons (der andere wird in den übermittelten Daten fehlen), wie die Antwort aussehen soll.

    So long,
     Martin

  2. Hallo

    Nun möchte ich das ganze erweitern, indem die gewählten Daten alternativ als Tabelle dargestellt werden sollen. Ich wollte dies durch einen zweiten alternativen button und einem eigenen Script realisieren kann aber dieses andere Script in der action-Eigenschaft nicht ändern.

    Das brauchst du auch nicht. Wie @Der Martin schon schrieb, kannst du auf dem Server ein Skript ansprechen, dort aber anhand der übermittelten Daten entscheiden, welche der Darstellungen ausgegeben werden soll.

    Bilde ich eigene form-Elemente für jeden button, dann werden die radio-button-Informationen der ersten form-Gruppe nicht übertragen.

    Klar, sie gehören jetzt zu verschiedenen Formularen, von denen nur Eines seine Daten senden kann.

    Das Problem ist sicher mit javascript zu lösen. Aber ich habe nichts dergleichen gefunden, was mir irgendwie helfen könnte. Und nun hoffe ich, dass mir hier jemand helfen kann. Ich würde mich sehr freuen. Danke.

    Um Martins Posting zu ergänzen:

    Kein JavaScript, kein Voodoo. Setze mehrere <button> ein, deren Value-Werte sich unterscheiden. Werte die übermittelten Daten auf Basis des tatsächlich übermittelten Wertes aus.

    <form action="auswertung.php" method="post">
     <!-- … -->
     <input name="eingabe" type="text">
     <button name="send" value="1">Graphen erstellen</button>
     <button name="send" value="2">Tabellen erstellen</button>
     <button name="send" value="3">3D-Druck bestelltn</button>
    </form>
    
    <?php
    
    if (isset($_POST['send'])) {
      if ($_POST['send'] == '1') {
        // Anweisungen, um Graphen zu erstellen
      } else if ($_POST['send'] == '2') {
        // Anweisungen, um Tabellen zu erstellen
      } else if ($_POST['send'] == '3') {
        // Anweisungen, um 3D-Ausdruck zu bestellen
      }
    }
    
    ?>
    

    Tschö, Auge

    --
    Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
    Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
  3. Ich wollte dies durch einen zweiten alternativen button und einem eigenen Script realisieren kann aber dieses andere Script in der action-Eigenschaft nicht ändern.

    Alternativ zu den bereits genannten Vorschlägen kannst du auch das HTML-Attribut formaction verwenden.

    <form action="/create">
      <button>Speichern</button>
      <button formaction="/delete">Löschen</button>
    </form>
    

    Moderne Browser verstehen dieses Attribut. Nicht so moderne Browser leider nicht.

  4. Danke an Martin, Auge und 1unitedpower. @ 1unitedpower Ich möchte in kein Kompatibilitätsproblem stolpern. Deshalb werde ich deinen Vorschlag aussen vor lassen.

    @Martin, @Auge Ich sehe noch nicht, wie ich bei button-Ausführung weitere Parameter mitgeben kann. In meinem form-Element wird aus 5 Zeitspannen gewält und aus 6 Sensorgruppen. Diese Infos stehen bei einfachem submit-button zur weiteren Auswertung zur Verfügung. Aber nicht, wenn ich nur eine button-Kennung sende. Oder bin ich nur Anfänger-blind?

    Aber eine andere Idee: Ich könnte die Wahl Diagramm/Tabelle als dritte radio-Gruppe machen und habe dann auch nur ein Auswerte- und Darstellungsscipt. Aber... In meinem Script befindet sich im body ein div-Bereich, der die Anordnung und Positionen der Diagramme festlegt. Der stört bei der Tabellendarstellung, weil er den ganzen Bidschirm in Anspruch nimmt. Ich kenne leider keine Möglichkeit, diesen div-Bereich im Falle der Tabelle zu umgehen und evtl einen eigenen für die Tabelle zu verwenden. Ich müsste in HTML sowas wie Sprungmarken setzen können oder if-ifelse oder so. Bin leider unwissend. Gruß Gerd

    1. Hallo

      Ich sehe noch nicht, wie ich bei button-Ausführung weitere Parameter mitgeben kann.

      Du überträgst ja nicht nur den Wert eines der Buttons, sondern daneben auch die anderen Werte des Formulars.

      In meinem form-Element wird aus 5 Zeitspannen gewält und aus 6 Sensorgruppen.

      Diese Auswahl steht dir doch weiterhin zur Verfügung. Zusätzlich dazu hast du den Wert des benutzen Submit-Buttons. Anhand dieses Werts entscheidet sich die Darstellungsform jener Werte, die mit den anderen, bereits jetzt vorhandenen, Formularelementen ausgewählt wurden.

      Diese Infos stehen bei einfachem submit-button zur weiteren Auswertung zur Verfügung. Aber nicht, wenn ich nur eine button-Kennung sende.

      Was denkst du, ist der Unterschied zwischen dem Wert eines Buttons (von mehreren) und dem Wert eines Buttons (der allein steht)?

      Aber eine andere Idee: Ich könnte die Wahl Diagramm/Tabelle als dritte radio-Gruppe machen und habe dann auch nur ein Auswerte- und Darstellungsscipt. Aber...

      Kannst du machen. Das wäre aber gegenüber den mehreren Submit-Buttons auch nur eine andere Art der Auswahl. und sie ist meiner Meinung nach schwerer zu erfassen und zudem mit einem zusätzlichen Arbeitsschritt verbunden (Auswahl per Radio-Buttons und Klick des Submit-Buttons versus Auswahl per Klick auf den zutreffenden Submit-Button).

      Tschö, Auge

      --
      Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
      Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
      1. OK, verstanden. Ich hatte vermutlich einen ziemlichen Denkknoten. Wenn meine radio's in der selben form wie der submit-button, werden natürlich die Auswahlkriterien mit übertragen. Und if $_POST[...] setze ich bereits für die Diagramme ein. Natürlich ist es freundlicher 2 submit-button zu verwenden als radio und submit. Ich lande aber dann in EINER Auswertung.php für Diagramm und Tabelle und stehe dann vor dem gschilderten Problem: In meinem Script befindet sich im body ein div-Bereich, der die Anordnung und Positionen der Diagramme festlegt. Der stört bei der Tabellendarstellung, weil er den ganzen Bidschirm in Anspruch nimmt. Ich kenne leider keine Möglichkeit, diesen div-Bereich im Falle der Tabelle zu umgehen und evtl einen eigenen für die Tabelle zu verwenden. Gruß Gerd

        1. Hallo

          OK, verstanden. Ich hatte vermutlich einen ziemlichen Denkknoten. Wenn meine radio's in der selben form wie der submit-button, werden natürlich die Auswahlkriterien mit übertragen. Und if $_POST[...] setze ich bereits für die Diagramme ein.
          Natürlich ist es freundlicher 2 submit-button zu verwenden als radio und submit.

          Gut.

          Ich lande aber dann in EINER Auswertung.php für Diagramm und Tabelle und stehe dann vor dem gschilderten Problem:

          Das, was du im folgenden beschreibst, ist ein Darstellungsproblem. So, wie du es beschreibst, versuchst du, die Darstellung einer alternativen Ausgabe in ein Korsett, dass für eine andere Ausgabe erdacht wurde, hineinzupressen. Grundsätzlich gilt, wir können nichts zu etwas sagen, das wir nicht kennen. Das gilt auch für deinen uns unbekannten Code. Allerdings möchte ich dich anregen, etwas genereller über die Aufgabe nachzudenken.

          In meinem Script befindet sich im body ein div-Bereich, der die Anordnung und Positionen der Diagramme festlegt. Der stört bei der Tabellendarstellung, weil er den ganzen Bidschirm in Anspruch nimmt. Ich kenne leider keine Möglichkeit, diesen div-Bereich im Falle der Tabelle zu umgehen und evtl einen eigenen für die Tabelle zu verwenden.

          Ist dir das EVA-Prinzip (nicht das Buch) bekannt? Es geht darum, die Aufgaben in einer bestimmten Reihenfolge (Eingabe, Verarbeitung, Ausgabe) durchzuführen. Da die Eingabe in diesem Fall die Übergabe der Eingaben aus dem Formular darstellt, was ja mit dem Klick auf einen der Submit-Buttons bereits geschehen ist, bleiben V und A.

          Bei der Verarbeitung der Formulareingaben wird ja neben der Verarbeitung der Eingaben an sich auch entschieden, was damit zu geschehen hat (Diagramm oder Tabelle). An dieser Stelle, als Abschluss der Verarbeitung, erzeugst du den vollständigen für die Ausgabe gedachten Code (evtl. Bilder für Diagramme, HTML-Quelltext). Dieser Block soll für die jeweilige Art der Ausgabe angepasst (!) sein. Elemente, die du für die konkrete Ausgabe nicht brauchst, sollen nicht vorhanden sein. Du hast damit schlussendlich einen vollständigen Block, den du abschließend nur noch in die Seitenstruktur einsetzen (das A von EVA) musst.

          Konkreter geht es nur mit einem Blick auf den vorhandenen Code.

          Tschö, Auge

          --
          Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
          Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
          1. Das, was du im folgenden beschreibst, ist ein Darstellungsproblem. So, wie du es beschreibst, versuchst du, die Darstellung einer alternativen Ausgabe in ein Korsett, dass für eine andere Ausgabe erdacht wurde, hineinzupressen.

            Ja.

            Grundsätzlich gilt, wir können nichts zu etwas sagen, das wir nicht kennen. Das gilt auch für deinen uns unbekannten Code. s. U.

            Allerdings möchte ich dich anregen, etwas genereller über die Aufgabe nachzudenken. OK

            Ist dir das EVA-Prinzip (nicht das Buch) bekannt?

            eigentlich Ja.

            Konkreter geht es nur mit einem Blick auf den vorhandenen Code.

            Ich versuch's mal: Hier der Auswahl-Teil, Also das E.

            <html lang="de">
            	<head>
            		<meta charset="utf-8">
            		<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
            		<link rel="stylesheet" href="style.css">
            		<title>Heiz-Info Sync</title>
            		<h1>Unsere Heizung xi</h1>
            	</head>
            	<body>
            		<form action="sync_dia.php" method="post">
            		<!--form action="" method="post" -->
            			Welche Daten:
            			<br>
            			<table>
            				<input type="radio" id="DG" name="etage" value="DG">							
            					<label for="DG"> Dachgeschoss</label>
            				<input type="radio" id="OG" name="etage" value="OG">							
            					<label for="OG"> Obergeschoss</label>
            				<input type="radio" id="EG" name="etage" value="EG" checked="checked">							
            					<label for="EG"> Erdgeschoss</label>
            				<input type="radio" id="KG" name="etage" value="KG">						
            					<label for="KG"> Kellergeschoss</label>
            				<input type="radio" id="wa" name="etage" value="wa" disabled >								
            					<label for="wa"> Wasser</label>
            			</table>
            			<br><br>
            			Welche Zeitspanne:
            			<br>
            			<table>
            				<input type="radio" id="t" name="zeit" value="t">							
            					<label for="t"> 1 Tag </label>
            				<input type="radio" id="d" name="zeit" value="d" checked="checked">							
            					<label for="d"> 3 Tage </label>
            				<input type="radio" id="w" name="zeit" value="w">	
            					<label for="w"> 1 Woche </label>
            				<input type="radio" id="m" name="zeit" value="m">	
            					<label for="m"> 1 Monat </label>
            				<input type="radio" id="j" name="zeit" value="j" disabled >	
            					<label for="j"> 1 Jahr </label>
            			</table>
            			<br><br>
            			Welche Darstellung:
            			<br>
            			<table>
            				<button name="darst" value="dia"> Diagramm </button>
            				<button name="darst" value="tab"> Tabelle  </button>
            			</table>
            			<br>
            		</form
            	</body>
            </html>
            
            

            Und jetzt das V in php und das A in javascript (nur für Diagramm, Tabelle fehlt), eingebettet in HTML.

            <html lang="de">
            	<head>
            		<meta charset="utf-8">
            		<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
            		<link rel="stylesheet" href="style.css">
            		<title>syncro</title>
            		<h1>Unsere Heizung xi</h1>
            		<script type="text/javascript" src="/dygraph/dygraph-combined-dev.js"></script>
            		<script type="text/javascript" src="/dygraph/synchronizer.js"></script>
            
            		<script type="text/javascript" src="/dygraph/data.js"></script>
            	<!-- Definitionen -->
             		<style>
            			.chart_temp { width: 1500px; height: 300px; }
            			.chart_digi { width: 1500px; height: 150px; }
            			.chart-container { overflow: hidden; }
            			.legende {}
            			#diagramm1 { float: left; border: 3px; }
             			#diagramm2 { float: left; border: 3px; clear: left }
            			#diagramm3 { float: left; border: 3px; clear: left }
            			#legende1 { float: left; border: 3px; }
             			#legende2 { float: left; border: 3px, }
            			#legende3 { float: left; border: 3px, }
            		</style>
            	</head>
            
            	<body>
            		<?php
            	        $etage       = $_POST["etage"];	// DG OG EG KG Wa
            	        $zeitraum    = $_POST["zeit"];	// t(ag) d(3tage) w(oche) m(onat) j(ahr)
            	        $darstellung = $_POST["darst"];	// dia(gramm) tab(elle)
            			include 'dbconnect.php';
            
            			$connection = mysqli_connect($MyHostname, $MyUsername, $MyPassword, $mysql_db) or die("Verbindung zur Datenbank fehlgeschlagen.");
            			
            // ----------------------------------------------------------------------------------------
            // ETAGE-Auswahl - LABEL erzeugen - SPALTEN ermitteln
            	
            									// etage    = DG, OG, EG, KG, Wa, Ha??, He??
            									// bez      = Kurzbezeichnung max. 4 Zeichen
            									// name     = Lang-Bezeichnung max. 20 Zeichen
            									// art      = z. Zt. Raum, FBH, Aussen, Solar, Speicher
            									// Solltemp = Solltemperatur, nur bei Raum, sonst 0 (Null)
            			$abfrage_etage = "SELECT bez, name, art, solltemp 
            				FROM $tab_sens 
            				WHERE (etage = '$etage')";
            			$ergebnis_etage = mysqli_query($connection, $abfrage_etage);
            			if (!$ergebnis_etage) die ("Fehler in Abfrage Etage: <br>(". mysqli_connect_errno() .")". mysqli_connect_error() . "<br>"); // Fehlerinfo
            
            			$spalten_raum = "";
            			$spalten_fbh  = "";
            			$label_temp   = "[\"date\""; 
            			$label_fbh    = "[\"date\"";
            			$label_digi   = "[\"date\"";
            			$n_raum = 0;
            			$n_fbh  = 0;
            			while ($row_sens = mysqli_fetch_array($ergebnis_etage)) {
            				if ($row_sens[art] 		== "Raum") {
            					$array_raum[$n_raum] = $row_sens[bez];
            					$spalten_raum 		.= ", ".$row_sens[bez]."T, ".$row_sens[bez]."S, ".$row_sens[bez]."D";
            					$label_temp   		.= ", \"".$row_sens[name]."\", \"".$row_sens[name]." Soll\"";
            					$label_digi   		.= ", \"".$row_sens[name]."\"";
            					$n_raum        		+= 1;
            				}
            				elseif ($row_sens[art]  == "FBH") {
            					$array_fbh[$n_fbh]   = $row_sens[bez];
            					$spalten_fbh  		.= ", ".$row_sens[bez]."T";
            					$label_fbh    		.= ", \"".$row_sens[name]."\"";
            					$n_fbh         		+= 1;
            				}
            				//elseif ($row_sens[art] == "xxx") { // Speicher, Solar, Aussen ??????
            				//}
            			}
            			$label_temp .= "]"; 
            			$label_fbh  .= "]";
            			$label_digi .= "]";
            			
            // ----------------------------------------------------------------------------------------
            // ZEIT-Auswahl			
            			$time = time();
            			$tag = 24*60*60;
            			
            			switch ($zeitraum) {
            				case "t":
            					$start = $time - $tag;
            					break;
            				case "d":
            					$start = $time - (3 * $tag);
            					break;
            				case "w":
            					$start = $time - (7 * $tag);
            					break;
            				case "m":
            					$start = $time - (30 * $tag);
            					break;
            				case "j":
            					$start = $time - (90 * $tag);
            					break;
            			}
            			$start = date('Y-m-d H:i:s',"$start <br>");
            // ----------------------------------------------------------------------------------------
            // Daten-abfrage	
            				// Sortierung geht nur normal/aufsteigend
            			$abfrage_raum = "SELECT DATE_FORMAT(zeit_ardu, '%Y/%m/%d %H:%i:%s') AS date, zeit_ardu $spalten_raum 
            				FROM $tab_temp 
            				Where (zeit_ardu >= '$start') 
            				ORDER BY date";
            				
            			$ergebnis_raum = mysqli_query($connection, $abfrage_raum);
            			$str_temp = "[ ";
            			$str_digi = "[ ";
            			while($row = mysqli_fetch_array($ergebnis_raum)) {	// $row ist ein assoziatives Zeilen-Array
            				$str_temp .= "["." new Date(\"".$row[date]."\")";
            				$str_digi .= "["." new Date(\"".$row[date]."\")";
            				for ($i = 0; $i < $n_raum; $i++) {
            					$stst = $array_raum[$i];
            					$str_temp .= ", ".$row[$stst."T"].", ".$row[$stst."S"];
            					$str_digi .= ", ".($row[$stst."D"] + ($n_raum - 1 - $i));
            				}
            				$str_temp .= " ], ";
            				$str_digi .= " ], ";
            			}
            			$str_temp .= " ]";
            			$str_digi .= " ]";
            				
            			$abfrage_fbh = "SELECT DATE_FORMAT(zeit_ardu, '%Y/%m/%d %H:%i:%s') AS date, zeit_ardu $spalten_fbh 
            				FROM $tab_temp 
            				Where (zeit_ardu >= '$start') 
            				ORDER BY date";
            
            			$ergebnis_fbh = mysqli_query($connection, $abfrage_fbh);
            			$str_fbh = "[ ";
            			while($row_fbh = mysqli_fetch_array($ergebnis_fbh)) {	// $row ist ein assoziatives Zeilen-Array
            				$str_fbh .= "["." new Date(\"".$row_fbh[date]."\")";
            				for ($i_fbh = 0; $i_fbh < $n_fbh; $i_fbh++) {
            					$stst = $array_fbh[$i_fbh];
            					$str_fbh .= ", ".$row_fbh[$stst."T"];
            				}
            				$str_fbh .= " ], ";
            			}
            			$str_fbh .= " ]";
            			
            		?>
            <!-- ENDE PHP --- BEGINN JAVASCRIPT -->	
            
            		<div class="chart-container">
            			<!-- Achtung Reihenfolge => Anordnung -->
            			<div id="diagramm1" class="chart_temp"></div>
            			<div id="legende1" class="legende"></div>
             			<div id="diagramm2" class="chart_temp"></div>
            			<div id="legende2" class="legende"></div>
            			<div id="diagramm3" class="chart_digi"></div>
            			<div id="legende3" class="legende"></div>
            		</div>
            
            		
            		<script type="text/javascript">
            <!-- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -->
            				gA = new Dygraph( 
            					document.getElementById("diagramm1"), 
            			<!-- Daten -->	
            					<?php echo $str_temp; ?> ,
            			<!-- Optionen -->							
            					{ 
            						title: 'Raumtemperaturen - <?php echo $etage; ?>',
            						rightGap: 20,				//rechter Rand
            					// Legende
            						labelsDiv: document.getElementById('legende1'),
            						labelsSeparateLines: true,
            						labelsKMB: NaN,
            						legend: 'always',
            						labels: <?php echo $label_temp; ?>,
            					// Achsen
            						ylabel: 'Temperatur (C)',
            						connectSeparatedPoints: NaN,
            						colors: ['red', 'red', 'blue', 'blue', 'green', 'green', 'orange', 'orange', 'yellow', 'yellow'],
            						strokeWidth: [2, 4],
            						//pointSize:  3,
            					// RangeSelector
            						showRangeSelector: true
            					}
            				);
            <!-- BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -->
            				gB = new Dygraph(
            					document.getElementById("diagramm2"), 
            		<!-- Daten -->							
            					<?php echo $str_fbh;	?> ,
            		<!-- Optionen -->							
            					{ 
            						title: 'Fu&szlig;bodenheizung - <?php echo $etage; ?>',
            						rightGap: 20,				//rechter Rand
            					// Legende
            						labelsDiv: document.getElementById('legende2'),
            						labelsSeparateLines: true,
            						labelsKMB: NaN,
            						legend: 'always',
            						labels: <?php echo $label_fbh; ?>,
            					// Achsen
            						ylabel: 'Temperatur (C)',
            						connectSeparatedPoints: NaN,
            						colors: ['black', 'red', 'blue', 'green', 'orange', 'magenta'],
            					}
            				);
            <!-- CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC -->
            				gC = new Dygraph(
            					document.getElementById("diagramm3"), 
            		<!-- Daten -->							
            					<?php echo $str_digi; ?> ,
            		<!-- Optionen -->							
            					{ 
            						title: 'Heizkreisventile - <?php echo $etage; ?>',
            						rightGap: 20,				//rechter Rand
            					// Legende
            						labelsDiv: document.getElementById('legende3'),
            						labelsSeparateLines: true,
            						labelsKMB: NaN,
            						legend: 'always',
            						labels: <?php echo $label_digi; ?>,
            					// Achsen
            						//xlabel: 'Zeit',
            						ylabel: 'Aus/Ein',
            						connectSeparatedPoints: NaN,
            						colors: ['red', 'blue', 'green', 'orange', 'yellow'],
            					}
            				);
            				<!-- hiermit werden die Diagramme zusammengebunden -->
            				var sync = Dygraph.synchronize([gA, gB, gC], {selection: true, range: false});
            		</script> <!-- Ende text/javascript -->
            		<form action="sync_auswahl.html" method="post">
            			<br>
            			<input type="submit" value="zur&uuml;ck zur Auswahl">
            		</form>
            	</body>
            </html>
            

            Ich hoffe, das erschlägt nicht und trägt zur Klärung bei. Gruß Gerd

            1. Hallo

              zuallererst: Bitte unterlasse es, die Einrückungen, die die Forensoftware in die Postings einfügt, zu entfernen. Ich musste dein Posting dreimal lesen, um zu rekonstruieren, welche Texte von mir und welche von dir stammen.

              Allerdings möchte ich dich anregen, etwas genereller über die Aufgabe nachzudenken.

              OK

              Konkreter geht es nur mit einem Blick auf den vorhandenen Code. Ich versuch's mal:
              Hier der Auswahl-Teil, Also das E.

              Den lasse ich erst einmal weg, auch wenn er selbst schon voller HTML-Fehler steckt. Nur mal zum Offensichtlichsten: Der Einsatz von <table> erfordert auch den Einsatz von <tr> sowie (optional) <th> und <td>. Für die vermutlich angestrebte Struktur bietet sich bei dir stattdessen <fieldset> und <legend> an. Details findest du im Wiki.

              Und jetzt das V in php und das A in javascript (nur für Diagramm, Tabelle fehlt), eingebettet in HTML.

              Schon die Verarbeitung auf dem Server per PHP würde ich von der HTML-Struktur trennen. Da du per PHP Werte in den JavaScript-Teil schreibst, beließe ich den PHP-Code in der Datei, würde ihn, der Entkoppelung wegen, aber vor dem HTML-Teil notieren. Dazu, dass ich die Sache völlig anders anginge, weiter unten.

              		<?php
              	        $etage       = $_POST["etage"];	// DG OG EG KG Wa
              	        $zeitraum    = $_POST["zeit"];	// t(ag) d(3tage) w(oche) m(onat) j(ahr)
              	        $darstellung = $_POST["darst"];	// dia(gramm) tab(elle)
              

              Soweit ich deinen Code überblicke, brauchst du diesen Umkopierschritt nicht. Du benutzt die Eingaben (momentan bis auf $_POST["darst"]) direkt in Abfragen (dazu gleich mehr) und in einem Switch-Case und verarbeitest sie nicht durch weitere Umwandlungen. Du kannst an den entsprechenden Stellen nach der Prüfung auf das Vorhandensein und den erlaubten Wertebereich durchaus die $_POST-Werte direkt benutzen.

              			$abfrage_etage = "SELECT bez, name, art, solltemp 
              				FROM $tab_sens 
              				WHERE (etage = '$etage')";
              			$ergebnis_etage = mysqli_query($connection, $abfrage_etage);
              

              Fange bösartige und Fehleingaben ab, indem du die aus Variablen stammenden Angaben mit mysqli_real_escape_string kontextgerecht maskierst. Das ist ein Muss!

              Wenn ich sonst nichts weiter ändern wollte, sähe das folgendermaßen aus.

              $abfrage_etage = "SELECT bez, name, art, solltemp
              FROM $tab_sens
                  WHERE (etage = '" . mysqli_real_escape_string($connection ,$etage) . "')";
              

              Oder, da das äußere Klammerpaar in der Where-Klausel optional sein dürfte:

              $abfrage_etage = "SELECT bez, name, art, solltemp
              FROM $tab_sens
                  WHERE etage = '" . mysqli_real_escape_string($connection ,$etage) . "'";
              

              Soweit zu PHP.

              <!-- ENDE PHP --- BEGINN JAVASCRIPT -->	
              
              		<div class="chart-container">
              			<!-- Achtung Reihenfolge => Anordnung -->
              			<div id="diagramm1" class="chart_temp"></div>
              			<div id="legende1" class="legende"></div>
               			<div id="diagramm2" class="chart_temp"></div>
              			<div id="legende2" class="legende"></div>
              			<div id="diagramm3" class="chart_digi"></div>
              			<div id="legende3" class="legende"></div>
              		</div>
              

              So, da isser. Du hast diesen fest im HTML-Quelltext notierten Block, den du mit dem folgenden JavaScript-Teil ausfüllst. Du liest also die Daten, die nachher auf deiner Seite stehen sollen, per PHP aus einer Datenbank, fügst die ermittelten Werte in den JavaScript-Quelltext ein und übermittelst das Ergebnis als Kombination aus HTML und JavaScript an den Browser, damit dieser daraus eine Ausgabe generiert.

              Nun bin ich kein JavaScript-Crack, aber ich finde im JavaScript-Code nichts, was ich nicht auch schon auf dem Server per PHP erledigen könnte. Auf dem Server könnte ich also sowohl die Ausgabe generieren, wie du sie jetzt per JavaScript generierst, als auch ausschließlich die benötigten HTML-Elemente erzeugen und nicht alle Elemente im HTML-Quelltext haben, auch wenn ich sie nicht brauche. Der Ehrlichkeit halber sei dazugesagt, dass du auch mit JavaScript nur eines der Elemente (div.chart-container) brauchst und das passende (#diagramm1 oder #diagramm2 oder #diagramm2 mit passender Legende) on the fly per JavaScript erzeugen kannst.

              Dennoch würde ich diese Elemente schon auf dem Server erzeugen und befüllen und mit dem fertigen Dokument an den Browser ausliefern. JavaScript würde ich hier nur für weitere Komfortfunktionen benutzen.

              Tschö, Auge

              --
              Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
              Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
              1. zuallererst: Bitte unterlasse es, die Einrückungen, die die Forensoftware in die Postings einfügt, zu entfernen. Ich musste dein Posting dreimal lesen, um zu rekonstruieren, welche Texte von mir und welche von dir stammen.

                ???? Ich bin mir keiner Schuld bewusst. Auch diesmal ändere ich an den Einzügen nichts. Dass die Forensoftware einfluss nimmt ist an den Listings zu erkennen: Sie verdoppelt z. B. die Weite der Einzüge. Ich habe mal ein Bild, wie die Vorsachau bei mir aussieht eingefügt.

                Alternativ-Text>

                Nur mal zum Offensichtlichsten: Der Einsatz von <table> erfordert auch den Einsatz von <tr> sowie (optional) <th> und <td>. Für die vermutlich angestrebte Struktur bietet sich bei dir stattdessen <fieldset> und <legend> an. Details findest du im Wiki.

                OK

                Schon die Verarbeitung auf dem Server per PHP würde ich von der HTML-Struktur trennen. Da du per PHP Werte in den JavaScript-Teil schreibst, beließe ich den PHP-Code in der Datei, würde ihn, der Entkoppelung wegen, aber vor dem HTML-Teil notieren. Dazu, dass ich die Sache völlig anders anginge, weiter unten.

                Heisst das, dass der php-Teil vor dem <HEAD> oder sogar vor dem <HTML> stehen darf?

                      $etage       = $_POST["etage"];	// DG OG EG KG Wa
                      $zeitraum    = $_POST["zeit"];	// t(ag) d(3tage) w(oche) m(onat) j(ahr)
                      $darstellung = $_POST["darst"];	// dia(gramm) tab(elle)
                

                Soweit ich deinen Code überblicke, brauchst du diesen Umkopierschritt nicht. Du benutzt die Eingaben (momentan bis auf $_POST["darst"]) direkt in Abfragen (dazu gleich mehr) und in einem Switch-Case und verarbeitest sie nicht durch weitere Umwandlungen. Du kannst an den entsprechenden Stellen nach der Prüfung auf das Vorhandensein und den erlaubten Wertebereich durchaus die $_POST-Werte direkt benutzen.

                Für mich verdeutlicht das den Datenfluss. Das ist die Schnittstelle zwischen Auswahl und Verarbeitung.

                  	$abfrage_etage = "SELECT bez, name, art, solltemp 
                  		FROM $tab_sens 
                  		WHERE (etage = '$etage')";
                  	$ergebnis_etage = mysqli_query($connection, $abfrage_etage);
                

                Fange bösartige und Fehleingaben ab, indem du die aus Variablen stammenden Angaben mit mysqli_real_escape_string kontextgerecht maskierst. Das ist ein Muss!

                Ja. Ist mir bekannt. Aber wenn das ganze Ding noch nicht das tut was ich möchte, wende ich auch keine Mühe darauf. Das ganze läuft nur im eigenen Netz.

                Oder, da das äußere Klammerpaar in der Where-Klausel optional sein dürfte:

                Ich setze gern Klammern. Es ist für mich besser lesbar. Auch später.

                  <div class="chart-container">
                  	<!-- Achtung Reihenfolge => Anordnung -->
                  	<div id="diagramm1" class="chart_temp"></div>
                  	<div id="legende1" class="legende"></div>
                  	<div id="diagramm2" class="chart_temp"></div>
                  	<div id="legende2" class="legende"></div>
                  	<div id="diagramm3" class="chart_digi"></div>
                  	<div id="legende3" class="legende"></div>
                  </div>
                

                So, da isser. Du hast diesen fest im HTML-Quelltext notierten Block, den du mit dem folgenden JavaScript-Teil ausfüllst. Du liest also die Daten, die nachher auf deiner Seite stehen sollen, per PHP aus einer Datenbank, fügst die ermittelten Werte in den JavaScript-Quelltext ein und übermittelst das Ergebnis als Kombination aus HTML und JavaScript an den Browser, damit dieser daraus eine Ausgabe generiert.

                Sorry. Die ganze Diagramm-Geschichte ist abgekupfert. (Wie vieles andere auch. Ich lerne anhand von konkreten Beispielen). Ich habe sie nur für mich zum Laufen gebracht. aufgrund meiner Unkenntnis bin ich (noch?) nicht in Lage daran Grundsätzliches zu ändern.

                Nun bin ich kein JavaScript-Crack, aber ich finde im JavaScript-Code nichts, was ich nicht auch schon auf dem Server per PHP erledigen könnte.

                Die Grafik-Erzeugung mittels dygraph ist eine java-Anwendung von Google. Da komme ich um Java nicht herum. Und die Aufbereitung der Daten, d.h. die Zusammenstellung der Strings erfolgt doch schon in php. Mehr Aufgaben sehe ich für php nicht.

                Auf dem Server könnte ich also sowohl die Ausgabe generieren, wie du sie jetzt per JavaScript generierst,

                Das kann ich nicht.

                Dennoch würde ich diese Elemente schon auf dem Server erzeugen und befüllen und mit dem fertigen Dokument an den Browser ausliefern. JavaScript würde ich hier nur für weitere Komfortfunktionen benutzen.

                Schön wenn wenn man das kann. Ich bin bereit zu lernen.

                Danke für die viele Mühe. Gerd

                1. Hallo Gerd,

                  ???? Ich bin mir keiner Schuld bewusst. Auch diesmal ändere ich an den Einzügen nichts. Dass die Forensoftware einfluss nimmt ist an den Listings zu erkennen: Sie verdoppelt z. B. die Weite der Einzüge.

                  Sprichst du von Tabs?

                  Nein, die Forensoftware verdoppelt hier gar nichts. Die Weite von Tabs ist nicht definiert, deshalb muss ich eine beliebige Weite wählen (weshalb viele Entwickler Spaces statt Tabs bevorzugen). Und hier ist es sogar die Standard-Weite des Browsers (8 Zeichen).

                  Was genau Auge jetzt meint ist mir auch nicht klar.

                  LG,
                  CK

                  1. Hallo

                    ???? Ich bin mir keiner Schuld bewusst. Auch diesmal ändere ich an den Einzügen nichts. … Was genau Auge jetzt meint ist mir auch nicht klar.

                    Ich meinte, dass Gerd an einigen (nicht allen) Stellen einzelne führende Zitatmarkierungen „> “ entfernte und damit die Einrücktiefe, also die Unterscheidbarkeit von „von mir, von dir“, nicht mehr stimmte.

                    Zur Verdeutlichung: In diesem von Gerd stammenden Posting stammt der erste Absatz nach der Begrüßung von mir und ist auch so ausgezeichnet. Das folgende „Ja“ stammt von ihm und die nächsten drei, jeweils einzeln in eigenen Absätzen stehenden Sätze wieder von mir. Die ersten zwei dieser Sätze sehen hier aber aus, als stammten sie von ihm, weil die Zitatmarkierung fehlt.

                    Das ist, was mich verwirrte.

                    Tschö, Auge

                    --
                    Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
                    Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
  5. Nun möchte ich das ganze erweitern, indem die gewählten Daten alternativ als Tabelle dargestellt werden sollen. Ich wollte dies durch einen zweiten alternativen button und einem eigenen Script realisieren kann aber dieses andere Script in der action-Eigenschaft nicht ändern.

    Das wäre auch umständlich. Kurzum: Hier werte ich mehrere Submit-Buttons aus, mit oder ohne JS und beschreibe auch wies geht.

    Schalte JS ab, so erfolgt normale Submit. Wenn JS aktiv, läufts per ajax.