Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Formularz kontaktowy - błąd w kodzie ?
Forum PHP.pl > Forum > Przedszkole
Miecho77
Walczę dzisiaj pół dnia z formularzem na stronie, poprzedni nie spełniał funkcji, można było wysłać pusty, źle wysyłał polskie znaki www.firma-krzak.pl/kontakt.html.

Programista nie jestem, mam podstawy html, ale na php poległem i nie mam czasu zgłębiać całego języka.

Doszedłem do jak powstawiać pola wymagane, sprawdzanie e-mail i wsio działa.
Utknąłem na kawałku kodu pobranym z netu - jeżeli jest któreś pole źle wypełnione przenosi na inna stronę (jak podam ta na której jest formularz nic się nie dzieje) z komunikatem o błędzie w formularzu a ja chciał bym żeby pozostał na tej samej, podobnie po wysłaniu poprawnego e-maila.

Nie mogę ruszyć z miejsca sprawdzenia nr telefonu - zero reakcji czego bym nie wpisał
Podobnie z załącznikiem - mogę dodać ale go nie wysyła.

Jak by ktos rzucił okiem na ten chaos będę wdzięczny

Kod
<?php
if(empty($_POST['submit'])){
?>
<form action="http://www.firma-krzak.pl/zalacznik.php" method="post"> <!--nazwa strony na której znajduje sie formularz-->
    <table>
        <tr><td class="prawy">Imie i Nazwisko <br>lub nazwa firmy:</td>
            <td><input type="text" name="nazwa" style="width:300px;"/></td></tr>
        <tr><td class="prawy">Kod pocztowy:</td>
            <td><input type="text" name="kod" style="width:100px;"/></td></tr>
                    <tr><td class="prawy">Adres e-mail:</td>
            <td><input type="text" name="email" style="width:300px;"/></td></tr>
        <tr><td class="prawy">Telefon:</td>
            <td><input type="text" name="tel" style="width:300px;"/></td></tr>
        <tr><td class="prawy">Tresc wiadomosci:</td>
            <td><textarea name="trescwiadomosci" cols="30" rows="6" style="width:300px;"></textarea></td></tr>
        <tr><td class="prawy">Wybierz adresata:</td>
            <td><select name="odbiorca" style="width:300px;">
                    
                    <option>biuro@firma-krzak.pl</option>
                    <option>projektowanie@firma-krzak.pl</option>
                    <option>nawadnianie@firma-krzak.pl</option>
                </select></td></tr>
        <tr><td class="srodek">Zalacznik 1:</td>
            <td class="zwykly"><input type="hidden" name="MAX_FILE_SIZE" value="2000000" /><INPUT type="file" name="plik1"></td></tr>
            
        <tr><td class="srodek">Zalacznik 2:</td>
            <td class="zwykly"><input type="hidden" name="wyslij" value="1" /><input type="hidden" name="MAX_FILE_SIZE" value="2000000" /><INPUT type="file" name="plik2"></td></tr>
        
        <tr><td class="srodek">Zalacznik 3:</td>
            <td class="zwykly"><input type="hidden" name="MAX_FILE_SIZE" value="2000000" /><INPUT type="file" name="plik3"></td></tr>
        
        <tr><td class="srodek"></td> 
            <td class="srodek"><input type="submit" name="submit" value="Wyslij formularz"/><input type="reset" value="Wyczysc"/></td></tr>
    </table>
    
</form>
<?php
/*sprawdzenie wypelnienia wszystkich pól*/
}elseif(!empty($_POST['nazwa']) && !empty($_POST['email']) && !empty($_POST['trescwiadomosci']) && !empty($_POST['tel'])){

/*Sprawdzanie poprawnosci numeru telefonu - niedziala
if ($tel == "" || !preg_match("/^[0-9]{9,11}$/i", $tel)) {
$error .= "<span style=\"color: #FF0000; text-align: center;\">Nieprawidlowy numer telefonu</span><br>";
}
*/

/* Funkcja sprawdzajaca poprawnosc E-Maila */
function SprawdzEmail($email) {
if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$" , $email)){return false;}
return true;
}
if(SprawdzEmail($_POST['email'])){

/* Tworzymy szkielet wysylanej wiadomosci */

$plik_nazwa_tmp = $_FILES["plik1"]["tmp_name"];
  $plik_nazwa_oryginalna = $_FILES["plik1"]["name"];
  $plik_wielkosc = $_FILES["plik1"]["size"];

if (is_uploaded_file($plik_nazwa_tmp))
  {
    $tresc .="--___$znacznik==\n";
    $tresc .="Content-Type: image/gif\n";
    $tresc .="Content-Disposition: attachment;\n";
    $tresc .=" filename=\"$plik_nazwa_oryginalna\"\n";
    $tresc .="Content-Transfer-Encoding: base64\n\n";
    $f = fopen($plik_nazwa_tmp,"rb");
    $dane = fread($f,filesize($plik_nazwa_tmp));
    fclose($f);
    $tresc .= chunk_split(base64_encode($dane));
    $tresc .="--___$znacznik==--\n";
  }

$adresemail=$_POST['odbiorca'];

$ip=$_SERVER['REMOTE_ADDR'];

/* Wybierz kodowanie znaków usuwajac */

$charset = 'iso-8859-2';
//$charset = 'utf-8';
$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);
$wiadomosc="Od: $_POST[nazwa] ($_POST[email]), tel: $_POST[tel]\nIP: $ip, HOST: $host\n\n$_POST[trescwiadomosci]";
$nadawca="From: $_POST[email]";
@mail($adresemail, "Formularz z www", "$wiadomosc", "$nadawca");


  
echo "<span style=\"color: #00D800; font-weight: bold; \">Dziekujemy, formularz zostal wyslany.</span>";
}else{ echo "<span style=\"color: #FF0000; text-align: center; font-weight: bold;\">Wprowadzony adres E-Mail jest niepoprawny!!!</span>"; }
}else{ echo "<span style=\"color: #FF0000; text-align: center; font-weight: bold;\">Cofnij i wypelnij wszystkie pola formularza!!!</span>"; }
?>


