Fórum Root.cz
Hlavní témata => Server => Téma založeno: Tom Liberec 01. 09. 2013, 21:54:33
-
Jedno s toho je učebnicový kód s linuxsoft.cz
Druhé je kód Serg.Borubina koding.cz , pokud to však zkouším rozchodit v XAMPP nechodí to. Zřejmě pomíjím něco zcela základního, někteří si povzdechnou, že opět.
Takže budu vděčen i za kopanec. Pokud budete za vyřešení mojí neschopnosti nějako odměnu ozvěte se na tpilar@atlas.cz, případně i zítra dopoledne.
Ještě popíši jaký mi to "generuje" , zobrazuje výsledek. form2.php
Notice: Undefined index: go in C:\xampp\htdocs\_____mail\form2.php on line 11
Notice: Undefined variable: _print in C:\xampp\htdocs\_____mail\form2.php on line 64
Kromě toho se tagy a text :
Notice: Undefined variable: email in C:\xampp\htdocs\_____mail\form2.php on line 76
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<?
function JeEmail ($cislo)
{
return ereg("^.+@.+\..+$",$cislo);
}
$BudemeZobrazovat=true;
if (!empty($_POST)) // tak už se odesílalo a musíme kontolovat
{
if (!JeEmail($_POST["email"]))
{
// kontrolou jsme neprošli
echo "Tohle nevypadá jako e-mail!";
}
else
{
// kontolou jsme prošli
$BudemeZobrazovat=false;
echo "Zpracovávám ". $_POST["email"];
}
}
if ($BudemeZobrazovat):?>
<form method="post" action="26_complex.php">
E-mail: <input name="email" value="<?echo $_POST["email"]?>">
<input type="Submit" name="odesli">
</form>
<?endif;?>
-------------------------- případ neschopnosti dva ----------------------
<?php
function checkmail($mail){
$mail = trim($mail);
if(!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,20}+([a-z0-9_-]){0,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail))
return 0;
return $mail;
}
if(isset($_POST['go']) || ($_POST['go'] == 'Odeslat'))
{
$_ERR='';
$_print='';
$name = htmlspecialchars(strip_tags(trim($_POST['jmeno'])));
$prijmeni = htmlspecialchars(strip_tags(trim($_POST['prijmeni'])));
$email = htmlspecialchars(strip_tags($_POST['email']));
$pass = htmlspecialchars(strip_tags(trim($_POST['pass'])));
$text = htmlspecialchars(strip_tags(trim($_POST['text'])));
if(!isset($name) OR $name == '')
{
$_ERR.='<span style="color:red">Chyba: Nezadal jste jméno!</span>';
}
elseif(!isset($prijmeni) OR $prijmeni == '')
{
$_ERR.='<span style="color:red">Chyba: Nezadal jste příjmeni!</span>';
}
elseif(checkmail($email) === 0)
{
$_ERR.='<span style="color:red">Chyba: Nezadal jste email nebo byl zadán špatně!</span>';
}
elseif(!isset($pass) OR $pass == '')
{
$_ERR.='<span style="color:red">Chyba: Zadejte heslo!</span>';
}
elseif(empty($text))
{
$_ERR.='<span style="color:red">Chyba: Napište zpravu!</span>';
}
/*------NOVE----------*/
if($_ERR != '')
{
$_print = $_ERR;
}
else
{
echo'
<script>
alert("Data jsou odeslána")
</script>
';
}
/*-------KONEC--------*/
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
</head>
<body>
<?php
echo $_print;
?>
<form action="" method="POST">
<table style="250px; border:3px solid black;">
<tr><td style="width:100px;">Jméno:</td>
<td style="width:150px;"> <input type="text"
name="jmeno" value="<?php echo $name;?>"></td></tr>
<tr><td style="width:100px;">Príjmení:</td>
<td style="width:150px;"> <input type="text"
name="prijmeni" value="<?php echo $prijmeni;?>"></td></tr>
<tr><td style="width:100px;">E-mail:</td>
<td style="width:150px;"> <input type="text"
name="email" value="<?php echo $email;?>"></td></tr>
<tr><td style="width:100px;">heslo:</td>
<td style="width:150px;"> <input type="password"
name="pass"></td></tr>
<tr><td style="width:100px;">Zprava:</td>
<td style="width:150px;"><textarea rows="5" cols="25" wrap="soft"
name="text"><?php echo $text;?></textarea></td></tr>
<tr><td colspan="2" style="width:250px; text-align:right;">
<input type="submit" name="go" value="Odeslat"></td></tr>
</table>
</form>
</body>
</html>
Předem díky.
-
Mohl bych to rovnou zadat jako úkol validace odesílání e-mailu s formuláře, ovšem při tom jak dopadám s učebnicovým příkladem by to mohlo dopadnout tak, že bych měl od někoho z Vás použitelné řešení, které bych stejně nebyl schopen rozchodit.
Proto spíž žádám to nakopnutí, klidně i takto "nad stolem", neboť očekávám nějaké své základní nepochopení, či chybu žáka páté třídy, ovšem takového co na to programování vždy měl.
-
V com je problem s tym druhym prikladom? Ze hadze tie notice o nedefinovanych premennych?
Daj hned pod <?php riadok: error_reporting(E_ALL ^ E_NOTICE);
<?php
error_reporting(E_ALL ^ E_NOTICE);
function checkmail($mail){
$mail = trim($mail);
...
-
Co napsat a neurazit?
Nic neříkající název tématu a nesrozumitelný popis problému. Co nefunguje, jak by to mělo fungovat a jak se to projevuje, že to nefunguje? Proč dva různé kusy kódu s podobnou funkcionalitou, má to nějaký význam kromě zmatení nepřítele?
Další věc je, proč takhle lepíte kód z návodů na internetu a nepoužijete nějaký framework, ale to je asi nad rámec tohoto topicu.
-
if(isset($_POST['go']) || ($_POST['go'] == 'Odeslat'))prepsat na if(isset($_POST['go']) && ($_POST['go'] == 'Odeslat'))
to je prvni notice... druhy je ten, ze tam nekorektne pracuje s promennou $_print (chybi pred tim if(isset...), nicmene celkove je to takovy hovnokod... misto elseifu by mely byt normalni ify, davat tam alert je blbost, email je lepsi testovat pres filter_var (http://php.net/manual/en/function.filter-var.php) atd.
-
Neumím a neznám framevorky a jejich používání.
Docela mne fackuji i učebnicove příklady. Proto ten druhý příklad.
Otázka tedy je. Proc mi nefunguje učebnicovy příklad s www.koding.cz ?
Tam mu to funguje dobře. Za praktickou radu kde je možná chyba PCnity diky vyzkouším.
Potrebuji validovat e-mail tak aby mi nezmizely z již vyplněného formuláře a lidi se na odeslání mailu raději uplne nevykaslali.
Proto že jsem PHP začátečník packal, libilo se mi celý řešeni Borubina s koding.cz ovšem zdrojak co on tam má mi nefunguje ani v XAMPPu.
To je soubor form2 . Nejenom, že to vypisuje uvedene PHP chybove hlášky ale i vysledek zobrazovany prohlížečem je na nic.
-
I když jsem tam změnil to co napsal DK hází to chybu :
Notice: Undefined variable: _print in C:\xampp\htdocs\_____mail\form2.php on line 64
Jenomže pořád mi to zapisuje, dost možná ne zcela chápu jak funguje XAMPP, do formulářových polí tagy HTML.
-
Omluva.
http://www.itcc.cz/mail/form2.php
Po opravě, kterou zde napsal DK to funguje jak má. Možná ještě budu dnes, tedy až se trochu vyspím, otravovat pokud si nabiji ústa s integrací do webu.
Ovšem to mne vede k otázce, proč to nejelo v XAMPP a na reálných stránkách ano. Musím zkontrolovat s čím vším, tedy zda si to ze stránek koding.cz něco nepůjčuje? ( Prověřím každopádně. )
Nebo mám nějakou velmi zásadní chybu v myšlení o XAMPP ?
Tedy v tom, jak jej používám, že jsem mu přisoudil nějakou vlastnost, kterou nemá která patří např.HTML, či zobrazení LOCALHOST není natolik totéž jako fungování na hostingu, jak já si to maluji ?
-
Příliš daleko jsem se nedostal, nevím kam mám vepsat :
// $to - příjemce emailu
$to = 'tpilar@atlas.cz,tomasvesec@seznam.cz';
// $from - odesílatel
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: tpilar.cz<tpilar@atlas.cz>'. "\r\n";
Jediné co mi od minule došlo, je že na http://www.itcc.cz/mail/form2.php nemám zřejmě v administraci nastaveny e-maily.
Takže budu zkoušet na hostingu kde to nastaveno mám.
-
Abych se zeptal konkrétně, pokouším se dostat to na správné místo, tj. před nebo za echo, kdy jsou splněny všechny podmínky ?
/*------NOVE----------*/
if($_ERR != '')
{
$_print = $_ERR;
}
else
{
echo'
<script>
alert("Data jsou odeslána")
</script>
';
}
/*-------KONEC--------*/
-
Nejsem zadny super coder, ale do oci mě prastilo par veci.
na radku 11 mas if (!empty($_POST))muj zapis by byl if (isset($_POST['email'])) { ..... } muj kod zjisti zda existuje POST['email'] pak vubec zacne neco delat
u tveho druheho erroru bych zapsal
$_print='';
if(!empty($_ERR)) {$_print=$_ERR; }
else {echo 'Data jsou odeslana';} $_ERR je potreba nekde definovat tak ji hod na zacatek a dej $_ERR='';Na rozdil od toho tveho mz nevyskoci hlaska, ale rovnou se vypise na strance
-
Což o to, původně to mám takhle řešeno ovšem problém byl ( ještě na aktuálních stránkách pobočky je ) v tom, že pokud nesedí nějaký údaj, zejména mi jde o e-mail tak se smazal celý vyplněný formulář.
V podstatě nejsem schopný do tohoto, což funguje bez chyb ( i když souhlasím, že lepší je vypisování na stránku než do vyskakovacího okna ) :
<?php
function checkmail($mail){
$mail = trim($mail);
if(!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,20}+([a-z0-9_-]){0,20}@(([a-z0-9-]+\.)+(com|net|org|mil|".
"edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
"9]{1,3}\.[0-9]{1,3})$/is",$mail))
return 0;
return $mail;
}
if(isset($_POST['go']) || ($_POST['go'] == 'Odeslat'))
{
$_ERR='';
$_print='';
$name = htmlspecialchars(strip_tags(trim($_POST['jmeno'])));
$prijmeni = htmlspecialchars(strip_tags(trim($_POST['prijmeni'])));
$email = htmlspecialchars(strip_tags($_POST['email']));
$pass = htmlspecialchars(strip_tags(trim($_POST['pass'])));
$text = htmlspecialchars(strip_tags(trim($_POST['text'])));
if(!isset($name) OR $name == '')
{
$_ERR.='<span style="color:red">Chyba: Nezadal jste jméno!</span>';
}
elseif(!isset($prijmeni) OR $prijmeni == '')
{
$_ERR.='<span style="color:red">Chyba: Nezadal jste příjmeni!</span>';
}
elseif(checkmail($email) === 0)
{
$_ERR.='<span style="color:red">Chyba: Nezadal jste email nebo byl zadán špatně!</span>';
}
elseif(!isset($pass) OR $pass == '')
{
$_ERR.='<span style="color:red">Chyba: Zadejte heslo!</span>';
}
elseif(empty($text))
{
$_ERR.='<span style="color:red">Chyba: Napište zpravu!</span>';
}
/*------NOVE----------*/
if($_ERR != '')
{
$_print = $_ERR;
}
else
{
echo'
<script>
alert("Data jsou odeslána")
</script>
';
}
/*-------KONEC--------*/
}
?>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title></title>
</head>
<body>
<?php
echo $_print;
?>
<form action="" method="POST">
<table style="250px; border:3px solid black;">
<tr><td style="width:100px;">Jméno:</td>
<td style="width:150px;"> <input type="text"
name="jmeno" value="<?php echo $name;?>"></td></tr>
<tr><td style="width:100px;">Príjmení:</td>
<td style="width:150px;"> <input type="text"
name="prijmeni" value="<?php echo $prijmeni;?>"></td></tr>
<tr><td style="width:100px;">E-mail:</td>
<td style="width:150px;"> <input type="text"
name="email" value="<?php echo $email;?>"></td></tr>
<tr><td style="width:100px;">heslo:</td>
<td style="width:150px;"> <input type="password"
name="pass"></td></tr>
<tr><td style="width:100px;">Zprava:</td>
<td style="width:150px;"><textarea rows="5" cols="25" wrap="soft"
name="text"><?php echo $text;?></textarea></td></tr>
<tr><td colspan="2" style="width:250px; text-align:right;">
<input type="submit" name="go" value="Odeslat"></td></tr>
</table>
</form>
</body>
</html>
Nacpat ( integrovat ) něco v tomto duchu :
'.$message;
// $to - příjemce emailu
$to = 'tpilar@atlas.cz,tomasvesec@seznam.cz';
// $from - odesílatel
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: tpilar.cz<tpilar@atlas.cz>'. "\r\n";
if(mail($to, $title, $mess, $headers)){ // TOHLE ZŘEJMĚ NEBUDE JIŽ VŮBEC POTŘEBA
echo 'E-mail byl odeslán. Děkujeme.'; // TOHLE ZŘEJMĚ TAKÉ NE JE TO ŘEŠENO TÍM VYSKAKOVACÍM OKNEM
Nejsem si jist ani hlavičkou, ani proměnnými zda nemusí být ještě jinde definovány.
Další věc jenž se pokouším vyřešit je to heslo. Aby tam bylo konkrétní heslo typu, zvíře žijící v lese s parohy jelen.
Tam mám problém s tím, zda to řešit samostatnou funkcí nebo jen někde zde :
}
// TEDY ZDA MOHU MÍT ZDE if $pass == 'jelen'
elseif(!isset($pass) OR $pass == '') // nebo zde žádné OR ale jen $pass <> 'jelen' přičemž obojí tam zřejmě být nemůže
{
$_ERR.='<span style="color:red">Chyba: Zadejte heslo!</span>';