Ajax mit MySQL und Google Charts – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Ajax mit MySQL und Google Charts Mon, 18 Feb 19 09:33:18 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742857#m1742857 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742857#m1742857 <p>Liebes Forum,</p> <p>ich bin Programmieranfängerin und schlage mich gerade das erste Mal mit Ajax herum.<br> Ich habe die jQuery-Variante gewählt und möchte bei Auswahl eines Datums in einem Select-Menü dieses über Ajax an meine Datenbankabfrage(MySQL) senden, aus dem Ergebnis der Abfrage ein JSON-Objekt generieren und dieses dann meiner Google-Charts-Funktion füttern, um es in Form einer Pie-Chart angezeigt zu bekommen.<br> Angezeigt wird mir tatsächlich auch eine Pie-Chart mit Datenbank-Daten, nur leider immer von Anfang 2017, statt mit den gefütterten Daten aus 2019. Ich habe schon cache: false ergänzt, GET und POST versucht und alles rauf und runter überprüft, finde aber den Fehler nicht.<br> Das ist mein Code (jQuery wird in einem der Header geladen; genauso öffnende und schließende Head-, Body- und HTML-Tags. Für die Testung habe ich auch Prepared Statements erst einmal weggelassen):</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">include_once</span> <span class="token string single-quoted-string">'header2.php'</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>style</span><span class="token punctuation">></span></span><span class="token style"><span class="token language-css"> <span class="token selector">html, body</span> <span class="token punctuation">{</span> <span class="token property">height</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">width</span><span class="token punctuation">:</span> 100%<span class="token punctuation">;</span> <span class="token property">margin</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token property">padding</span><span class="token punctuation">:</span> 0<span class="token punctuation">;</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>style</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>Aufträge<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span> <span class="token comment"><!--AJAX API laden--></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/javascript<span class="token punctuation">"</span></span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.gstatic.com/charts/loader.js<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token comment"><!-- jQuery wurde schon in einem der Header geladen --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>text/javascript<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript"> <span class="token comment">// Visualization API und Piechart Package laden</span> google<span class="token punctuation">.</span>charts<span class="token punctuation">.</span><span class="token function">load</span><span class="token punctuation">(</span><span class="token string">'current'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string-property property">'packages'</span><span class="token operator">:</span><span class="token punctuation">[</span><span class="token string">'corechart'</span><span class="token punctuation">]</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Erstellen einer Callback-Funktion, die ablaufen soll, wenn die Google Visualization API geladen ist.</span> google<span class="token punctuation">.</span>charts<span class="token punctuation">.</span><span class="token function">setOnLoadCallback</span><span class="token punctuation">(</span>ajaxChart<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">ajaxChart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Event Listener an Select-Element</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#selectinput"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">change</span><span class="token punctuation">(</span>drawChart<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">drawChart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> $<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">url</span><span class="token operator">:</span> <span class="token string">'ajax/fotografen.php'</span><span class="token punctuation">,</span> <span class="token literal-property property">type</span><span class="token operator">:</span> <span class="token string">'POST'</span><span class="token punctuation">,</span> <span class="token literal-property property">data</span><span class="token operator">:</span><span class="token punctuation">{</span><span class="token literal-property property">datum</span><span class="token operator">:</span> <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#selectinput"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">val</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token comment">// data: 'datum=' + $("#selectinput").val(),</span> <span class="token literal-property property">dataType</span><span class="token operator">:</span> <span class="token string">'json'</span><span class="token punctuation">,</span> <span class="token literal-property property">cache</span><span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">responseText</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Antwort von php soll für Data Table verwendet werden</span> <span class="token keyword">var</span> data <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google<span class="token punctuation">.</span>visualization<span class="token punctuation">.</span>DataTable</span><span class="token punctuation">(</span>responseText<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">var</span> chart <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">google<span class="token punctuation">.</span>visualization<span class="token punctuation">.</span>PieChart</span><span class="token punctuation">(</span>document<span class="token punctuation">.</span><span class="token function">getElementById</span><span class="token punctuation">(</span><span class="token string">'chart_div'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">var</span> options <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token literal-property property">title</span><span class="token operator">:</span> <span class="token string">'Aufträge pro Fotograf'</span><span class="token punctuation">,</span> <span class="token literal-property property">titleTextStyle</span><span class="token operator">:</span> <span class="token punctuation">{</span> <span class="token literal-property property">color</span><span class="token operator">:</span> <span class="token string">'orange'</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token literal-property property">is3D</span><span class="token operator">:</span> <span class="token string">'true'</span><span class="token punctuation">,</span> <span class="token literal-property property">width</span><span class="token operator">:</span> <span class="token number">800</span><span class="token punctuation">,</span> <span class="token literal-property property">height</span><span class="token operator">:</span> <span class="token number">600</span> <span class="token punctuation">}</span><span class="token punctuation">;</span> chart<span class="token punctuation">.</span><span class="token function">draw</span><span class="token punctuation">(</span>data<span class="token punctuation">,</span> options<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function-variable function">error</span><span class="token operator">:</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">jqXHR<span class="token punctuation">,</span> textStatus<span class="token punctuation">,</span> errorThrown</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>errorThrown <span class="token operator">+</span> <span class="token string">': '</span> <span class="token operator">+</span> textStatus<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">include_once</span> <span class="token string single-quoted-string">'header3.php'</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>form</span> <span class="token attr-name">action</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>select</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>datum<span class="token punctuation">"</span></span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>selectinput<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span><span class="token punctuation">"</span></span> <span class="token attr-name">selected</span> <span class="token attr-name">disabled</span><span class="token punctuation">></span></span>Datum auswählen:<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>2019-01-01<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Ab Januar<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>2019-02-01<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Ab Februar<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>option</span> <span class="token attr-name">value</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>2019-04-01<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>Ab April<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>option</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>select</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>form</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>chart_div<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span> <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">include_once</span> <span class="token string single-quoted-string">'footer.php'</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> </code></pre> <p>Und das ist der Code meiner abgefragten ajax/fotografen.php-Datei:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">include_once</span> <span class="token string single-quoted-string">'../inc/datenbankverbindung.php'</span><span class="token punctuation">;</span> <span class="token variable">$Datum</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$selectChart</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT a.FotografenID AS ID, concat(FotografVorname, ' ', FotografNachname) AS Name, COUNT(*) AS Auftraege FROM tbl_KgAuftraege a JOIN tbl_Fotografen b ON a.FotografenID = b.FotografenID WHERE (Fototag1>=<span class="token interpolation"><span class="token variable">$Datum</span></span>) AND (Aktivitaet='aktiv') GROUP BY a.FotografenID;"</span><span class="token punctuation">;</span> <span class="token variable">$resultChart</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$selectChart</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$rows</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$table</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cols'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'label'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Fotograf'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'type'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'string'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'label'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Aufträge'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'type'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'number'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$rowChart</span> <span class="token operator">=</span> <span class="token function">mysqli_fetch_assoc</span><span class="token punctuation">(</span><span class="token variable">$resultChart</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$temp</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$temp</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'v'</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token keyword type-casting">string</span><span class="token punctuation">)</span> <span class="token variable">$rowChart</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$temp</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'v'</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span> <span class="token variable">$rowChart</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Auftraege'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$rows</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'c'</span> <span class="token operator">=></span> <span class="token variable">$temp</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$table</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rows'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$rows</span><span class="token punctuation">;</span> <span class="token variable">$jsonTable</span> <span class="token operator">=</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$table</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$jsonTable</span><span class="token punctuation">;</span> <span class="token delimiter important">?></span></span> </code></pre> <p>Für jegliche Idee wäre ich sehr dankbar!</p> <p>Kerstin</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 09:49:09 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742858#m1742858 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742858#m1742858 <p>Wenns Datum nicht stimmt dann guck doch mal was am Server ankommt. Und wie die Abfrage dann aussieht. Und nicht vergessen: Alles was über HTTP kommt ist der DB entsprechend zu maskieren. Und dann auch prüfen was in der Response kommt.</p> <p>MfG</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 10:06:10 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742860#m1742860 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742860#m1742860 <p>Tach!</p> <blockquote> <p>Und nicht vergessen: Alles was über HTTP kommt ist der DB entsprechend zu maskieren.</p> </blockquote> <p>Diese Aussage ist nur teilweise richtig. Es kommt nicht darauf an, wo Daten herkommen. Sie müssen in jedem Fall kontextgerecht behandelt werden, wenn sie direkt irgendwo eingefügt werden, beispielsweise wie hier in ein SQL-Statement. Das Ziel muss nicht nur im Falle von über HTTP kommenden Daten syntaktisch einwandfrei und der Intention des Autors entsprechen, sondern generell. Außerdem gibt es mit Prepared Statements eine Alternative zum Maskieren.</p> <p>Im Ausgangsposting ist unter anderem zu sehen:</p> <blockquote> <blockquote> <p>WHERE (Fototag1>=$Datum)</p> </blockquote> </blockquote> <p>Wenn nun in $Datum ein Wert à la <code>2019-02-18</code> steht (ohne Anführungszeichen), dann ist das kein Datum sondern eine Rechenaufgabe mit dem Ergebnis 1999, was im Vergleich mit dem in Fototag1 stehenden Datum nicht den gewünschten Sinn ergibt.</p> <p><code>... WHERE (Fototag1>='" . htmlspecialchars($Datum) . "') ...</code></p> <p>So wäre zumindest dieser Teil syntaktisch richtig (mit einfachen Anführungszeichen um das Datum und Maskierung des Wertes). Wenn nun jemand kein Datum, sondern irgendwas anderes eingibt, kommt zwar kein sinnvolles Ergebnis raus, aber man kann diese Stelle auch nicht mehr für SQL-Injection ausnutzen.</p> <p>Zudem ist es nicht weiter sinnvoll, für das Datum eine weitere Variable anzulegen.</p> <pre><code class="block language-php"><span class="token variable">$Datum</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> </code></pre> <p>Man kann den Wert im $_POST-Array, was auch nichts anderes als eine Variable ist, auch gleich direkt verwenden</p> <p><code>... WHERE (Fototag1>='" . htmlspecialchars($_POST['datum']) . "') ...</code></p> <p>dedlfix.</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 10:06:53 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742861#m1742861 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742861#m1742861 <p>Ähm, wie kann ich denn überprüfen, was beim Server ankommt? Ich habe es mit <code><div> <?php $string = file_get_contents("ajax/fotografen.php"); echo $string; ?> </div></code><br> versucht, aber da kommt dann nur das an:</p> <p>=$Datum) AND (Aktivitaet='aktiv') GROUP BY a.FotografenID;"; $resultChart = mysqli_query($conn, $selectChart); $table = array(); $rows = array(); $table['cols'] = array( array('label' => 'Fotograf', 'type' => 'string'), array('label' => 'Aufträge', 'type' => 'number') ); while ($rowChart = mysqli_fetch_assoc($resultChart)) { $temp = array(); $temp[] = array('v' => (string) $rowChart['Name']); $temp[] = array('v' => (int) $rowChart['Auftraege']); $rows[] = array('c' => $temp); } $table['rows'] = $rows; $jsonTable = json_encode($table); // echo $jsonTable; ?></p> <p>Für mich ein ganz willkürlicher Ausschnitt aus der Datei.<br> Wie kann ich das sinnvoller abfragen?</p> <p>Viele Grüße Kerstin</p> <p>P.S. Jetzt habe ich gerade geschaut, was im Quelltext steht und da steht der ganze Text:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">include_once</span> <span class="token string single-quoted-string">'../inc/datenbankverbindung.php'</span><span class="token punctuation">;</span> <span class="token variable">$Datum</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'datum'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$Datum</span><span class="token punctuation">;</span> <span class="token variable">$selectChart</span> <span class="token operator">=</span> <span class="token string double-quoted-string">"SELECT a.FotografenID AS ID, concat(FotografVorname, ' ', FotografNachname) AS Name, COUNT(*) AS Auftraege FROM tbl_KgAuftraege a JOIN tbl_Fotografen b ON a.FotografenID = b.FotografenID WHERE (Fototag1>=<span class="token interpolation"><span class="token variable">$Datum</span></span>) AND (Aktivitaet='aktiv') GROUP BY a.FotografenID;"</span><span class="token punctuation">;</span> <span class="token variable">$resultChart</span> <span class="token operator">=</span> <span class="token function">mysqli_query</span><span class="token punctuation">(</span><span class="token variable">$conn</span><span class="token punctuation">,</span> <span class="token variable">$selectChart</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$table</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$rows</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$table</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'cols'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'label'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Fotograf'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'type'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'string'</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'label'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'Aufträge'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'type'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">'number'</span><span class="token punctuation">)</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token variable">$rowChart</span> <span class="token operator">=</span> <span class="token function">mysqli_fetch_assoc</span><span class="token punctuation">(</span><span class="token variable">$resultChart</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$temp</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$temp</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'v'</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token keyword type-casting">string</span><span class="token punctuation">)</span> <span class="token variable">$rowChart</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Name'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$temp</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'v'</span> <span class="token operator">=></span> <span class="token punctuation">(</span><span class="token keyword type-casting">int</span><span class="token punctuation">)</span> <span class="token variable">$rowChart</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'Auftraege'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$rows</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'c'</span> <span class="token operator">=></span> <span class="token variable">$temp</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$table</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'rows'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token variable">$rows</span><span class="token punctuation">;</span> <span class="token variable">$jsonTable</span> <span class="token operator">=</span> <span class="token function">json_encode</span><span class="token punctuation">(</span><span class="token variable">$table</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">//echo $jsonTable;</span> <span class="token delimiter important">?></span></span> </code></pre> <p>Offensichtlich wird das Größer-Zeichen in der Abfrage als schließendes html-Zeichen interpretiert.<br> Doch vor allem möchte ich ja den Inhalt der Variable $Datum sehen. Wie kann ich das machen, wenn nicht mit Echo?</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 10:41:02 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742863#m1742863 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742863#m1742863 <p>Das war die Lösung!<br> Vielen Dank, dedlfix!</p> <p>Ich habe dieses Problem nie gehabt, weil ich meine POST-Variablen immer in Prepared Statements gelegt habe und dort wird ja bei Wahl von "s" automatisch ein String erzeugt.<br> Wenn ich diese aber schlauerweise zur "Erleichterung" zum Testen weglasse...</p> <p>Jetzt funktionieren die Abfragen einwandfrei.</p> <p>Herzliche Grüße Kerstin</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 11:48:48 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742870#m1742870 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742870#m1742870 <p>Die einfachste Möglichkeit, sich den POST anzuschauen ist ein Dump (print_r) des gesamten Array's. Und idealerweise sendet man vor dem print_r einen Content-Type text/plain.</p> <p>Und dann wären noch die Entwicklerwerkzeuge des Browsers wo man sich anschauen kann was rausgeht und wieder reinkommt.</p> <p>MfG</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 11:53:14 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742873#m1742873 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742873#m1742873 <p>Tach!</p> <blockquote> <p>Die einfachste Möglichkeit, sich den POST anzuschauen ist ein Dump (print_r) des gesamten Array's. Und idealerweise sendet man vor dem print_r einen Content-Type text/plain.</p> </blockquote> <p>Ein <code><pre></code> davor auszugeben, ist ausreichend und einfacher, als HTTP-Headers zu manipulieren.</p> <p>dedlfix.</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 14:37:28 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742899#m1742899 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742899#m1742899 <p>Welches Array meinst Du?</p> <p>Die Entwicklerwerkzeuge hatte ich als Erstes bemüht, doch haben sie mir nicht weitergeholfen.<br> Ich habe unter Netzwerk Headers nachgesehen, doch wird mir da der Inhalt der übermittelten Variable nicht angezeigt, so wie ich es sonst bei GET oder POST-Übermittlung ohne Ajax gewohnt bin.<br> Wo sollte ich stattdessen nachsehen?</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 12:06:12 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742877#m1742877 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742877#m1742877 <p>Du hast den Sinn des HTTP Headers Content-Type nicht verstanden!</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 12:11:26 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742878#m1742878 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742878#m1742878 <p>Tach!</p> <blockquote> <p>Du hast den Sinn des HTTP Headers Content-Type nicht verstanden!</p> </blockquote> <p>Das ist deine Einschätzung. Sie deckt sich nicht mit meiner. Tatsächlich sehe ich jedoch keinen Sinn darin, für eine temporäre Debug-Ausgabe irgendeinen größeren Aufwand zu betreiben. Eine Formatierung, so dass Zeilenumbrüche erhalten bleiben, ist für die meisten Fälle ausreichend. Komplett auf text/plain umzuschalten, beeinflusst den Rest der Ausgabe über Gebühr.</p> <p>dedlfix.</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 17:03:02 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742908#m1742908 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742908#m1742908 <p>Tach!</p> <blockquote> <blockquote> <p>Du hast den Sinn des HTTP Headers Content-Type nicht verstanden!</p> </blockquote> <p>Das ist deine Einschätzung. Sie deckt sich nicht mit meiner. Tatsächlich sehe ich jedoch keinen Sinn darin, für eine temporäre Debug-Ausgabe irgendeinen größeren Aufwand zu betreiben. Eine Formatierung, so dass Zeilenumbrüche erhalten bleiben, ist für die meisten Fälle ausreichend. Komplett auf text/plain umzuschalten, beeinflusst den Rest der Ausgabe über Gebühr.</p> </blockquote> <p>Eigentlich ist beides nicht ganz passend. Es handelt sich ja um eine Antwort auf eien Ajax-Request. Da braucht es natürlich kein <code><pre></code> - das ist nur für Ausgaben in den HTML-Kontext sinnvoll. Aber auch das Umschalten nach text/plain bringt keine Punkte. Einfach nur ausgeben und fertig. Der Browser kann mit der Antwort nichts anfangen, aber das ist in dem Fall egal. Man muss nur in die Entwicklertools der Browser in die Response schauen, und die wird immer als Text zu sehen sein. Zusätzlich versuchen die Browser noch das Format zu erkenen und eine schöne Formatierung anzubieten, aber das ist für die Debug-Ausgabe nicht weiter relevant.</p> <p>dedlfix.</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 14:57:38 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742900#m1742900 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742900#m1742900 <blockquote> <p>Welches Array meinst Du?</p> </blockquote> <p>$_POST</p> <blockquote> <p>Die Entwicklerwerkzeuge hatte ich als Erstes bemüht, doch haben sie mir nicht weitergeholfen.<br> Ich habe unter Netzwerk Headers nachgesehen, doch wird mir da der Inhalt der übermittelten Variable nicht angezeigt, so wie ich es sonst bei GET oder POST-Übermittlung ohne Ajax gewohnt bin.</p> </blockquote> <p>Bei einem POST wird ein HTTP Message Body gesendet.</p> <blockquote> <p>Wo sollte ich stattdessen nachsehen?</p> </blockquote> <p>Entwicklerkonsole, Register Netzwerk/Parameter. Und in /Antwort steht die Response.</p> <p>MfG</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 15:41:41 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742902#m1742902 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742902#m1742902 <p>Das scheint in jeder Browserversion anders zu sein.<br> In der mir vorliegenden Chrome-Version habe ich jetzt gesehen, dass ich erst XHR anwählen muss, sonst werden mir nur GET-responses angezeigt.<br> Im Firefox habe ich auch gerade nachgesehen, da ist keine Vorauswahl nötig.</p> <p>Danke<br> Kerstin</p> Ajax mit MySQL und Google Charts Mon, 18 Feb 19 15:48:43 Z https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742904#m1742904 https://forum.selfhtml.org/self/2019/feb/18/ajax-mit-mysql-und-google-charts/1742904#m1742904 <blockquote> <p>Das scheint in jeder Browserversion anders zu sein.</p> </blockquote> <p>Genau. Man muss sich halt ganz einfach mal damit befassen. MFG</p>