Zapis danych z formularza wraz z szablonem do HTML

0

Witam
Jestem początkującym webmasterem. Dostałem za zadanie utworzenie generatora stopek email. Przeszukałem sieci i udało mi się stworzyć (zmodyfikować udostępniony) generator. Problem polega na tym, że jest przycisk do wyświetlenia kodu i działa super. Potrzebował bym jednak drugi który pozwoli zapisać gotową stopkę w formie html na dysku lokalnym (użytkownik wybiera gdzie zapisać). Niestety nie udało mi się znaleźć żadnego rozwiązania tego problemu ;/
Index.php wygląda tak

<div class="container card hoverable">
            <div class="row valign-wrapper sig-header">
                <div class="col s6 valign top-logo-img">
                    <img src="img/top-logo.png">
                </div>
                <p class="title col s6 valign">Generator Stopki</p>
            </div>
            <form class="form" action="sig2.php">
            <div class="card-content">
                    <div class="input-field">
                        <i class="material-icons prefix">account_circle</i>
                        <input type="text" name="name" id="name" placeholder="Imię i Nazwisko">
                        
                    </div>
                    <div class="input-field">
                        <i class="material-icons prefix">business</i>
                        <input type="text" name="position" id="position" placeholder="Stanowisko">
                                            
                    </div>
                    <div class="input-field">
                        <i class="material-icons prefix">email</i>
                        <input type="text" name="email" id="email" placeholder="Email">
                                           
                    </div>
                    <div class="input-field">
                        <i class="material-icons prefix">phone</i> 
                        <input type="text" name="work" id="work" placeholder="Telefon kontaktowy">
                                           
                    </div>
                    
                </div>
                <div class="card-action">
                    <button type="submit" class="waves-effect waves-light btn">Wyświetl</button>
                </div>
            </form>
        </div>

natomiast sig2.php tak

<html>
<?php

      $slash = false;
      if($_GET['name']){
         $name = htmlspecialchars($_GET['name']);   
      }
      if($_GET['position']){
         $position = htmlspecialchars($_GET['position']);
      }
      if($_GET['email']){
         $email = htmlspecialchars($_GET['email']);   
      }
      if($_GET['work']){
         $work = htmlspecialchars($_GET['work']);
      }
      

   ?>
   <head>
      
        
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
   <body>
               <table width="100%" border="0" cellpadding="0" cellspacing="0">
                  <tr>
                     <td>
<font size="3">
   <span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">   
   Pozdrawiam <br />      
   </span>
</font>               
<font size="4">
   <span style="font-family: Arial, sans; font-size: 18px; color: #344446;">
<?php echo $name;?>   
   </span>
</font>
<br />
<font size="3">
   <span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">   
<?php echo $position;?><br />
<?php echo '<a href=mailto:'.$email.'></a><br />
Tel: <?php echo $work;?>
   </span>
</font>

   </body>
</html>

Proszę o wyrozumiałość i pomoc

0

Wygenerowany html możesz przecież zapisać w przeglądarce. Natomiast jeśli potrzebujesz to zrobić konkretnie w phpie - to użyj funkcji http://php.net/manual/en/function.fwrite.php i jako drugi parametr podaj stringa w którym umieścisz HTML'a którego masz w pliku sig2.php. Btw polecam założyć konto :) same profity ;P. A odnośnie zadanka - to oczywiście przekazuj parametry i zabezpiecz troszkę skrypt. Jeśli zaczynasz pracę jako web dev - to postaraj się też jak najbardziej odseparować kod, a w wolnych chwilach ucz się frameworków.

0

Tak wiem mogę zrobić zapisz jako jednak chodziło o to żeby zrobić to jako przycisk. Mogę prosić jakoś jaśniej. Niestety nie jestem aż tak biegły ;/
Myślę, że jak uda mi się znaleźć rozwiązanie to założę konto.

0

Kod wykorzystany jest jedynie w celu tego zadania. Nie będzie nigdzie dalej rozpowszechniany. Miał być prosty więc chyba nie potrzeba zabezpieczeń :) (jeszcze trzeba wiedzieć jak to zrobić) :)

0

Żebym nie robił wszystkiego za Ciebie - najpierw poprosze Cię o lepsze przygotowanie wynikowego kodu HTML. Jak widzisz jest niepoprawny - brakuje domknięć (tabela), tagi <font> są już od dawna nieużuwane. Tag z mailem jest niekompletny. Masz też nieużywaną zmienną $slash.

0

Jasne, naniosę stosowne poprawki i wkleję kod :)

0

Poprawiłem, dodatkowo zapomniałem, że ma być jeszcze logo :)

 <html>
<?php		
		if($_GET['name']){
			$name = htmlspecialchars($_GET['name']);	
		}
		if($_GET['position']){
			$position = htmlspecialchars($_GET['position']);
		}
		if($_GET['email']){
			$email = htmlspecialchars($_GET['email']);	
		}
		if($_GET['work']){
			$work = htmlspecialchars($_GET['work']);
		}
?>
	<head>        
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	</head>
<body>
	<span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">	
	Pozdrawiam
	</span><br/>
	<span style="font-family: Arial, sans; font-size: 18px; color: #344446;">
<?php echo $name;?>
	</span><br/>
	<span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">	
<?php echo $position;?><br />
<?php echo $email;?><br />
<?php echo 'Tel: ' .$work;?>
   </span>	    