wrzuciłem testowo tu http://www.firma-krzak.pl/zalacznik.php


darko
http://www.google.pl/search?aq=0&oq=fo...ipart+form-data

Zamień kontakt.html na kontakt.php, to będzie krok w dobrą stronę. Akcję formularza zamień na http://www.firma-krzak.pl/kontakt.php Jeśli dalej utkniesz na czymś, to pomożemy.

ps.
Domena + branża biggrin.gif:D Hahaha
Miecho77
Na tym etapie jeszcze mi wszystko działało prawidłowo, oprócz tego ze komunikat o błędnie wypełnionych polach pojawia się zamiast formularza, a wolał bym żeby był np pod przyciskiem "Wyślij".
Niestety nie wpadłem jeszcze na ciąg przyczynowo-skutkowy odpowiadający temu działaniu.

Kod
<?php
if(empty($_POST['submit'])){
?>
<form action="http://www.firma-krzak.pl/kontakt-nowy.php" method="post"> <!--nazwa strony na której znajduje sie formularz-->
    <table>
        <tr><td class="prawy">Imie i Nazwisko
                               <br>lub nazwa firmy:</td>
            <td><input type="text" name="nazwa" style="width:300px;"/></td></tr>
        <tr><td class="prawy">Adres e-mail:</td>
            <td><input type="text" name="email" style="width:300px;"/></td></tr>
        <tr><td class="prawy">Telefon:</td>
            <td><input type="text" name="tel" style="width:300px;"/></td></tr>
        <tr><td class="prawy">Tresc wiadomosci:</td>
            <td><textarea name="trescwiadomosci" cols="30" rows="6" style="width:300px;"></textarea></td></tr>
        <tr><td class="prawy">Wybierz adresata:</td>
            <td><select name="odbiorca" style="width:300px;">
                    <option>biuro@firma-krzak.pl</option>
                    <option>projektowanie@firma-krzak.pl</option>
                    <option>nawadnianie@firma-krzak.pl</option>
                </select></td></tr>
        <tr><td class="srodek"></td> 
            <td class="srodek"><input type="submit" name="submit" value="Wyslij formularz"/><input type="reset" value="Wyczysc"/></td></tr>
    </table>
</form>
<?php
/*sprawdzenie wypelnienia wszystkich pól*/
}elseif(!empty($_POST['nazwa']) && !empty($_POST['email']) && !empty($_POST['trescwiadomosci']) && !empty($_POST['tel'])){
/* Funkcja sprawdzajaca poprawnosc E-Maila */
function SprawdzEmail($email) {
if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,4}$" , $email)){
  return false;
}
return true;
}
if(SprawdzEmail($_POST['email'])){
/* Tworzymy szkielet wysylanej wiadomosci */
$adresemail=$_POST['odbiorca'];
$ip=$_SERVER['REMOTE_ADDR'];
/* Wybierz kodowanie znaków usuwajac // */
$charset = 'iso-8859-2';
//$charset = 'utf-8';
$host=gethostbyaddr($_SERVER['REMOTE_ADDR']);
$wiadomosc="Od: $_POST[nazwa] ($_POST[email]), tel: $_POST[tel]\nIP: $ip, HOST: $host\n\n$_POST[trescwiadomosci]";
$nadawca="From: $_POST[email]";
@mail($adresemail, "Formularz kontaktowy z www", "$wiadomosc", "$nadawca");
echo "<span style=\"color: #00D800; font-weight: bold; \">Dziekujemy, formularz zostal wyslany.</span>";
}else{ echo "<span style=\"color: #FF0000; text-align: center; font-weight: bold;\">Wprowadzony adres E-Mail jest niepoprawny!!!</span>"; }
}else{ echo "<span style=\"color: #FF0000; text-align: center; font-weight: bold;\">Cofnij i wypelnij wszystkie pola formularza!!!</span>"; }
?>


