Nevykoná sa požiadavka requestu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nevykoná sa požiadavka requestu – PHP – Fórum – Programujte.comNevykoná sa požiadavka requestu – PHP – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1602 příspěvků
6. 12. 2017   #1
-
0
-

Ahoj, mám projekt ovládania hlasom z webu pre 3rd party zariadenia. Mám na stránke formulár s dvomi metódami vstupu:
 

  • Input + submit, napíšem ručne čo potrebujem
  • Hlasom po kliku na ikonu (Ajax spustí PHP script)

Hlas sa nahráva pokým hovorím a po dorozprávaní sa preloží na string. Nakoľko je to ale niekedy nepresné, musím podmienkami OR prevádzať výsledný string, ktorý sa zapíše do texťáku, aby som mal na strane 3rd party zariadenia iba jednu podmienku. Obe metódy sa spracuvávajú totožne. Tú hlasom spúšťa ajax.
Ak mám OR statementy pri if v manuálnom, funguje to OK. Keď to mám pri hlase, nespracuje sa to a do texťáku sa nič nezapíše... Kde môže byť problém, nejaký timeout?
FUNGUJE OK, pri manuálnom ešte submit atd.... toto vnútro je identické.
 

<?php 
    $preklad = $_POST['preklad'];
     if($preklad == ""){
    echo "Prázdne pole ťažko zapíšem :-)!";
  }elseif(strlen($preklad) > 50){
    echo "Tvoja požiadavka je príliš dlhá!";
  }else{
    $preklad = htmlspecialchars( $preklad);
     $preklad = trim( $preklad );
    file_put_contents("preklady.txt", $preklad); }
?>

FUNGUJE OK iba pri manuálnom zadaní, pri hlasom sa nevykoná.
 

<?php 
 $preklad = $_POST['preklad'];
     if($preklad == ""){
    echo "Prázdne pole ťažko zapíšem :-)!";
  }elseif(strlen($preklad) > 50){
    echo "Tvoja požiadavka je príliš dlhá!";
  }else{
    $preklad = htmlspecialchars($preklad);
     $preklad = trim( $preklad );
     if ($preklad=="Zapni LED1" || $preklad=="Zapni LED 1" || $preklad=="Zopni LED 1" || $preklad=="Zopni led 1" || $preklad=="Zapni led 1" || $preklad=="Zapni led1" ){
      $preklad=="Zapni LED 1";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Zapni LED2" || $preklad=="Zapni LED 2" || $preklad=="Zopni LED 2" || $preklad=="Zopni led 2" || $preklad=="Zapni led 2" || $preklad=="Zapni led2"){
          $preklad=="Zapni LED 2";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Zapni LED3" || $preklad=="Zapni LED 3" || $preklad=="Zopni LED 2" || $preklad=="Zopni led 3" || $preklad=="Zapni led 3" || $preklad=="Zapni led3"){
            $preklad=="Zapni LED 3";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Zapni LED4" || $preklad=="Zapni LED 4" || $preklad=="Zopni LED 4" || $preklad=="Zopni led 4" || $preklad=="Zapni led 4" || $preklad=="Zapni led4"){
              $preklad=="Zapni LED 4";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Vypni LED1" || $preklad=="Vypni LED 1" || $preklad=="Vypni led 1" || $preklad=="Vypni led1"){
      $preklad=="Vypni LED 1";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Vypni LED2" || $preklad=="Vypni LED 2" ||  $preklad=="Vypni led 2" || $preklad=="Vypni led2"){
          $preklad=="Vypni LED 2";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Vypni LED3" || $preklad=="Vypni LED 3" ||  $preklad=="Vypni led 3" || $preklad=="Vypni led3"){
            $preklad=="Vypni LED 3";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Vypni LED4" || $preklad=="Vypni LED 4"  || $preklad=="Vypni led 4" || $preklad=="Vypni led4"){
              $preklad=="Vypni LED 4";
      file_put_contents("preklady.txt", $preklad);
     }else if ($preklad=="Zapni" || $preklad=="Zepni" || $preklad=="Zopni" || $preklad=="Zapni všetko" || $preklad=="Zapni diody" || $preklad=="Spusť diody"){
              $preklad=="Zapni";
      file_put_contents("preklady.txt", $preklad);
     }
     else if ($preklad=="Vypni" || $preklad=="Vypnúť" || $preklad=="Vypni všetko" || $preklad=="Vypni diódy"){
              $preklad=="Vypni";
      file_put_contents("preklady.txt", $preklad);
     }
     }

?>
Nahlásit jako SPAM
IP: 147.232.177.–
Kit+15
Guru
6. 12. 2017   #2
-
0
-

#1 Martin
Kdyby ses nesnažil recyklovat proměnnou $preklad, přišel bys na to hned. Překlad do ní totiž nedáváš.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
6. 12. 2017   #3
-
0
-

