Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Obsługa formularza i zapisanie go do CSV. Co robię żle ?
Forum PHP.pl > Forum > Przedszkole
Grisza
Słuchajcie chciałem obsłużyć zwykły formularz. I zapisać jego dane.
Co robię żle ?
Wywala mi błędy:

  1. <?php
  2. if($_POST['submit']){
  3. $list ="$_POST['imie'].", ".$_POST['nazwisko]'.", ".$_POST['instytucja']";
  4. else
  5. echo "Błąd z przesłaniem danych";
  6.  
  7. $fp = fopen('file.csv', 'a');
  8.  
  9. foreach ($list as $line) {
  10. fputcsv($fp, split(',', $line), ',', '&quot;');
  11. }
  12.  
  13. fwrite($fp, "\r\n");
  14.  
  15. fclose($fp);
  16. echo "Dziękujemy za wypełnienie zgłoszenia";
  17. ?>
Przy czym ze zwykłą ArayListą wszystko działało poprawnie
  1. <?php
  2. $list = array (
  3. 'aaa,bbb,ccc,dddd',
  4. '123,456,789',
  5. '"aaa","bbb"'
  6. );
  7.  
  8. $fp = fopen('file2.csv', 'a');
  9.  
  10. foreach ($list as $line) {
  11. fputcsv($fp, split(',', $line), ',', '&quot;');
  12. }
  13.  
  14. fwrite($fp, "\r\n");
  15.  
  16. fclose($fp);
  17. ?>
lobopol
Pierwsza rzecz jaka rzuca się w oczy to nie zamknięty if, po drugie nawet jak go zamkniesz to
  1. $fp = fopen('file.csv', 'a');
  2.  
  3. foreach ($list as $line) {
  4. fputcsv($fp, split(',', $line), ',', '"');
  5. }
  6.  
  7. fwrite($fp, "\r\n");
  8.  
  9. fclose($fp);
  10. echo "Dziękujemy za wypełnienie zgłoszenia";
  11. ?>

ten fragment i tak się będzie chciał wykonać.

i czy w formularzu masz któreś pole z wartością name="submit"? jeżeli nie masz to bez niego też ci będzie wywalało błąd.
Blackhole
Czemu nie wstawiłeś tu tych błędów?questionmark.gif
Grisza
Tak ale jeśli to jest jedna linijka kodu, to nie trzeba go chyba zamykać ?
Bardzo proszę o pomoc.
Blackhole
Jak otworzyłeś klamrę, to musisz ją zamknąć.
Grisza
W stanie takim jaki jest teraz wywala mi taki błąd:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Program Files\VertrigoServ\www\Ankieta\zapis.php on line 3

Dodam, że kod formularza wygląda tak:
  1.  
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  3. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  4. <meta name="Description" content="Ankieta, mająca na celu zarejestrować zgłoszenie uczestników na warsztaty">
  5. <meta name="Keywords" content=" konferencja, warsztaty, webuzzz">
  6. <title>Ankieta przedkonferencyjna</title>
  7.  
  8. <link rel="stylesheet" href=" style.css" type="text/css">
  9. </head>
  10. <body style="background-color: #C5DDC9">
  11. <div class="content">
  12. <form enctype="text/plain" action="zapis.php" method="post">
  13. <div class="ankieta">
  14. <legend>Formularz zgłoszeniowy na warsztaty z webuzzza</legend>
  15. <p style="font-size:13px; font-style:italic; margin:13px;">Formularz zgłoszeniowy na warsztaty z tworzenia własnnej strony internetowej dla prowadzonego przez Państwa e-Centrum</p>
  16. <p>Podaj swoje imię: <input type="text" name="imie" value="tu wpisz swoje imię" size="30" maxlength="40" style="position: relative; left:68px; background-color: cornsilk;"></p>
  17. <p>Podaj swoje nazwisko: <input type="text" name="nazwisko" value="tu wpisz swoje nazwisko" size="30" maxlength="40" style="position: relative; left:40px; background-color: cornsilk;"></p>
  18. <p>Podaj swoją instytucję: <input type="text" name="instytucja" value="tu wpisz swoją instytucję" size="30" maxlength="40" style="position: relative; left:37px; background-color: cornsilk;"></p>
  19. <p>Podaj swoj mail kontaktowy: <input type="text" name="mail" value="tu wpisz swoj e-mail" size="30" maxlength="40" style="position: relative; left:5px; background-color: cornsilk;"></p>
  20. <p>Podaj swoj telefon: <input type="text" name="telefon" value="tu wpisz swoj telefon" size="30" maxlength="40" style="position: relative; left:60px; background-color: cornsilk;"></p>
  21. <legend><span style="color:green;">Wybierz warsztat w którym będziesz uczestniczyć </span><span style="color:red; font-weight: bold;">(jeden termin)</span></legend>
  22. <div style="background-color:cornsilk; margin:4px; padding:6px;">
  23. <input type="radio" name="warsztat" value="1" checked style="background-color:cornsilk;">warsztat 22.04 godz. 16-19 <span style="color:blue;">(grupa I)</span>
  24. <hr>
  25. <input type="radio" name="warsztat" value="2">warsztat 23.04 godz. 9-12 <span style="color:blue;">(grupa II)</span>
  26. <hr>
  27. <input type="radio" name="warsztat" value="3">warsztat 23.04 godz. 10-13 <span style="color:blue;">(grupa III)</span>
  28. </div>
  29. <br />
  30. <legend><span style="color:green;">Wybierz czy i w ilu noclegach będziesz uczestniczyć </span><span style="color:red; font-weight: bold;">(od jeden do wiele)</span></legend>
  31. <div style="background-color:cornsilk; margin:4px; padding:6px;">
  32. <input type="checkbox" name="nocleg" value="0">bez noclegu
  33. <hr>
  34. <input type="checkbox" name="nocleg" value="nocleg 21 kwietnia">nocleg 21 kwietnia
  35. <hr>
  36. <input type="checkbox" name="nocleg" value="nocleg 22 kwietnia">nocleg 22 kwietnia
  37. </div>
  38. <br />
  39. <center><input type="submit" value="Wyślij formularz zgłoszeniowy"> <input type="reset" value="Wyzerowanie formularza"></center>
  40. </div>
  41. </form>
  42. </div>
  43. </body>
  44. </html>
  45.  

Naprawdę się nad nim napracowałem smile.gif

Jak usunąłem tą klamrę dalej mi wywala błąd:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Program Files\VertrigoServ\www\Ankieta\zapis.php on line 3

Pomimo usunięcia klamry dalej wyskakuje błąd:


Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\Program Files\VertrigoServ\www\Ankieta\zapis.php on line 3
lobopol
zamknij tego ifa to raz, a dwa <input type="submit" name ="submit" value="Wyślij formularz zgłoszeniowy"> <input type="reset" value="Wyzerowanie formularza">

$list ="$_POST['imie'].", ".$_POST['nazwisko]'.", ".$_POST['instytucja']"; na

$list =$_POST['imie'].", ".$_POST['nazwisko'].", ".$_POST['instytucja'];
Grisza
Dzięki wielkie smile.gif
Teraz mi wyskakuje już taki błąd:

Błąd z przesłaniem danych
Warning: Invalid argument supplied for foreach() in C:\Program Files\VertrigoServ\www\Ankieta\zapis.php on line 10
Dziękujemy za wypełnienie zgłoszenia

Przy takim kodzie pliku zapisz.php:

  1. <?php
  2. if($_POST['submit']){
  3. $list =$_POST['imie'].", ".$_POST['nazwisko'].", ".$_POST['instytucja'];
  4. }
  5. else
  6. echo "Błąd z przesłaniem danych";
  7.  
  8. $fp = fopen('file.csv', 'a');
  9.  
  10. foreach ($list as $line) {
  11. fputcsv($fp, split(',', $line), ',', '&quot;');
  12. }
  13.  
  14. fwrite($fp, "\r\n");
  15.  
  16. fclose($fp);
  17. echo "Dziękujemy za wypełnienie zgłoszenia";
  18. ?>
  19. Bardzo proszę o pomoc. Coś dane są chyba w złym typie.


Plik CSV jest dalej pusty sad.gif

Bardzo proszę, sadzę, że to już mały błąd.
JohnnyB
Cytat(lobopol @ 4.05.2010, 16:06:26 ) *
<input type="submit" name ="submit" value="Wyślij formularz zgłoszeniowy">


dopisz to w końcu w formularzu ... i wyrzuć foreach, zostaw tylko

fputcsv($fp, split(',', $list), ',', '&quot;');




Grisza
W tym właśnie rzecz, że daję submit, nawet specjalnie przekleiłem 2 razy, a dalej mi wyskakuje:


Błąd z przesłaniem danych
Warning: Invalid argument supplied for foreach() in C:\Program Files\VertrigoServ\www\Ankieta\zapis.php on line 10
Dziękujemy za wypełnienie zgłoszenia,

czyli ten if pierwszy wychwytuje jakiś błąd takjakby nie był spełniony

Jak usunąłem foreach() to teraz wyskakuje mi bez Waringa:

Błąd z przesłaniem danych
Dziękujemy za wypełnienie zgłoszenia

Jednakże plik CSV jest dalej pusty, więc nie dochodzą dane z formularza. Niewiem co się dzieje sad.gif
nospor
$list =$_POST['imie'].", ".$_POST['nazwisko'].", ".$_POST['instytucja'];
foreach ($list as $line) {

od kiedy to po stringu mozną foreachem leciec jak po tablicy?
Grisza
Cytat(nospor @ 5.05.2010, 10:04:33 ) *
$list =$_POST['imie'].", ".$_POST['nazwisko'].", ".$_POST['instytucja'];
foreach ($list as $line) {

od kiedy to po stringu mozną foreachem leciec jak po tablicy?

Myślałem, że można smile.gif
Ale tutaj w ogóle nie dochodzą dane z formularza. Może gdzieś w formularzu jest błąd.
Czyli też radzisz usunąć foreach ?

Jeszcze raz wkleję kod źródłowy formularza i kod źródłowy pliku PHP:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  3. <meta name="Description" content="Ankieta, mająca na celu zarejestrować zgłoszenie uczestników na warsztaty">
  4. <meta name="Keywords" content=" konferencja, warsztaty, webuzzz">
  5. <title>Ankieta przedkonferencyjna</title>
  6.  
  7. <link rel="stylesheet" href=" style.css" type="text/css">
  8. </head>
  9. <body style="background-color: #C5DDC9">
  10. <div class="content">
  11. <form enctype="text/plain" action="zapis.php" method="post">
  12. <div class="ankieta">
  13. <legend>Formularz zgłoszeniowy na warsztaty z webuzzza</legend>
  14. <p style="font-size:13px; font-style:italic; margin:13px;">Formularz zgłoszeniowy na warsztaty z tworzenia własnnej strony internetowej dla prowadzonego przez Państwa e-Centrum</p>
  15. <p>Podaj swoje imię: <input type="text" name="imie" value="tu wpisz swoje imię" size="30" maxlength="40" style="position: relative; left:68px; background-color: cornsilk;"></p>
  16. <p>Podaj swoje nazwisko: <input type="text" name="nazwisko" value="tu wpisz swoje nazwisko" size="30" maxlength="40" style="position: relative; left:40px; background-color: cornsilk;"></p>
  17. <p>Podaj swoją instytucję: <input type="text" name="instytucja" value="tu wpisz swoją instytucję" size="30" maxlength="40" style="position: relative; left:37px; background-color: cornsilk;"></p>
  18. <p>Podaj swoj mail kontaktowy: <input type="text" name="mail" value="tu wpisz swoj e-mail" size="30" maxlength="40" style="position: relative; left:5px; background-color: cornsilk;"></p>
  19. <p>Podaj swoj telefon: <input type="text" name="telefon" value="tu wpisz swoj telefon" size="30" maxlength="40" style="position: relative; left:60px; background-color: cornsilk;"></p>
  20. <legend><span style="color:green;">Wybierz warsztat w którym będziesz uczestniczyć </span><span style="color:red; font-weight: bold;">(jeden termin)</span></legend>
  21. <div style="background-color:cornsilk; margin:4px; padding:6px;">
  22. <input type="radio" name="warsztat" value="1" checked style="background-color:cornsilk;">warsztat 22.04 godz. 16-19 <span style="color:blue;">(grupa I)</span>
  23. <hr>
  24. <input type="radio" name="warsztat" value="2">warsztat 23.04 godz. 9-12 <span style="color:blue;">(grupa II)</span>
  25. <hr>
  26. <input type="radio" name="warsztat" value="3">warsztat 23.04 godz. 10-13 <span style="color:blue;">(grupa III)</span>
  27. </div>
  28. <br />
  29. <legend><span style="color:green;">Wybierz czy i w ilu noclegach będziesz uczestniczyć </span><span style="color:red; font-weight: bold;">(od jeden do wiele)</span></legend>
  30. <div style="background-color:cornsilk; margin:4px; padding:6px;">
  31. <input type="checkbox" name="nocleg" value="0">bez noclegu
  32. <hr>
  33. <input type="checkbox" name="nocleg" value="nocleg 21 kwietnia">nocleg 21 kwietnia
  34. <hr>
  35. <input type="checkbox" name="nocleg" value="nocleg 22 kwietnia">nocleg 22 kwietnia
  36. </div>
  37. <br />
  38. <center><input type="submit" name ="submit" value="Wyślij formularz zgłoszeniowy"> <input type="reset" value="Wyzerowanie formularza"></center>
  39. </div>
  40. </form>
  41. </div>
  42. </body>
  43. </html>


  1. <?php
  2. if($_POST['submit']){
  3. $list =$_POST['imie'].", ".$_POST['nazwisko'].", ".$_POST['instytucja'];
  4. }
  5. else
  6. echo "Błąd z przesłaniem danych";
  7.  
  8. $fp = fopen('file.csv', 'a');
  9.  
  10. /*foreach ($list as $line) {
  11.   fputcsv($fp, split(',', $line), ',', '&quot;');
  12. }
  13. */
  14.  
  15. fputcsv($fp, split(',', $list), ',', '&quot;');
  16.  
  17. fwrite($fp, "\r\n");
  18.  
  19. fclose($fp);
  20. echo "Dziękujemy za wypełnienie zgłoszenia";
  21. ?>
nospor
Cytat
Myślałem, że można
I jak sobie to wyobrażales? Ze niby co będzie na wyjsciu tego foreach? Poszczegolne literki czy cos innego?

Cytat
Czyli też radzisz usunąć foreach ?
Nic nie radzę - nie chce mi się analizowac tego tematu. Przypadkiem spojrzalem na Twoj ostatni post i zwróciłem ci uwagę na blad jaki miales.
Grisza
No liczyłem, że każdy string doda do Araylisty. Gorzej że mi nie chce skrypt wysłać na plik php. Niewiem dlaczego.
lobopol
Jakbyś był tak miły to dodaj:
  1. echo "<pre>";
  2. print_r($_POST);
  3. echo "</pre>";

w skrypcie z zapisem i napisz co wyświetliło przy przesłaniu formularza. Ten błąd świadczy o tym, że wartość $_POST['submit'] nie została przesłana
Grisza
Czy może poprostu powinienem zrobić coś takiego ?

  1.  
  2. <?php
  3.  
  4. $list = array (
  5. '$_POST['imie'],$_POST['nazwisko'],$_POST['instytucja'],dddd',
  6. '123,456,789',
  7. '"aaa","bbb"'
  8. );
  9.  
  10. $fp = fopen('file2.csv', 'a');
  11.  
  12. foreach ($list as $line) {
  13. fputcsv($fp, split(',', $line), ',', '&quot;');
  14. }
  15.  
  16. fwrite($fp, "\r\n");
  17.  
  18. fclose($fp);
  19. ?>
  20.  


Cytat(lobopol @ 5.05.2010, 11:05:48 ) *
Jakbyś był tak miły to dodaj:
  1. echo "<pre>";
  2. print_r($_POST);
  3. echo "</pre>";

w skrypcie z zapisem i napisz co wyświetliło przy przesłaniu formularza. Ten błąd świadczy o tym, że wartość $_POST['submit'] nie została przesłana

Dobry pomysł smile.gif
Ale rzeczywiście nic nie przesyła.
Wyświetlił mi tylko to:
Array
(
)
A potem już standardowo. Czyli błąd leży gdzieś chyba w formularzu.

Błąd z przesłaniem danych
Dziękujemy za wypełnienie zgłoszenia

Cytat(lobopol @ 5.05.2010, 11:05:48 ) *
Jakbyś był tak miły to dodaj:
  1. echo "<pre>";
  2. print_r($_POST);
  3. echo "</pre>";

w skrypcie z zapisem i napisz co wyświetliło przy przesłaniu formularza. Ten błąd świadczy o tym, że wartość $_POST['submit'] nie została przesłana


Może chodzi o to:

enctype="text/plain"
Misiur66
  1. if($_POST['submit']){
  2. $list =$_POST['imie'].", ".$_POST['nazwisko'].", ".$_POST['instytucja'];
  3. }
  4. else


A gdzie są klamry do else?

Enctype wywal, bo tylko jakbyś pliki przesyłał to musisz zmienić. I powiedz co się stanie ;D
lobopol
Powiedz mi czemu się tak z tym foreachem uparłeś? Sformatuj sobie to co chcesz wstawić do pliku w tym ifie, a następnie doklej nową linie do pliku. Błąd jest w formularzu wywal enctype i zobaczymy smile.gif.
Grisza
Cytat(lobopol @ 5.05.2010, 11:33:35 ) *
Powiedz mi czemu się tak z tym foreachem uparłeś? Sformatuj sobie to co chcesz wstawić do pliku w tym ifie, a następnie doklej nową linie do pliku. Błąd jest w formularzu wywal enctype i zobaczymy smile.gif.

Jupii dzięki chłopaki smile.gif
Wywaliłem Enclipe i pomogło teraz się wszystko ładnie wyświetliło cała zawartość ale ciekawe dlaczego te Enclipe rozwalało wysyłanie formularza smile.gif
Uparłem się bo było w manualu putsCSV smile.gif
Misiur66
Cytat
Actually, the POST forms have by default application/x-www-form-urlencoded as the enctype


Dlatego biggrin.gif
Grisza
Cytat(Misiur66 @ 5.05.2010, 11:40:48 ) *
Dlatego biggrin.gif

czyli standardowo sa enclipe smile.gif
A jeszcze dwa pytania mam smile.gif
Teraz mi wypisuje wszystko pięknie ładnie, ale z & przed tekściorem i za tekściorem.
Coś takiego:

&tu wpisz swoje imię& & tu wpisz swoje nazwisko& & tu wpisz swoją instytucję&

&tu wpisz swoje imię& & tu wpisz swoje nazwisko& & tu wpisz swoją instytucję&

&tu wpisz swoje imię& & tu wpisz swoje nazwisko& & tu wpisz swoją instytucję&
Jak tego endziora się pozbyć ?

I druga rzecz. Muszę przy Noclegu obsłużyć wiele pól wyboru:

  1. <legend><span style="color:green;">Wybierz czy i w ilu noclegach będziesz uczestniczyć </span><span style="color:red; font-weight: bold;">(od jeden do wiele)</span></legend>
  2. <div style="background-color:cornsilk; margin:4px; padding:6px;">
  3. <input type="checkbox" name="nocleg" value="0">bez noclegu
  4. <hr>
  5. <input type="checkbox" name="nocleg" value="nocleg 21 kwietnia">nocleg 21 kwietnia
  6. <hr>
  7. <input type="checkbox" name="nocleg" value="nocleg 22 kwietnia">nocleg 22 kwietnia
  8. </div>


Jak to obsłużyć, bo gdy wybiorę nocleg 21 i nocleg 22 to mi nadpisuje jedno drugim. I zostaje w końcu 22 Czy powinienem dla checboksa wybrać nazwę nocleg1 nocleg2 nocleg3


Oki mam smile.gif Nie powinno być spacji między poszczególnymi przecinkami smile.gif
$list =$_POST['imie'].",".$_POST['nazwisko'].",".$_POST['instytucja'];
Php jednak fajny jest smile.gif
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.