strona z formularzem http://www.firma-krzak.pl/kontakt.php

Podobnie ze sprawdzaniem poprawności telefonu, obecnie jest w komentarzu
Ma pozwalać tylko na cyfr 0-9, chciałem jeszcze dać format wpisu ale jest tyle wariantów....

Kod
/*Sprawdzanie poprawnosci numeru telefonu - niedziala
if ($tel == "" || !preg_match("/^[0-9]{9,11}$/i", $tel)) {
$error .= "<span style=\"color: #FF0000; text-align: center;\">Nieprawidlowy numer telefonu</span><br>";
}
*/


czy jest poprawny i czy powinien się mieścić nad sprawdzaniem poprawności e-mail.

pianta_d
Witam


Poczytaj o walidacji, pierwszy z góry wynik wujka googla klik, drugi klik


Pozdrawiam


EDIT

  1. /*Sprawdzanie poprawności numeru telefonu - dziala*/
  2. if (preg_match("/^[0-9]{9,11}$/i", $tel)) {
  3. echo "Prawidłowy numer telefonu";}
  4. else
  5. {echo 'Numer nieprawidłowy!';}


Pozdrawiam
Miecho77
Cytat(pianta_d @ 11.01.2012, 23:48:26 ) *
Witam


Poczytaj o walidacji, pierwszy z góry wynik wujka googla klik, drugi klik


Pozdrawiam


EDIT

  1. /*Sprawdzanie poprawności numeru telefonu - dziala*/
  2. if (preg_match("/^[0-9]{9,11}$/i", $tel)) {
  3. echo "Prawidłowy numer telefonu";}
  4. else
  5. {echo 'Numer nieprawidłowy!';}


Pozdrawiam


Dzięki ten kod sprawdza tel.

Ale poprzedniego nie pisałem sam w całości i nie potrafię go prawidłowo zmodyfikować - ponad moje siły (ginę gdzieś na poziomie otwierania i zamykania {} funkcji)

Mam obecnie tak, że przechodzi do nowej strony z komunikatem "nieprawidłowy numer" Dziękujemy email został wysłany" (jeżeli reszta pól była wpisana poprawnie).

Chciałem skorzystać z innego kodu

Kod
function sprawdztel($tel){ $tel = preg_replace("/[^0-9\(\)]/","",$tel);
        if(!preg_match("/[0-9]{3}/",$tel) &&
            !preg_match("/\([0-9]{2}\)[0-9]{7}/",$tel) &&
            !preg_match("/\([0-9]{2}\)[0-9]{9}/",$tel))
        { return true;
        } else {
                echo "<span style=\"color: #FF0000; text-align: center; font-weight: bold;\">Wprowadzony numer telefonu jest niepoprawny!!!</span>";
        }

po wyświetleniu strony mam:
Parse error: syntax error, unexpected T_ELSE in /srv/home/q05121fb/public_html/zal.php on line 150 - jeżeli dobrze rozumie brak reakcji dla warunku "return true" questionmark.gif

Szkoda mojego czasu, za mało teorii.

Jednak sie okazuje ze dodanie załacznika jest niezbędne
równiez weryfikacja talafonu chociazby na poziomie czy to jest 9 cyfr

Moze mi ktos z tym pomóc?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.