Ahoj, tak kde je problém? Keď to zadám cez normálny form tak mi to uloží bez problému i s tou konverziou na ten string.

Nahlásit jako SPAM
IP: 195.28.157.–
KIIV
~ Moderátor
+43
God of flame
6. 12. 2017   #4
-
0
-

#3 Martin
cim se do promenne hodnota priradi a cim se promenna porovnava?

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
6. 12. 2017   #5
-
0
-

#3 Martin
Nemáš tam přiřazení překladu do proměnné $preklad.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
6. 12. 2017   #6
-
0
-

však je tam spracovanie POST. 
Pozri na celé kódy, mám ich na githube: https://github.com/martinius96/arduino-nodemcu-hlas-ovladanie-hlasove-webkit
index.php je web, kde je možné zadať ručne/hlasom. Potrebuješ si to hodiť na webserver s HTTPS a pristupovať cez Chrome pre odtestovanie. V ajax.php (spracovanie prekladu pri hlase) tak ten funguje (nie je tam ten kód s OR.)
 

Nahlásit jako SPAM
IP: 195.28.157.–
Kit+15
Guru
6. 12. 2017   #7
-
0
-

#6 Martin
Však do $preklad dáváš jen $_POST['preklad']; Kdybys nerecykloval proměnné, tak by ti PHP řvalo, že používáš nedefinovanou proměnnou. Takhle ti jde na výstup jen to, co přišlo na vstupu - bez modifikace.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
6. 12. 2017   #8
-
0
-

Tak čo mám urobiť?  V stručnosti

Nahlásit jako SPAM
IP: 195.28.157.–
Kit+15
Guru
6. 12. 2017   #9
-
0
-

#8 Martin
Zkus třeba tohle: 

if ($preklad=="Zapni LED1" || $preklad=="Zapni LED 1" || $preklad=="Zopni LED 1" || $preklad=="Zopni led 1" || $preklad=="Zapni led 1" || $preklad=="Zapni led1") {
    $preklad = "Zapni LED 1";
    file_put_contents("preklady.txt", $preklad);
}

atd.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Martin
~ Anonymní uživatel
1602 příspěvků
6. 12. 2017   #10
-
0
-

Výsledok totožný, nefunguje to. 

Nahlásit jako SPAM
IP: 195.28.157.–
Kit+15
Guru
6. 12. 2017   #11
-
0
-

#10 Martin
Význam pojmu "nefunguje" je velmi široký. Co ti to zapíše do souboru preklady.txt?

Je také možné, že nevyhovuje ani jedna z podmínek. Co takhle před porovnáváním vyházet z toho stringu všechny mezery a převést na malá písmenka? Bude se to porovnávat mnohem lépe.

Na vstupu používej jiný název proměnné než na výstupu. Jinak na hledání chyb strávíš mládí. Do každé proměnné zapisuj pouze jednou!

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
7. 12. 2017   #12
-
0
-

Kazdopadne pokud se script nevykona, tak to jeste muze znamenat, ze ho posilas nekam jinam, nez mas.

Muze taky neco vypsat, ale v ajaxu to pravdepodobne ignorujes. Tim padem netusis co se deje. Jeste bys to mohl vypisovat do error logu web serveru a podivat se. V access logu muzes pro zmenu zkontrolovat, jestli to chodi kam ma. Je to takova forma debugovani. Pokud nepomuze, zacnes pridavat ladici vypisy, abys vedel, co se vubec ve scriptu deje.

Kazdopadne ja bych resil akci vice jako parser. Zjistit, jestli chces vypnout ci zapnout a pak zjistit jestli vse, nebo led a kterou z nich. To se da i lepe delat pomoci asociativniho pole. Vstup prevedes na male pismena, muzes se zbavit i diakritiky a tak dale..

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
peter
~ Anonymní uživatel
4014 příspěvků
7. 12. 2017   #13
-
0
-

Do toho php bych pridal
- error_reporting
- echo $preklad; nez zacnes resit podminky
- Kazdopadne, jak to popisujes, spise selhal ajax, vubec jsi neodeslal data. Muzes zkusit udelat ajax pres iframe nebo window.open. Zkus si udelat ten ajax samostatne s kliknutim na tlacitko. Mozna v ajaxu nemas callback funkci.
- u php, kdyz zapisujes do souboru, tak je dobre si ho locknout. Pokud se spusti 2 zapisy najednou, tak je obvykle soubor vynulovan a nepristupny. Nevim teda, jestli se tak chova i file_put_contents, ale fwrite urcite a je to dost neprijemny bug.
 

Nahlásit jako SPAM
IP: 2001:718:2601:258:5417:b1...–
Kit+15
Guru
7. 12. 2017   #14
-
0
-

#13 peter
file_put_contents() to má vyřešeno, což je jedním z důvodů, proč ho protežuji před fwrite().

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 64 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý