Diskuze: Nefunkční POST
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 24 zpráv z 24.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Hned ten první úryvek kodu je celý v
if($_POST)
Hneď si tam doplň funkciu isset(). Co ti vráti $nabidka ked si ju dumpnes ?
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.
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?
Kazdopadne používaj if(isset(Post)){}. No ja osobne z týchto par riadkov tam chybu nenájdem.
sry za kod som na mobile
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 ...
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.
To je tiež super nápad ďakujem určite to niekedy vyskúšam.
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..
Problém je v tom že sa do podmienky nepredá $_POST. Čo máš v Odeslimail ?
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..
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?
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';
}
}
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.
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/nabidky//, 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
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
No, ale jak to mám do něj nasměrovat? Když dám do action SmerovacKontroler.php tak to nefunguje.. A ptám se na if(isset($_POST[nazev_formulare]))? nebo jinak? Samozřejmě mám ve fromu atribut name
Když to z formu nasměruji na Smerovac, vyhodí to chybu:
Class 'Kontroler' not found in SmerovacKontroler.php on line 7
To je ten řádek nazačátku, který vypdá takto:
class SmerovacKontroler extends Kontroler
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
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
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ě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.
Zobrazeno 24 zpráv z 24.