NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Nefunkční POST

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:21.3.2016 23:18

Ahoj.
Nějakou dobu už sedím nad tím, proč mi nefunguje toto:

$odesilacEmailu->odesli(trim($nabidka['email']), 'Nová reakce na nabídku ', '<p>Přijata nová reakce na podanou nabídku z webu.</p>'
                   . '<p><strong>Jméno a příjmení: </strong>'.$_POST['jmeno'].'<br>'
                   . '<strong>Email: </strong>'.$_POST['email'].'<br>'
                   . '<strong>Telefon: </strong>'.$_POST['telefon'].'<br></p>', '[email protected]');
           $this->pridejZpravu('Váš zájem o nabídku byl úspěšně odeslán!');
           $this->presmeruj('nabidka/'.$nabidka['ID_nabidka'].'/');

K tomu mám v šabloně v modal okně tento formulář (pro jistotu celá šablona):

<div class="obsah-subpage">
    <div class="subpage-content">
        <h3>Nabídka č. <?= $nabidka['ID_nabidka'] ?></h3>
        <hr>
        <p style="font-size: 15px">Typ produktu: <a style="color: #217399; text-transform: uppercase;font-weight: bold"><?= $nabidka['typ_produktu'] ?></a></p>
        <p style="font-size: 15px">Celková výše: <a style="color: #217399; text-transform: uppercase;font-weight: bold"><?= number_format($nabidka['celkova_vyse'],0,',',' ') ?> Kč</a></p>
        <hr>
        <div class="subpage-box-levy">
        <p>Lokalita: <?= $nabidka['lokalita'] ?></p>
        <p>Datum vložení nabídky: <?php SetLocale(LC_ALL, "Czech");echo($datum=date( "d.m.Y H:i",strtotime($nabidka['vlozeno'])));?></p>
        <p>Splatnost (v letech): <?= $nabidka['splatnost'] ?></p>
        </div>
        <div class="subpage-box-pravy">

        </div>
        <div style="clear: both"></div>
    </div>
    <div class="subpage-nabidka">
        <div class="nabidka-content">
    <button type="button" class="btn btn-default btn-nabidka"><a data-toggle="modal" data-target="#nabidka">Mám zájem o nabídku!</a></button>
    </div>
    </div>
</div>

<div id="nabidka" class="modal fade" role="dialog">
  <div class="modal-dialog">

    <!-- Modal content-->
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal">&times;</button>
        <h4 class="modal-title">MÁM ZÁJEM O NABÍDKU</h4>
      </div>
      <div class="modal-body">
          <form name="nabidka" class="form-horizontal" role="form" method="post">
              <div class="form-group">
                <label class="control-label col-sm-2" for="jmeno">Jméno a příjmení:</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" name="jmeno" placeholder="Zadejte vaše jméno a příjmení" value="">
                </div>
              </div>
              <div class="form-group">
                <label class="control-label col-sm-2" for="email">Email:</label>
                <div class="col-sm-10">
                    <input type="email" class="form-control" name="email" placeholder="Zadejte vaši emailovou adresu" value="">
                </div>
              </div>
              <div class="form-group">
                <label class="control-label col-sm-2" for="telefon">Telefon:</label>
                <div class="col-sm-10">
                    <input type="tel" class="form-control" name="telefon" placeholder="Zadejte vaše telefonní číslo" value="">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                    <button type="submit" class="btn btn-default">Uložit</button>
                </div>
              </div>
          </form>
      </div>
    </div>
  </div>
</div>

OdesilacEmailu je v pohodě, ten stejný mi jinde funguje. Jde o to, že když vyplním formulář a odešlu, nenapíše to žádnou hlášku, mail mi nepřijde a přesměruje to na domena.cz/nabidky//

Podstránka nabidky slouží k výpisu všech, pokud je za lomítkem nějaké číslo, vyhledají se pouze příslušné typy, právě dle čísla, ale to je v tuto chvíli jedno, to stejně funguje.

Neví někdo, proč mi to nechce odesílat a proč to přesměrovává právě na domena.cz/nabidky// ??

Díky

 
Odpovědět
21.3.2016 23:18
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:21.3.2016 23:30

Hned ten první úryvek kodu je celý v

if($_POST)
 
Nahoru Odpovědět
21.3.2016 23:30
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:21.3.2016 23:46

Hneď si tam doplň funkciu isset(). Co ti vráti $nabidka ked si ju dumpnes ?

Nahoru Odpovědět
21.3.2016 23:46
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:21.3.2016 23:51

Chybu by som hľadal za tou $nabidka. Kedže vyzera to tak ze script sa vykoná ale hodnoty z pola nejakým spôsob nevie prečítať teda akoby tam neboli a to by vysvetľovalo aj zle presmerovanie aj ten mail.

