Witam forumowiczów!
Jako że to mój pierwszy temat (i post za razem) z tego miejsca pragnę powitać wszystkich użytkowników forum.
Przechodząc do meritum problemu. Napisałem skrypt formularza zamówienia obuwia (częściowo sam częściowo przerabiając gotowe skrypty i łącząc je w jeden), w którym kolejne linijki do zamówienia par generowane są dynamicznie za pomocą przycisku "+" i w razie potrzeby usuwane (przyciskiem "-"). Utknąłem jednak przy pisaniu systemu wysyłającego całość na maila.
Opis ProblemuWszystko działa nieźle z tym że jeśli użytkownik zacznie wypełniać formularz doda przykładowo 6 wierszy dla 6 różnych modeli obuwia po czym stwierdzi że rezygnuje z pozycji 3 i 4 to:
Po pierwsze - numeracja porządkowa linijek psuje się i wygląda tak 1 2 5 6 ( z tym akurat mogę żyć
Po drugie - na maila przychodzi mi cos takiego:
1 Nr katalogowy 123 35par
2 Nr katalogowy 1453 35par
3 (Pusty wiersz)
4 (pusty wiersz)
5 Nr katalogowy 123 35par
6 Nr katalogowy 123 35par
Co w przypadku 50 dodanych pozycji może być uciążliwe w odbiorze.
Moje przypuszczeniaWydaje mi się że problem leży po stronie skryptu php i pętli for która nie pomija pustych rekordów wysłanych za pomocą $_POST lub też numeracji formularza w jquery (numeracja nie zmienia sie wiec pozostaja puste ID które skrypt php próbuje wyciągnąć z tablicy
czego próbowałem1. Poprawa numeracji pól - fiasco dopisałem do jquery w miejscu :
$("#usunOsobe_" + ii).click(function(){
$("#wiersz_" + ii).remove();
});
linijke i--; i niby jest ok jezeli ktos usuwa tylko ostatni wiersz a nie któryś ze środka
2. Zapętlenie pętli for pętlą foreach - tutaj zatrzymały mnie umiejętności php :/ po prostu nie umiem tego napisać
3. przerobienie jquery tak żeby minus usuwał tylko ostatnią linijke kodu (patrz ad1) tutaj poległem na funkcji
$('#form tbody tr:last').remove();
u mnie po prostu usuwa wszystkie wiersze tabeli z dynamicznym formularzem zamiast ostatniego
Tytułem zakończeniaWszystkie proponowane przezemnie rozwiazania doprowadzone do wersji działającej oraz rozwiązania zupełnie inne są jak najbardziej akceptowane i rozumiane przeze mnie jako pomoc za którą szumnie dziękować będę (IMG:
style_emoticons/default/smile.gif)
Kod formularza:
<script type="text/javascript">
$(document).ready(function(){
$(".field").change(function(){
$(this).css("background-color","#fbffa0");
});
var i = 2;
var szablonWiersza = jQuery.format($("#szablon").val());
function dodajWiersz() {
var ii = i++;
$(szablonWiersza(ii)).appendTo("#form tbody");
$(".field").change(function(){
$(this).css("background-color","#fbffa0");});
$("#usunOsobe_" + ii).click(function(){
$("#wiersz_" + ii).remove();
});
}
$("#dodajOsobe").click(dodajWiersz);
});
<!-- Szablon wiersza w tabeli -->
<textarea id="szablon" style="display:none;" cols="1" rows="1">
<input type="text" name="id[]" value="{0}" style="display:none;">
<input id="katalogowy" class="field" type="text" name="katalogowy[{0}]"></td>
<input class="field" size ="3" type="text" name="35[{0}]"></td>
<input class="field" size ="3" type="text" name="36[{0}]"></td>
<input class="field" size ="3" type="text" name="37[{0}]"></td>
<input class="field" size ="3" type="text" name="38[{0}]"></td>
<input class="field" size ="3" type="text" name="39[{0}]"></td>
<input class="field" size ="3" type="text" name="40[{0}]"></td>
<input class="field" size ="3" type="text" name="41[{0}]"></td>
<input class="field" size ="3" type="text" name="42[{0}]"></td>
<input class="field" size ="3" type="text" name="43[{0}]"></td>
<input class="field" size ="3" type="text" name="44[{0}]"></td>
<input class="field" size ="3" type="text" name="45[{0}]"></td>
<input class="field" size ="3" type="text" name="46[{0}]"></td>
<td width="18"><a href="#" id="usunOsobe_{0}" alt="usun">-
</a></td>
<div id="form_container">
<!-- Właciwa tabela -->
<table id="header" border="0" width="800px" cellspacing="0" cellpadding="0">
FORMULARZ ZAMÓWIENIA
</td>
Proszę wpisać numer katalogowy oraz liczbę zamawianych par
</td>
<form action="parser.php" method="post" id="order_form">
<table id="form" border="0" width="800px">
<th width="108">Nr Katalogowy
</th>
<input type="text" name="id[]" value="1" style="display:none;">
<input "katalogowy" class="field" type="text" name="katalogowy[1]"></td>
<input class="field" size ="3" type="text" name="35[1]"></td>
<input class="field" size ="3" type="text" name="36[1]"></td>
<input class="field" size ="3" type="text" name="37[1]"></td>
<input class="field" size ="3" type="text" name="38[1]"></td>
<input class="field" size ="3" type="text" name="39[1]"></td>
<input class="field" size ="3" type="text" name="40[1]"></td>
<input class="field" size ="3" type="text" name="41[1]"></td>
<input class="field" size ="3" type="text" name="42[1]"></td>
<input class="field" size ="3" type="text" name="43[1]"></td>
<input class="field" size ="3" type="text" name="44[1]"></td>
<input class="field" size ="3" type="text" name="45[1]"></td>
<input class="field" size ="3" type="text" name="46[1]"></td>
<td width="18"><a href="#" id="dodajOsobe" alt="dodaj">+
</a></td>
kod pliku parser.php (wysylka na maila)
<?php
$zamowienie['katalogowe'] = $_POST['katalogowy'];
$zamowienie['35'] = $_POST['35'];
$zamowienie['36'] = $_POST['36'];
$zamowienie['37'] = $_POST['37'];
$zamowienie['38'] = $_POST['38'];
$zamowienie['39'] = $_POST['39'];
$zamowienie['40'] = $_POST['40'];
$zamowienie['41'] = $_POST['41'];
$zamowienie['42'] = $_POST['42'];
$zamowienie['43'] = $_POST['43'];
$zamowienie['44'] = $_POST['44'];
$zamowienie['45'] = $_POST['45'];
$zamowienie['46'] = $_POST['46'];
$zamowienie['id'] = $_POST['id'];
$id = max($zamowienie['id']);
$do = "mojmail@gmail.com";
$email = "mojmail@gmail.com";
$y ="";
for( $x = 1; $x <= $id; $x++ ) { $txt .= $y . '<tr><td>' . $x . '</td><td>' . $zamowienie['katalogowe'][$x] . '</td><td>' . $zamowienie['35'][$x] . '</td><td>' . $zamowienie['36'][$x] . '</td><td>' . $zamowienie['37'][$x] . '</td><td>' . $zamowienie['38'][$x] . '</td><td>' . $zamowienie['39'][$x] . '</td><td>' . $zamowienie['40'][$x] . '</td><td>' . $zamowienie['41'][$x] . '</td><td>' . $zamowienie['42'][$x] . '</td><td>' . $zamowienie['43'][$x] . '</td><td>' . $zamowienie['44'][$x] . '</td><td>' . $zamowienie['45'][$x] . '</td><td>' . $zamowienie['46'][$x] . '</td></tr>'; }
$temat="Nowe zamowienie Pioko.pl";
$header = "MIME-Versio: 1.0r\n"."Content-type: text/html; charset=UTF-8r\n";
$header .= "From: noreply@asd.pl\n";
$header .= "Cc: $emailr\n";
$header .= "Bcc: $emailr\n";
$body = '<html>
<body>
<table border="1" width="500">
<tr>
<td width="18">LP</td>
<td width="95">Nr Katalogowy</td>
<td>35</td>
<td>36</td>
<td>37</td>
<td>38</td>
<td>39</td>
<td>40</td>
<td>41</td>
<td>42</td>
<td>43</td>
<td>44</td>
<td>45</td>
<td>46</td>
</tr>
' . $txt . '
</table>
</body>
</html>';
mail($do, $temat, $body, $header); ?>
Calosc mozna zobaczyc pod adresem
http://scyller9.webd.pl/pantofle/form.html jesli ktos nie boi sie paskudnego cssa (IMG:
style_emoticons/default/smile.gif)