Beiträge von cottton
-
-
Dann kommt man als mit einer Funktion am besten "da raus", oder?
Oder wie verhält sich die Funktion dann? Auch async?
Ich hab das "Problem" momentan bei pthreads - wenn man aus einem anderen Kontext Methoden aufruft.Oder anders gefragt:
JavaScriptvar global_var; function myFunc(data){ global_var = data; } $.ajax({ url: 'script/charts.php?select=6', success: function(data){ myFunc(data); } });
wird global_var gesetzt sein? -
lauras
obj, min und max sind doch aber außerhalb der success function nicht verfügbar, oder?
Das wird doch in JQuery nicht anders sein.Sinn - ich bin davon ausgegangen, dass er die vars auch "später" noch braucht und nicht nur da drin definieren und "liegen lassen" will =)
-
JQuery ist nicht mein Fall aber ich denke es liegt daran,
dass Du obj, min und max in der function success neu (local) definierst.
Probier malJavaScript// globaler raum var obj, min, max; $.ajax({ url: 'script/charts.php?select=6', success: function(data){ obj = jQuery.parseJSON(data); min = obj.min; max = obj.max; } });
Wenn ich mich richtig erinnere, dann wird ja die success function ausgeführt sobald die ajax request erfolgreich war.
Dort drin definierst Du locale vars, die ja nach "Ende" der function verloren gehen.Auch möglich:
- was sagt die Console? (Rechtsklick->Element untersuchen -> Console)
- kommen Daten überhaupt an? Testweise in der seccess function einmal ausgeben lassen -
Du meinst Exceptions (Ausnahmen)

Sieht mir danach aus, als ob Du auf dem Container (in dem die Message steht) ein white-space:nowrap; oder ä. drauf hast.
Die Message an sich hat Leerzeichen. Also könnte der Browser Umbrechen.
Klick mal die Zeile mit Rechtsklick an - > Element untersuchen -
also so als würde ich z.B. Hallo schreiben und da ein link drinne ist