<hr style="border-color: #e7e7e7; margin: 5px 0 0 0;" />									
<img src="ścieżka_do_logo" height="35" border="0" style="margin:10px 0 10px 0;"/>							
</body>
</html>
1
function getParam($name)
{
    if (!empty($_GET[$name])) {
        return htmlspecialchars($_GET[$name]);
    }
}

$name     = getParam('name');
$position = getParam('position');
$email    = getParam('email');
$work     = getParam('work');

if (!empty($_GET['download_button']) && $_GET['download_button'] == 1) {
    header('Content-Type: text/html');
    header('Content-Disposition: attachment; filename="stopka.html"');
}

$template = sprintf(
    '<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">Pozdrawiam</span>
        <br />
        <span style="font-family: Arial, sans; font-size: 18px; color: #344446;">%1$s</span>
        <br />
        <span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">
            %2$s<br />%3$s<br />Tel: %4$s
        </span>
        <hr style="border-color: #e7e7e7; margin: 5px 0 0 0;" />
        <img src="ścieżka_do_logo" height="35" border="0" style="margin:10px 0 10px 0;" />
    </body>
</html>', $name, $position, $email, $work
);

echo $template;

Pisane na kolanie - więc nie wymagajmy cudów :)

0

Dzięki za pomoc ale chyba jestem na to za słaby ;/ Robię coś zapewne źle. Wkleiłem ten kod w sig2.php pomiędzy <?php ?> ale niestety nie działa. Próbowałem to rozgryźć coś pozmieniać itp. ale brak wiedzy wygrał ;/

0

Na tej pierwszej stronie na której masz formularz z danymi do uzupełniania - dodaj wewnątrz bloku z formularzem

 <button type="submit" name="download_button" value="1">Wyślij i zapisz</button>
0

wyskakuje błąd w linijce z kodem

     if (!empty($_GET[$name])) {
0

Przepraszam faktycznie mogłem kod błędu wkleić :)
oto on:
Parse error: syntax error, unexpected 'Â ' (T_STRING) in /home/u877586731/public_html/sig2.php on line 4

0

1.Nie masz tam gdzieś przypadkiem ukrytego znacznika BOM? (możesz to sprawdzić za pomocą hexedytora)
2.Jakie kodowanie ma Twój plik?
3.Czy na pewno jest poprawnie kopiowany na serwer?

0

być może ja coś źle wkleiłem. Sig2.php wygląda tak

 <?php
function getParam($name)
{
    if (!empty($_GET[$name])) {
        return htmlspecialchars($_GET[$name]);
    }
}
 
$name     = getParam('name');
$position = getParam('position');
$email    = getParam('email');
$work     = getParam('work');
 
if (!empty($_GET['download_button']) && $_GET['download_button'] == 1) {
    header('Content-Type: text/html');
    header('Content-Disposition: attachment; filename="stopka.html"');
}
 
$template = sprintf(
    '<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
        <span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">Pozdrawiam</span>
        <br />
        <span style="font-family: Arial, sans; font-size: 18px; color: #344446;">%1$s</span>
        <br />
        <span style="font-family: Arial, sans; font-size: 14px; color: #a2a2a2;">
            %2$s<br />%3$s<br />Tel: %4$s
        </span>
        <hr style="border-color: #e7e7e7; margin: 5px 0 0 0;" />
        <img src="ścieżka_do_logo" height="35" border="0" style="margin:10px 0 10px 0;" />
    </body>
</html>', $name, $position, $email, $work
);
 
echo $template;

A formularz w całości wygląda tak:

 <!DOCTYPE html>

    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Generator Stopki</title>
        <link type="text/css" rel="stylesheet" href="css/formularz.css"  media="screen,projection"/>
        <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
        
     </head>
     
    <body id="main-body">
        
        <div class="container card">
            <div class="row valign-wrapper sig-header">
                <div class="col s6">
                    <img src="img/com40.png">
                </div>
                <p class="title col s6 valign">Generator Stopki</p>
            </div>
            <form class="form" action="com40.php">
            <div class="card-content">
                    <div class="input-field">
                        <i class="material-icons prefix">account_circle</i>
                        <input type="text" name="name" id="name" placeholder="Imię i Nazwisko">
                        
                    </div>
                    <div class="input-field">
                        <i class="material-icons prefix">business</i>
                        <input type="text" name="position" id="position" placeholder="Stanowisko">
                                            
                    </div>
                    <div class="input-field">
                        <i class="material-icons prefix">email</i>
                        <input type="text" name="email" id="email" placeholder="Email">
                                           
                    </div>
                    <div class="input-field">
                        <i class="material-icons prefix">phone</i> 
                        <input type="text" name="work" id="work" placeholder="Telefon kontaktowy">
                                           
                    </div>
                    </div>
                    
                <div class="card-action">
                    <button type="submit" class="waves-effect waves-light btn">Generuj</button>
                    <button type="submit" class="waves-effect waves-light btn" name="download_button" value="1">Wyślij i zapisz</button>
                </div>
                            </form>
        </div>       
    </body>
</html>

Sprawdzałem na serwerze i lokalnie na webserv

1

Sprawdź hexedytorem.
PHP sobie tego znaku nie wymyśliło przecież :-P

0

faktycznie były jakieś znaki ukryte. Po skasowaniu wszystko śmiga elegancko. Dzięki wielkie za pomoc i zaangażowanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1