Beiträge von Blickwinkelkanone
-
-
Hallo,
ich stehe etwas auf dem Schlauch (eventuell mal ne Pause machen).
Ich habe eine Tabelle, in der für Mitglieder mehrere Einträge vorhanden sein können, mit Punkten. (Die Punkte werden pro Tag erfasst).
Jetzt würde ich gerne den höchsten Wert mit dem dazugehörigen Datum ausgeben lassen.
Der Code gibt mir die höchste Punktzahl aus, aber nciht das richtige Datum un den richtigen Link dazu. Hier werden wohl die ersten Einträge genommen, die gefunden werden in der Tabelle. Habe die GROUP BY Anweisung auch mit den anderen Spalten erweitert, aber dann erscheinen zuviele Einträge.
Wo sehe ich den Wald vor lauter Bäumen nicht?
Danke sehr und eine angenehme Nacht.
Grüße
Blickwinkelkanone -
-
Hallo,
ich lese per DOM HTML Seiten aus.
Dabei kommt es immer mal wieder vor, dass Wörter auftauchen, die Sonderzeichen enthalten z.B.
Dies kann DOM anscheinend nicht wirklich interpretieren und es kommen dann komische Werte in der Datenbank. Im Obigen Beispiel [♟]
Will ich dies im Code anfangen, scheitert es daran, dass mein Editor damit nicht umgehen kann.
html-seminar.de/woltlab/attachment/2612/
Hat jemand eine Idee, wie ich das abfangen kann, oder so in der Datenbank abspeichern kann, dass es am Ende wieder korretk angezeigt wird (aus [â] wird [♟] ud umgekehrt)?
Danke sehr
-
-
Sehe das wie Basti1012
Nutz konsequent PDO und parametisiere diese!
Benutzt du
Dadurch wird sichergestellt, dass die Anweisung und die Werte nicht von PHP analysiert werden, bevor sie an den MySQL-Server gesendet werden (sodass ein möglicher Angreifer keine Chance hat, schädliches SQL einzuschleusen).
Muss es unbedingt $_GET['id'] sein?
ich könnte z.B. eine Seite mit folgendem Code aufrufen
Daraus wird dann (wenn du es nicht entsprechend vorher abfängst).
NAtürlich könnte ich einfach ein paar IDs ausprobieren, bis ich z.B. die ID eines Admins habe.
Das sind nur die Sachen, die ich auf die schnelle sehe.
-
Ja, funktioniert soweit.
Da die Daten noch nicht komplett sind (die ganzen 0 Werte für Uhrzeiten, die nicht in der Datenbank sind) müssen noch ins Array.
Das mache ich aber im Laufe des TAges.
Im Mament sieht es so aus.
html-seminar.de/woltlab/attachment/2571/
Nochmals vielen Dank für deine kompetnete Hilfe!
Grüße
Blickwinkelkanone -
Danke für die Erläuterung und Korrektur.
Nun habe ich die Daten drin. Jetzt muss ich nur noch das Array erweitern mit 0 Werten für Wochentage und Uhrzeiten wo keine Dtaen gefunden werden.
Aber das bekomme ich dann wieder alleine hin
Danke sehr für deine Utnerstützung, geduld und Mühe
Top!
-
Irgendwie bin ich zu doof dafür und verstehe nicht, was genau du meinst.
Werte sind im Array, so wie oben in der Tabelle beschrieben.
Dann füge ich es wie folgt hinzu.
Was verstehe ich hier falsch von deinem Post.
Anbei mal der komplette Quellcode mit Array Daten
JavaScript
Alles anzeigenArray ( [0] => Array ( [timekey] => 2020-07-13 01:00:00 [0] => 2020-07-13 01:00:00 [anzahl] => 1 [1] => 1 ) [1] => Array ( [timekey] => 2020-06-22 09:30:00 [0] => 2020-06-22 09:30:00 [anzahl] => 1 [1] => 1 ) [2] => Array ( [timekey] => 2020-07-27 09:30:00 [0] => 2020-07-27 09:30:00 [anzahl] => 1 [1] => 1 ) [3] => Array ( [timekey] => 2020-06-22 10:30:00 [0] => 2020-06-22 10:30:00 [anzahl] => 1 [1] => 1 ) [4] => Array ( [timekey] => 2020-06-22 13:00:00 [0] => 2020-06-22 13:00:00 [anzahl] => 1 [1] => 1 ) [5] => Array ( [timekey] => 2020-06-29 14:00:00 [0] => 2020-06-29 14:00:00 [anzahl] => 2 [1] => 2 ) [6] => Array ( [timekey] => 2020-06-29 15:30:00 [0] => 2020-06-29 15:30:00 [anzahl] => 1 [1] => 1 ) [7] => Array ( [timekey] => 2020-06-22 23:00:00 [0] => 2020-06-22 23:00:00 [anzahl] => 1 [1] => 1 ) [8] => Array ( [timekey] => 2020-06-30 10:30:00 [0] => 2020-06-30 10:30:00 [anzahl] => 2 [1] => 2 ) . . . . ) <script> const array2d = <?php echo json_encode($array2d); ?>; <style> #chart { max-width: 1000px; margin: 35px auto; } </style> <script> window.Promise || document.write( '<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"><\/script>' ) window.Promise || document.write( '<script src="https://cdn.jsdelivr.net/npm/eligrey-classlist-js-polyfill@1.2.20171210/classList.min.js"><\/script>' ) window.Promise || document.write( '<script src="https://cdn.jsdelivr.net/npm/findindex_polyfill_mdn"><\/script>' ) </script> <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script> <script> // Diese Funktion modifiziert die Daten so, dass eine Matrix heraus kommt // mit der Uhrzeit auf der x-Achse und dem Wochentag auf der Vertikalen: function modifyData(series) { function makeData(inData) { let outData = []; for (key in inData) { outData.push({ x: key, y: inData[key] }) } return outData; } let tempObj = {}; series.forEach((item, idx) => { // Aktuelle Daten in Variablen bereit stellen let weekday = item[2], dt = item[0], val = item[1]; time = dt.split(' ')[1]; if (!tempObj[weekday]) { tempObj[weekday] = {}; tempObj[weekday][time] = val; } else { if (!tempObj[weekday][time]) { tempObj[weekday][time] = val; } else { tempObj[weekday][time] += val; } } }); console.log(tempObj); let seriesMod = []; seriesMod.push({ name: 'Montag', data: makeData(tempObj.Montag) }); seriesMod.push({ name: 'Dienstag', data: makeData(tempObj.Dienstag) }); seriesMod.push({ name: 'Mittwoch', data: makeData(tempObj.Mittwoch) }); seriesMod.push({ name: 'Donnerstag', data: makeData(tempObj.Donnerstag) }); seriesMod.push({ name: 'Freitag', data: makeData(tempObj.Freitag) }); seriesMod.push({ name: 'Samstag', data: makeData(tempObj.Samstag) }); seriesMod.push({ name: 'Sonntag', data: makeData(tempObj.Sonntag) }); return seriesMod; } let series = true; console.log(series); let seriesMod = modifyData(series); console.log(seriesMod); </script> </head> <body> <div id="chart"></div> <script> var options = { series: seriesMod, chart: { height: 700, type: 'heatmap', }, dataLabels: { enabled: false }, colors: ["#fb4300"], title: { text: 'Onlinezeiten Obamacare' }, }; var chart = new ApexCharts(document.querySelector("#chart"), options); chart.render(); </script> </div> </body> </html>
-
HI,
ich habe am Wochenende noch etwas rumgetüftelt.
Mit stellt sich hier die Frage, wie die Daten aus der Datenbank genua da rinkommen, mit dem Zusatz, dass der Wert 0 angezeigt werden soll, sollte kein Wert für den Zeitraum an dem Tag gefunden werden.
Das werde ich ja wohl da machen, wo im Moment die Zufallszahlen generiert werden.
Gibt es da eine elegante Version, das umzusetzen und nach Uhrzeit und Wochentag abzufragen?
-
Wow.
Einfach klasse. Ich werde mir mal den Code genauer angucken, wie du das gemacht hast.,
Jetzt nur noc die Daten aus der Datenbank da rein und es klappt, wie ich will.
-
Letzteres, also alle Einträge
-
Hallo Sempervivum,
vielen Dank.
Da wäre ich so schnell nicht selber drauf gekommen.
Eigentlich war die IDee dahiner wie folgt:
y Achse Wochentage
x Achse Uhrzeiten 00:00, 00:30, 01:00 etc
Wird für ein Wochentag und Uhrzeit ein Wert gefunden, wird die ANzahl dort angegeben. Leifer die SQL Abfrage kein Wert für den Wochentag und Uhrzeit zurück, soll dieser mit 0 angegeben werden.
So soll angezeigt werden, wann und zu welcher Uhrzeit ein bestimmter User wie oft online ist.
-
Erstmal vielen Dank für die Antwort. Dann war ich zumindest schonmal auf dem richtigen Weg.
Habe mir das jetzt angeguckt und muss leider sagen, dass ich nicht weiter komme.
Von vorne am besten.
hiermit selektiere ich die Daten.. Soweit so gut.
PHP<? require_once ('../connect.php'); $name = "Obamacare"; $sql_zeiten = $db->prepare("SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(time)/(1800))*1800) AS timekey, count(name) AS anzahl, tag FROM vs_online WHERE name = :name GROUP BY timekey ORDER BY WEEKDAY(timekey), EXTRACT(HOUR FROM timekey)"); $sql_zeiten->execute(array('name'=> $name )); $array2d = $sql_zeiten->fetchAll(); //print_r($array2d); ?>
Da bekomme ich ein Array, mit den Daten, die in der Datenbank sind. Auch soweit korrekt.
2020-07-13 01:00:00 1 Montag 2020-06-22 09:30:00 1 Montag 2020-06-22 10:30:00 1 Montag 2020-06-22 13:00:00 1 Montag 2020-06-29 14:00:00 2 Montag 2020-06-29 15:30:00 1 Montag 2020-06-22 23:00:00 1 Montag 2020-06-30 10:30:00 2 Dienstag 2020-06-16 11:00:00 1 Dienstag 2020-06-23 14:30:00 1 Dienstag 2020-06-23 15:30:00 1 Dienstag 2020-06-23 17:00:00 1 Dienstag 2020-07-21 22:00:00 1 Dienstag 2020-06-24 00:00:00 1 Mittwoch 2020-07-08 10:00:00 10 Mittwoch 2020-06-17 11:00:00 1 Mittwoch 2020-07-01 11:00:00 3 Mittwoch 2020-07-01 14:30:00 2 Mittwoch 2020-06-17 14:00:00 2 Mittwoch 2020-06-24 15:00:00 1 Mittwoch 2020-07-08 18:30:00 2 Mittwoch 2020-06-25 00:30:00 1 Donnerstag 2020-06-25 01:30:00 1 Donnerstag 2020-06-25 01:00:00 1 Donnerstag 2020-07-02 02:00:00 1 Donnerstag 2020-06-18 08:30:00 1 Donnerstag 2020-07-02 10:30:00 1 Donnerstag 2020-07-02 11:00:00 1 Donnerstag 2020-07-16 21:00:00 2 Donnerstag 2020-07-16 22:30:00 1 Donnerstag 2020-07-16 22:00:00 1 Donnerstag 2020-07-16 23:00:00 2 Donnerstag 2020-07-17 00:00:00 1 Freitag 2020-07-17 01:30:00 1 Freitag 2020-07-17 01:00:00 1 Freitag 2020-06-26 09:00:00 1 Freitag 2020-06-26 10:30:00 3 Freitag 2020-06-26 11:30:00 2 Freitag 2020-06-26 11:00:00 2 Freitag 2020-06-26 12:30:00 4 Freitag 2020-06-26 14:00:00 1 Freitag 2020-07-10 17:00:00 2 Freitag 2020-06-20 15:00:00 1 Samstag 2020-06-21 09:30:00 1 Sonntag 2020-06-28 11:30:00 1 Sonntag 2020-06-28 12:00:00 1 Sonntag 2020-06-28 14:30:00 2 Sonntag 2020-05-31 22:30:00 2 Sonntag Das Array habe ich wie von dir beschrieben auch eingefügt.
Nur die letzte Antwort von dir, verstehe ich nicht ganz.
Wo muss diese eingefügt bzw was ersetzt diese?
Danke für deine Hilfe.
-
Hallo,
ich versuche ein HEatmap Chart mit Daten aus der SQL Datenbank zu befüllen.
Als Script benutze ich das ApexChart und habe es mir etwas angepasst. (nur Tetszwecke, was die Daten angeht)JavaScript
Alles anzeigen<script> window.Promise || document.write( '<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"><\/script>' ) window.Promise || document.write( '<script src="https://cdn.jsdelivr.net/npm/eligrey-classlist-js-polyfill@1.2.20171210/classList.min.js"><\/script>' ) window.Promise || document.write( '<script src="https://cdn.jsdelivr.net/npm/findindex_polyfill_mdn"><\/script>' ) </script> <script src="https://cdn.jsdelivr.net/npm/react@16.12/umd/react.production.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/react-dom@16.12/umd/react-dom.production.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/prop-types@15.7.2/prop-types.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script> <script src="https://cdn.jsdelivr.net/npm/react-apexcharts@1.3.6/dist/react-apexcharts.iife.min.js"></script> <script> function generateData(count, yrange) { var i = 0; var series = []; while (i < count) { var x = '' + (i).toString(); var y = Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min; series.push({ x: x, y: y }); i++; var i = i -0.5; } return series; } </script> </head> <body> <div id="app"></div> <div id="html"> <div id="chart"> <ReactApexChart options={this.state.options} series={this.state.series} type="heatmap" height={350} /> </div> </div> <script type="text/babel"> class ApexChart extends React.Component { constructor(props) { super(props); this.state = { series: [{ name: 'Sonntag', data: generateData(24, { min: 0, max: 2222 }) }, { name: 'Samstag', data: generateData(24, { min: 0, max: 2222 }) }, { name: 'Freitag', data: generateData(24, { min: 0, max: 2222 }) }, { name: 'Donnerstag', data: generateData(24, { min: 0, max: 2222 }) }, { name: 'Mittwoch', data: generateData(24, { min: 0, max: 2222 }) }, { name: 'Dienstag', data: generateData(24, { min: 0, max: 2222 }) }, { name: 'Montag', data: generateData(24, { min: 0, max: 2222 }) }, ], options: { chart: { height: 350, type: 'heatmap', }, dataLabels: { enabled: false }, colors: ["#FF5733"], title: { text: 'Onlinezeiten Obamacare' }, }, }; } render() { return ( <div> <div id="chart"> <ReactApexChart options={this.state.options} series={this.state.series} type="heatmap" height={350} /> </div> <div id="html-dist"></div> </div> ); } } const domContainer = document.querySelector('#app'); ReactDOM.render(React.createElement(ApexChart), domContainer); </script>
MIt JS kenne ich mich kaum aus, daher frage ich hier (erstmal mit den Grundsätzlichen Fragen).
Wie kann ich die Daten aus meiner SQL Abfrage dort einbinden? Zumindest auf der Seite des Sripts gibt es da keinen support und Recherche im Netz ergab, dass man das mit JSON bewerkstelligen könnte. Leider ist JS nicht mein Gebiet.
Danke sehr
Grüße
Blickwinkelkanone
-
Habe es mir mal angeguckt und doch nicht ganz das, was ich wollte.
Habe etwas gefunden, aber da würde ich meine Fragen im JavaScript Forum schreiben.
-
-
Danke für deine Antwort.
Ich habe etwas rumprobiert und eine Lösung gefunden, die ich euch nicht vorenthalten will. Scheint mir genau das wiederzuegeben, was ich wollte.
Das kann ich wiederum in meine HEadmap Chart einfügen. Das probiere ich aber dann heute Abend.
SQLSELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(zeitpunkt)/(1800))*1800) AS timekey, count(name) FROM test GROUP BY timekey order by timekey;
-
Sein Smiley zeigt auf ein Bild bei php.de.
Dort hat er wohl die gleiche Frage schon gestellt, und den SMiley mitkopiert
-
Guten Morgen,
ich bräuchte hier mal paar Denkanstöße.
Folgendes habe ich vor.
Wie bereits in einem anderen Post gefragt, würde ich gerne eine Heatmap Chart für online Zeiten erstellen. Die Heatmap habe ich bereits und funktioniert grundsätzlich.
Ich versuche nun eine effiziente Strategie zu entwickeln, wie ich die Daten entsprechend aufbereite und in die Map eingebe.
Ziel ist es, die Daten aufgeschlüsselt nach halber Stunde pro Wochentag, anzuzeigen.
Montag:
00:00 – 00:30 123
00:30 – 01:00 567
01:00 – 01:30 234
Usw.
Hier habe ich mir aber überlegt, nicht die absoluten Zahlen auszugeben, sondern die relativen Zahlen in Prozent.
Datenselektion und Wochentag Ermittlung ist alles soweit kein Problem
Daten liegen als DATETIME in einer SQL Datenbank (2020-07-15 07:28:00).
Was mir ein bisschen Kopfzerbrechen bereitet, wie kann ich sinnvoll die DATETIME in 30 Minuten Intervalle zerlegen und dann entsprechend pro Wochentag prüfen.
Hat jemand eine gute Idee, ich denk schon wieder zu kompliziert.
Danke sehr