Noch mal langsam =) -
Warum kann PHP nicht einfach vernünftige Fehlermeldungen ausgegeben?
Tuts doch =)
Du musst English lesen können - klar.
Wenn Du dann nach ner Weile die Zusammenhänge verstehst (hier zB object / methode ...), dann verstehst Du die Meldungen auf Anhieb.ZitatCall to a member function execute() on a non-object
Call = Aufrufen
member function = Methode einer Klasse
execute() = der Name der aufgerufenen Methode
on a non object = auf ein nicht object=)
BTW
guck Dir mal die Klammern an:PHP
Alles anzeigen<? ... }} // Ende $stmt->execute(); header("Location: http://$host$uri/$extra"); } else { echo $mysqli -> error; } };
Einrücken!
Da bricht man sich ja einen ab wenn man das lesen will
Zu Deiner letzten Frage: Ja und Nein.
execute() muss dort rein, wo es "funktionieren kann". Außerhalb wird es das nie.PHP
Alles anzeigen<? if(isset($_POST['abschicken']) && empty($errors)) { $test = $l_header; $test1 = $l_teaser_img; if(isset($_GET['leistungID'])) { // Titel Bild löschen if($_POST['del_bild'] == 'ja') { $h_bild_pfad = 'img/header/' . $l_header; @unlink($h_bild_pfad); $l_header = $test = ""; } if ($nmb->file_dst_name != ''){ $test = $nmb->file_dst_name; } // Teaser Bild löschen if($_POST['del_bild_teaser'] == 'ja') { $h_bild_teaser = 'img/teaser/' . $l_teaser_img; @unlink($h_bild_teaser); $l_teaser_img = $test1 = ""; } if ($nmb_f->file_dst_name != ''){ $test1 = $nmb_f->file_dst_name; } if ($stmt = $mysqli->prepare(" Update web_leistungen SET l_startseite=?, l_titel=?, l_teaser=? l_titel_url=?, l_header=?, l_header_titel=?, l_teaser_img=?, l_inhalt=?, l_sort=?, l_status=? WHERE l_id = ? ") ) { $l_startseite = $_POST["l_startseite"]; $l_titel = $_POST["titel"]; $l_teaser = $_POST["l_teaser"]; $l_titel_url = $_POST["titel_url"]; $l_header = $test; $l_header_titel = $_POST["l_header_titel"]; $l_teaser_img = $test2; $l_inhalt = $_POST["l_inhalt"]; $l_sort = $_POST["l_sort"]; $l_status = $_POST["l_status"]; $stmt->bind_param("sssssssssss", $l_startseite, $l_titel, $l_teaser, $l_titel_url, $l_header, $l_header_titel, $l_teaser_img, $l_inhalt, $l_sort, $l_status, $l_id ); $stmt->execute(); } // /if ($stmt = $mysqli->prepare( } // /if(isset($_GET['leistungID'])) /* -> weiß ich nicht wohin damit -> */header("Location: http://$host$uri/$extra"); } else { echo $mysqli -> error; // <- warum so viel leerzeichen? } }; // die klammer ist "single" =) -
was wolf sagt und
PHP
Alles anzeigen<? function leistungenStartseite($mysqli) { return leistungen($mysqli,'WHERE `l_startseite`="1"'); } function leistungenNochNeAndereVariante($mysqli) { return leistungen($mysqli,'WHERE `l_startseite`="2"'); } function leistungenUswUsw($mysqli) { return leistungen($mysqli,'WHERE `l_startseite`="3"'); } function leistungen($mysqli, $selector='') { $stmt = $mysqli->prepare(" SELECT l_startseite, l_titel, l_teaser, l_titel_url, l_header, l_header_titel, l_teaser_img, l_inhalt, l_sort FROM web_leistungen " . $selector ); $stmt->execute(); $stmt->bind_result( $l_startseite, $l_titel, $l_teaser, $l_titel_url, $l_header, $l_header_titel, $l_teaser_img, $l_inhalt, $l_sort ); while ($stmt->fetch()){ $leistungen_frontend[] = array( 'l_startseite' => $l_startseite, 'l_titel' => $l_titel, 'l_teaser' => $l_teaser, 'l_titel_url' => $l_titel_url, 'l_header' => $l_header, 'l_header_titel'=> $l_header_titel, 'l_teaser_img' => $l_teaser_img, 'l_inhalt' => $l_inhalt, 'l_sort' => $l_sort ); } return $leistungen_frontend; }
ich hau Dir das mal so hin. Ich denke Du versteht das Prinzip =) -
1. google mal "exe file on debian".
2. ?
3. um was zu tun?
4. sicherlich. Wenn Du allerdings die exe dann auf Deban zum laufen bekommen willst, musst Du die Scripte ja sowieso anpassen.Erfahrungen hab ich damit nicht.
Aber mal anders herum an die Sache herangegangen: Was soll die exe denn erledigen? Evtl kannst Du diese Aufgaben ganz einfach schon via PHP erledigen. -
"02.03.2015" ist schon mal schlecht.
Wenn man ein Datum (+Zeit) in einer Tabelle ablegen will, dann sollte man den Typ DATETIME nutzen.
Sieht dann in etwa so aus:
2015-03-04 01:01:01
jahr-monat-tag stunden:minuten:sekundenWenn Du zB in PHP die Funktion time() nutzt, dann schickst Du den Wert (die Zahl von time()) so in die Tabelle:
und das Ganze andersrumDamit kann man dann schon mal arbeiten.
Wisst Du nun beim Auslesen den Wert aus dem anderen Feld dazu zählen, kann man:PHP<?php $sql = " SELECT UNIX_TIMESTAMP(`zeit`) + `das_weitere_feld` AS `zeit` -- bsp: UNIX_TIMESTAMP('2015-03-04 14:29:21') == 1425475761 + das_weitere_feld FROM `db`.`tabelle` WHERE ... ";Es geht auch vor Umwandlung von DATETIME zu UNIXTIME:
Aber das macht nicht wirklich Sinn, wenn Du in dem anderem Feld eine Zahl (ich Tippe auf Sekunden) stehen hast.Was steht denn in dem Anderen Feld für eine Zahl? Sekunden?
BTW: Viele viele Möglichkeiten: http://dev.mysql.com/doc/refman/5.5…-functions.html
-
ok.
Naja, So wies aussieht sollte Explosion wohl laufen.Hast Du die controls auf den <audio...> Elementen gesetzt? Wenn ja - "wackelt" da was bei Explosion (der Regler für die Position / Zeitanzeige)?
Was mir jetzt noch einfällt wäre:
- andere Audiodatei testen (am besten auf die Schnelle 2 x Knistern nutzen)
- bei Explosion verfolgen, was alles ausgegeben wird (evtl steht da "stalled", "suspend", "error", "abort", "waiting" oder gar "pause"->NACH->"play")
- steht denn da überhaupt "play" bei Explosion?
- testweise mal Explosion eine Sekunde später ausführen lassen:JavaScripttimeout = setTimeout( function(){ audio2.pause(); // be sure not already playing audio2.currentTime = 0; // be sure to start from pos 0 audio2.play(); audio1.pause(); }, zufall+1 // <---------- +1 is neu );
Sonst wüsste ich im Moment auch nicht warum das ding nicht will
EDIT:
https://amazonsilk.wordpress.com/useful-bits/silk-media-handling/ZitatSilk fully supports the HTML5 audio tag so that playback occurs in the browser.
[...]
Playback of multiple streams works just as you’d expect.
[...]
Currently, Silk doesn’t support background audio, meaning that audio playback is paused when a tab loses focus.
Das klingt nach was, nach dem man suchen kann.
Setz mal das hier mit einHTML
Alles anzeigen<!doctype html> <html> <head> <meta charset="utf-8"> <title>Audiotest</title> <script type="text/javascript"> // NEU START function changeTitle(bool){ document.title = (bool === true) ? "FOCUS" : "NOT FOCUS"; } if(window.addEventListener){ window.addEventListener("focus",function(){changeTitle(true);}); window.addEventListener("blur",function(){changeTitle(false);}); }else if(window.attachEvent){ window.attachEvent("focus",function(){changeTitle(true);}); window.attachEvent("blur",function(){changeTitle(false);}); } // NEU ENDE ... ...
Dann guck mal, ob der Tab nach Knistern auf blur - also nicht mehr im Focus ist. -
=)
bevor ich hier meine Probleme poste, dachte ich ich frag erst mal.
Wer sich mit pthreads auskennt laut rufen!Und wenn wir schon beim Thema sind - wer Multithread nutzen möchte:
http://pthreads.org/
http://php.net/manual/de/book.pthreads.php -
Sind zu finden - aber wo? Stand das also bei Explosion?
Und:
Alles anzeigenKnistern - timeupdate
knistern - timeupdate
explosion - seeking
explosion - seeked
knistern - pause
knistern - stalled
So endet die Liste...
Das ist "ungenau"
Da gibts ObjecteZitatKnistern
undZitatknistern
undZitatexplosion
Also auf einmal 3 Dateien?
Mein Script (so wie es war) gab den Namen per id aus (ev.target.id) - also zBDemnach sind da jetzt
Audioobjecte im Script?Poste am besten mal die gesamte Eventlist - also alles, was das Script ausgibt.
EDIT:
btwZitatknistern - stalled
bedeutetZitatFires when the browser is trying to get media data, but data is not available
Also konnte knistern nicht geladen werden. (denk ich) -
Also audio2.play(); hat keine Auswirkung?
Sieh mal nach, ob in der ListeZitat
Explosion canplay (...)
Explosion canplaythrough (...)
steht.
Das gibt ja an, ob Explosion abgespielt bzw komplett "durchgespielt" werden kann. -
viel spass damit =)
test: http://jsfiddle.net/zvc3ta5o/
code:
HTML
Alles anzeigen<!doctype html> <html> <head> <meta charset="utf-8"> <title>Console</title> <script type="text/javascript"> var Console = { list_title:"Console", btn_start_name:"startScroll", btn_stop_name:"stopScroll", list_style:{ "backgroundColor" : "#000", "color" : "#ccc", "width" : "100%", "height" : "400px", "border" : "1px solid black", "overflow" : "scroll", }, max_list_size_len:10000, list_line_element:"div", wrap:null, title:null, list:null, btn_start:null, btn_stop:null, scroll_interval:null, _:null, init:function(wrap_element_id) { if(this._ === true){return;} this.wrap = document.getElementById(wrap_element_id); this.list = document.createElement("div"), this.title = document.createElement("h3"), this.btn_start = document.createElement("button"), this.btn_stop = document.createElement("button"); for(var attr in this.list_style){ this.list.style[attr] = this.list_style[attr]; } this.btn_start.appendChild(document.createTextNode(this.btn_start_name)), this.btn_start.addEventListener( 'click', function(){ Console.startScroll(); }, false ), this.btn_stop.appendChild(document.createTextNode(this.btn_stop_name)), this.btn_stop.addEventListener( 'click', function(){ Console.stopScroll(); }, false ), this.title.appendChild(document.createTextNode(this.list_title)), this.wrap.appendChild(this.title), this.wrap.appendChild(this.btn_start), this.wrap.appendChild(this.btn_stop), this.wrap.appendChild(this.list); this._ = true; return; }, startScroll:function() { this.scroll_interval === null && (this.scroll_interval=setInterval(function(){ Console.list.scrollTop = Console.list.scrollHeight; }, 200 )); return; }, stopScroll:function() { this.scroll_interval !== null && clearInterval(this.scroll_interval); this.scroll_interval = null; return; }, log:function(str) { var row = document.createElement(this.list_line_element); row.appendChild(document.createTextNode(str)); this.list.appendChild(row); while(this.list.innerHTML.length > this.max_list_size_len){ var list = this.list.getElementsByTagName(this.list_line_element); (list.length > 0) && list[0].parentNode.removeChild(list[0]); } return; } } </script> </head> <body> <pre id="console"></pre> <script type="text/javascript"> Console.init("console"); Console.startScroll(); var nr = 0; for(var i = 0; i < 1000; i++){ setTimeout( function(){ var lines = Console.list.getElementsByTagName(Console.list_line_element).length; var max_len = Console.max_list_size_len; Console.log("writing line nr " + (nr++) + " (lines in list: " + lines + ")"); }, i*10 ); } </script> </body> </html> -
Tip: controls anzeigen lassen und alle events anzeigen lassen,
um zu sehen was da passiert (oder gerade nicht passiert).teste das hier mal auf dem kindle: http://jsfiddle.net/nxvwjq3L/
erst "startScroll" button drücken, dann "Knistern & Explosion" -
Ein Freund hat das letztens in 10 min eingebaut.
Ich gerade in 12.
Anleitung: https://www.google.com/recaptcha/admin#list
=) -
Wenn, dann -> http://www.google.com/recaptcha/intro/index.html
"I am not a robot"Für kleine Websites würde ich allerdings kein captcha einbauen.
Seit 2011 keine bots (Registrierung) bei selbstgescriptetem Login. -
0 oder 1 wird angezeigt.
Warum:
Wenn Du ein boolean true ausgeben willst, kann PHP nicht "true" ausgeben. Das sähe ja so aus, als ob der String "true" da drin steckt.
Also wird aus dem boolean ein integer Wert - 0 oder 1.Die PHP-Funktion var_dump() zeigt Dir immer den Wert und den Typ (bool, int, string, ...).
Gib mal in einem Testscript
aus.Andere Möglichkeit:
-
Zum Thema wohl passend:
http://www.heise.de/newsticker/mel…kt-2556800.html
(^ auch wenn nur so dahin geschmissener Artikel)
Details: https://typo3.org/teams/security…re-sa-2015-001/EDIT: Kommentar zu empty() http://www.heise.de/security/news/…-26526062/read/
Fix: https://typo3.org/fileadmin/secu…13/fix_65113.sh
Was wird gesucht und ersetzt:
PHP
Alles anzeigen// search: if (parent::authUser($userRecord)) { if (!empty($this->login['uident_text'])) { if ($this->login['uident'] && $this->login['uname']) { // replace: if (is_bool($checkResult = parent::authUser($userRecord)) && $checkResult) { if ((string)$this->login['uident_text'] !== '') { if ((string)$this->login['uident'] !== '' && $this->login['uname']) {
wie man es hätte besser machen köönen (mMn):PHP
Alles anzeigenif(parent::authUser($userRecord) === true){ if( isset($this->login['uident_text'])and is_string($this->login['uident_text'])and strlen($this->login['uident_text']) > 0 and isset($this->login['uident'])and is_string($this->login['uident'])and strlen($this->login['uident']) > 0 and isset($this->login['uname'])and is_string($this->login['uname'])and strlen($this->login['uname']) > 0 ){ // OK } } // oder noch besser if(parent::authUser($userRecord) === true){ $e = 0; foreach(array('uident_text', 'uident', 'uname') as $offset){ if( !isset($this->login[$offset]) or !is_string($this->login[$offset]) or strlen($this->login[$offset]) < 1 ){ $e++; break; } } if($e === 0){ // OK } // ... }Kommentar zum Fix:
PHP
Alles anzeigen// warum ist das schlecht (vor dem fix): if (parent::authUser($userRecord)) { // weil es kann alles ausser "", 0, false, null sein kann // warum das (nach dem fix) quark: if (is_bool($checkResult = parent::authUser($userRecord)) && $checkResult) { // weil das so ziemlich das gleiche wie das ist: if (parent::authUser($userRecord) === true){ // warum ist das schlecht (vor dem fix): if (!empty($this->login['uident_text'])) { // weil empty() "schwammig" ist - siehe vorige posts // warum ist das schlecht (vor dem fix): if ($this->login['uident'] && $this->login['uname']) { // weil [uident] und [uname] alles ausser "", 0, false, null sein kannAlso immer schön auf den Typ ( === , !== ) prüfen.
Nebenbei ist das lesen des Codes auch noch einfacher. Denn wenn da steht:
dann weiß man auf jeden fall was genau hier erwartet wird.
Wenn man sich jetzt noch (soweit wie möglich) daran hält, dass keine "mixed types" aus einer Methode/Funktion returnd werden,
dann weiß man: diese Methode/Funktion gibt entweder TRUE oder FALSE zurück.