Nahoru Odpovědět
21.3.2016 23:51
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:22.3.2016 0:11

Nabidka funguje dobře. Do šablony se vše načítá správně, když si dám print_r($nabidka), vypíše to celé pole, když si to dám ale do bloku if($_POST) tak to nevypíše nic.. Takže tam bude někde chyba, když to jakoby nepustí dovnitř ifu?

 
Nahoru Odpovědět
22.3.2016 0:11
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:22.3.2016 0:16

Kazdopadne používaj if(isset(Post)){}. No ja osobne z týchto par riadkov tam chybu nenájdem.

sry za kod som na mobile

Nahoru Odpovědět
22.3.2016 0:16
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:22.3.2016 0:19

Ja ked používam post riešim to takto.

if(isset($_POST['submit'])){
  $test = $_POST['firstname'];
  echo $test;
}

A už len ďalej pracujem s premennou ...

Nahoru Odpovědět
22.3.2016 0:19
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Dominik Gavrecký
Neaktivní uživatel:22.3.2016 2:31

Ještě lepší je mít pole povolených a zároveň požadovaných hodnost a proti němu kontrolovat post, když už jsme u té bezpečnosti.

Nahoru Odpovědět
22.3.2016 2:31
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Dominik Gavrecký:22.3.2016 7:05

To je tiež super nápad ďakujem určite to niekedy vyskúšam.

Nahoru Odpovědět
22.3.2016 7:05
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:22.3.2016 10:01

Fak nevím co sem už dát za kód, protože i když vložím tu podmínku isset submit a zkusím si vyechovat pouze proměnnou s jedním POSTem, nedělá to nic.. Furt stejný problém jako na začátku - bez hlášky, přesměruje se to jinam než co je v tom bloku IF, který se ani nezačne provádět..

 
Nahoru Odpovědět
22.3.2016 10:01
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:22.3.2016 10:06

Problém je v tom že sa do podmienky nepredá $_POST. Čo máš v Odeslimail ?

Nahoru Odpovědět
22.3.2016 10:06
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:22.3.2016 10:10

No odesilacemailu je právě potom začleněný až v tom bloku IF, který se ani nevykoná.. když nechám jen podmínku if POST a zkusím něco vyechovat, pořád stejný problém.. Ještě nikdy jsem se nesetkal s tím, že by se mi nepovedlo POST, resp. že by se skript tvářil, že se to neprovedlo..

 
Nahoru Odpovědět
22.3.2016 10:10
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:22.3.2016 22:11

Pořád googlim, ale nevím, proč zrovna tady se mi podmínka s POSTem ani nezapne, ale v ostatních případech na jiných kontrolerech ano.. Stalo se to už někomu třeba? :)

 
Nahoru Odpovědět
22.3.2016 22:11
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Michal Kuba:22.3.2016 23:29

Ani když jsem různě vyměnil v inputech pořadí name, id a type, tak nic.. Pro jistotu celý kontroler, tam by to ale mělo být ok, snad:

class NabidkaKontroler extends Kontroler {
    public function zpracuj($parametry){
       $spravceClanku= new SpravceClanku();
       $odesilacEmailu= new OdesilacEmailu();
       $nabidka=$spravceClanku->vratNabidku($parametry[0]);
       $this->data['nabidka']=$nabidka;

       if($_POST)
       {

           $odesilacEmailu->odesli(trim($nabidka['email']), 'Nová reakce na nabídku ', '<p>Přijata nová reakce na podanou nabídku z webu.</p>'
                   . '<p><strong>Jméno a příjmení: </strong>'.$_POST['jmeno'].'<br>'
                   . '<strong>Email: </strong>'.$_POST['email'].'<br>'
                   . '<strong>Telefon: </strong>'.$_POST['telefon'].'<br></p>', '[email protected]');
           $this->pridejZpravu('Váš zájem o nabídku byl úspěšně odeslán!');
           $this->presmeruj('nabidka/'.$nabidka['ID_nabidka'].'/');

       }

       $this->hlavicka = array(
                        'titulek' => 'Domena.cz - Nabídka',
                        'klicova_slova' => '',
                        'popis' => ''
                );
       $this->pohled = 'nabidka';

   }
}
 
Nahoru Odpovědět
22.3.2016 23:29
Avatar
CZkiniCZ
Člen
Avatar
CZkiniCZ:23.3.2016 3:06

Ješte to může být hostingem. To se mi totiš stalo na endoře (žádná chybová hláška ale mail nedorazil) ukázalo se že změnily podmínky a ve freečku odesílání mailů nepovolují a musel jsem přejít na placenou službu. Zkontroluj si jestly to je umožněné na tvém balíčku.

Editováno 23.3.2016 3:08
Nahoru Odpovědět
23.3.2016 3:06
Age of the geek.
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na CZkiniCZ
Michal Kuba:23.3.2016 7:34

Určitě je, na jiných podstrankach to funguje jak má

 
Nahoru Odpovědět
23.3.2016 7:34
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na CZkiniCZ
Michal Kuba:23.3.2016 10:20

Tak asi vím, kde je problém.. Mám v šabloně layoutu celého webu (rozlozeni) jeden formulář, který slouží k přesměrování na dané nabídky, po vybrání nějaké kategorie. To obsluhuje SmerovacKontroler (je to dle zdejšího MVC).

A právě tady ta nabídka je ve své podstránce a patrně se ten POST zpracovává ve Smerovaci a proto to nastavuje domena.cz/nabid­ky//, mezi poslední dvě lomítka to nedoplní číslo podle formuláře ze šablony.. Nefunguje mi to totiž ani na jiné podstránce, kde je formulář, dělá to stejnou chybu..

Když se to snažím zpracováváat vše přes Smerovac, nejde to, ani když nastavím ve formu action..

Nevíte někdo, jak to udělat, když mám v layoutu formulář, který se plní ve Smerovaci a potom mám v jednotlivých podstránkách jiný form, a ten se vyřizuje v jiných kontrolerech? Díky

 
Nahoru Odpovědět
23.3.2016 10:20
Avatar
Jan Bezdíček
Tvůrce
Avatar
Odpovídá na Michal Kuba
Jan Bezdíček:23.3.2016 10:32

Kdyz neco delas "na vsech strankach" musis to delat v tom routeru (smerovaci) a proste to MUSI jit ... pokud to dela vetsi problemy, tak se mozna zamyslet nad jinym provedenim

 
Nahoru Odpovědět
23.3.2016 10:32
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
Michal Kuba:23.3.2016 10:37

No, ale jak to mám do něj nasměrovat? Když dám do action SmerovacKontro­ler.php tak to nefunguje.. A ptám se na if(isset($_POS­T[nazev_formu­lare]))? nebo jinak? Samozřejmě mám ve fromu atribut name :)

 
Nahoru Odpovědět
23.3.2016 10:37
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
Michal Kuba:23.3.2016 10:44

Když to z formu nasměruji na Smerovac, vyhodí to chybu:
Class 'Kontroler' not found in SmerovacKontro­ler.php on line 7

To je ten řádek nazačátku, který vypdá takto:

class SmerovacKontroler extends Kontroler
 
Nahoru Odpovědět
23.3.2016 10:44
Avatar
Jan Bezdíček
Tvůrce
Avatar
Jan Bezdíček:23.3.2016 10:45

pres SmerovacKontroler to jde vzdy ... Smerovac urcuje, ktery controller se ma zavolat PO smerovaci. Action uplne vypust, smaz ten atribut z formu. Davat name celemu formulari je pro me taky celkem nezvyklost, vetsinou se to dela tak, ze se da name pouze submitu. Kazdopadne kdyz to shrnu, tak byl mel mit ciste jen

<form method="POST">

poté někde v inicializační metodě ve Smerovaci (run / init nebo neco co se vzdy spusti) zkus vepsat

var_dump($_POST);

a odesli formular

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
23.3.2016 10:45
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
Michal Kuba:23.3.2016 10:54

Funguje to, nevím proč jsem o takto jednoduše nezkusil hned a místo toho tu složistost furt větvil.. Do db to ukládá, při pokusu odeslat mail to hodí sice úspěch, ale mail nepřijde, to už bude ale jen drobnost :)

 
Nahoru Odpovědět
23.3.2016 10:54
Avatar
Jan Bezdíček
Tvůrce
Avatar
Odpovídá na Michal Kuba
Jan Bezdíček:23.3.2016 11:06

Pokud ses na localhostu, tak asi nemas zadny postovni server. Kazdopadne pro maily doporucuju pouzivat super knihovnu pro PHP zvanou PHPMailer, lze v ni specifikovat SMTP server a dalsi vychtavky :) takze z localhosto to klidne muzes posilat pres google ci seznam. Kazdopadne kdybys mel problem, neboj se ozvat :) zdejsi MVC system pro me byl taky zacatkem a dnes je z nej pomalu uz framework :D

 
Nahoru Odpovědět
23.3.2016 11:06
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Jan Bezdíček
Michal Kuba:23.3.2016 11:14

Dělám to normálně na hostingu, byl problém že jsem nedosazoval žádnou adresu, jelikož jsem to předával neexistující proměnou.

 
Nahoru Odpovědět
23.3.2016 11:14
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.