Autor Zpráva
Peter2
Profil *
Zdravim, tak sa snazim prist na to ako odoslat data s pridanych poli ktore sa pridavaju cez JS.Na webe som nasiel nieco plus som to skombinoval s mojim php.Data sice odosle ale len s prveho riadku a ostatne neviem ci sa odoslu asi skor nie, neviem ako ich mam pridat do riadku 24???
Dakujem za rady.
<?php
$predmet = "=?utf-8?B?".base64_encode("Správa")."?=";
function chyba($chyba) {
echo "<div style=\"color:#6f6b67;\">Chyba!</div>";
echo "<div style=\"color:#6f6b67;\">$chyba</div>";
echo "<hr>";
}
if ($process):
$process=RemoveXSS($process);
$kod=RemoveXSS($kod);
$velikost=RemoveXSS($velikost);
$barva=RemoveXSS($barva);
$mnozstvi=RemoveXSS($mnozstvi);
$cena=RemoveXSS($cena);
if (!$kod) { chyba("Položka Kod musí byť vyplňená."); $process=false; }
endif;
if ($process):
$ip=$REMOTE_ADDR;
$kod=strip_tags($kod);
$velikost=strip_tags($velikost);
$barva=strip_tags($barva);
$mnozstvi=strip_tags($mnozstvi);
$cena=strip_tags($cena);
$text    = "

<b>Kod: </b> $kod<br>
<b>Velikost: </b> $velikost<br>
<b>Barva: </b> $barva<br>
<b>Množství: </b> $mnozstvi<br>
<b>Cena: </b> $cena<br>
";

$mail=mailer ("moj email", $text, "$predmet", "$email");
if (!$mail) echo "<p>Správa nebola odeslaná. </p>";
else echo "<p>Správa odeslaná.</p>";
else:
?>
<script type="text/javascript" src="objednavka.js"></script>
<form action="" method="post" id="objednavkaForm" name="form2">


<table id="polozky" class="nicetable form objform" border="0">
<thead><tr><th>Kod </th><th>Velikost</th><th>Barva</th><th>Množství</th><th>Cena</th><th></th></tr></thead>
<tbody>

<tr id="R1">
<td><input class="inp" type="text" size="10" name="kod" value="<?php echo $kod ?>"> </td>
<td> <input class="inp" type="text" size="5" name="velikost" value="<?php echo $velikost ?>"></td>
<td> <input class="inp" type="text" size="5" name="barva" value="<?php echo $barva ?>"></td>
<td><input class="inp" type="text" size="5" name="mnozstvi" value="<?php echo $mnozstvi ?>"> </td>
<td><input class="inp" type="text" size="10" name="cena" value="<?php echo $cena ?>"> </td>
<td><input class="inp" type="button" id="addRow" value="Přidat položku" class="input_text">
</td>
</tr>

</tbody>
</table>



<input class="inp" type="submit" value="Odeslat správu" id="objednavkaSubmit" name="objSubmit">
          <input class="inp" value="Zmazať" id="del" type="reset" class="button">
          <input name="process" type="hidden" id="process" value="1">
</form>
 $(document).ready(function(){
    
        $('#objednavkaForm').submit(function(){
            return confirm('Chcete pokračovať v odesláni?');
        });
    
      var i=2;
      
      $('#addRow').click(function(){
        
        var line = '<tr id="R'+i+'"><td><input class="inp" type="text" size="10" name="kod['+i+']"> </td><td> <input class="inp" type="text" size="5" name="velikost['+i+']"></td><td> <input class="inp" type="text" size="5" name="barva['+i+']"  id="barva[1]"></td><td><input class="inp" type="text" name="mnozstvi['+i+']" size="5"> </td><td><input class="inp" type="text" name="cena['+i+']" size="10"> </td><td class="objDelCell"></td></tr>';
        var a = i - 1;
        
        $('#polozky > tbody').append(line);
        var line = $('#R'+i);
        
        var delcell = $($(line).find('.objDelCell').get(0));
        delcell.html('<a href="#">zrušiť</a>');
        $(delcell.find('a')).click((function(line){
            return function(){
                line.remove();
                return false;
            };
        })(line));
        
        ++i;
        
      });
      
      $('#polozky td.objDelCellRestored').each(function(){
        var link = $(this).children('a').get(0);
        $(link).click(function(){
            console.log(link.rel);
            $('#polozky tr#'+link.rel).remove();
            return false;
        });
      });
      
                       
    
    
});
rovi
Profil
Kde máš obsluhu $_POST requestů?
Formulář odesílá data na self. A ve výpisu kódů zde není vidět jejich obsluha. Přidej
<?php
if(isset($_POST)){
print_r($_POST);
}
Peter2
Profil *
Niesom si isty aku obsluhu? Je tam este funkcia mailer samostatny subor.php ale ten stym nebude mat nic spolocne...V podstate formular data odosiela jak ma ale nie s tych pridanych poli...
rafej
Profil
V prvním souboru - od řádku 9 se ošetřují hodnoty, které ti odesílá formulář. Ale máš to napsané pro jednu hodnotu. Pokud ti javascript přidá další sadu políček, tak se k těm hodnotám musí přistupovat jako k poli hodnot. Musíš si to upravit v tom javascriptu a taky v původním formuláři, kde by názvy měly být např. v této podobě:
name="vyrobky[kod][]" 
Je nutné přepsat všechna pole.

a v php skriptu potom načítat takto:

if ($process){
  $n = count($_POST['vyrobky']);
  $text = "";
  for ($i=0;$i<$n;$i++){
    if (empty($_POST['vyrobky']['kod'][$i])){
      chyba("Položka Kod musí byť vyplňená.");
      $process=false;
      break;
    }else{    
      $kod = strip_tags(RemoveXSS($_POST['vyrobky']['kod'][$i]));
      $velikost =strip_tags(RemoveXSS($_POST['vyrobky']['velikost'][$i]));
      $barva =strip_tags(RemoveXSS($_POST['vyrobky']['barva'][$i]));
      $mnozstvi=strip_tags(RemoveXSS($_POST['vyrobky']['mnozstvi'][$i]));
      $cena=strip_tags(RemoveXSS($_POST['vyrobky']['cena'][$i]));

      $text   .= "<b>Kod: </b> {$kod}<br>
                       <b>Velikost: </b> {$velikost}<br>
                       <b>Barva: </b> {$barva}<br>
                       <b>Množství: </b> {$mnozstvi}<br>
                       <b>Cena: </b> {$cena}<br>
      ";
      if (!empty($text)) {
        $text .= "<hr />";
      }
   }
 }

$ip=$REMOTE_ADDR;
}
Peter2
Profil *
Tak sa to pokusam dat do prevadzky ale hadze mi to chybu.Kod mam takto:

<?php  
$predmet = "=?utf-8?B?".base64_encode("Správa")."?=";
function chyba($chyba) {
echo "<div style=\"color:#6f6b67;\">Chyba!</div>";
echo "<div style=\"color:#6f6b67;\">$chyba</div>";
echo "<hr>";
}
if ($process){
  $n = count($_POST['vyrobky']);
  $text = "";
  for ($i=0;$i<$n;$i++){
    if (empty($_POST['vyrobky']['kod'][$i])){
      chyba("Položka Kod musí byť vyplňená.");
      $process=false;
      break;
    }else{    
      $kod = strip_tags(RemoveXSS($_POST['vyrobky']['kod'][$i]));
      $velikost =strip_tags(RemoveXSS($_POST['vyrobky']['velikost'][$i]));
      $barva =strip_tags(RemoveXSS($_POST['vyrobky']['barva'][$i]));
      $mnozstvi=strip_tags(RemoveXSS($_POST['vyrobky']['mnozstvi'][$i]));
      $cena=strip_tags(RemoveXSS($_POST['vyrobky']['cena'][$i]));
 
      $text   .= "<b>Kod: </b> {$kod}<br>
                       <b>Velikost: </b> {$velikost}<br>
                       <b>Barva: </b> {$barva}<br>
                       <b>Množství: </b> {$mnozstvi}<br>
                       <b>Cena: </b> {$cena}<br>
      ";
      if (!empty($text)) {
        $text .= "<hr />";  
      }
   }
 }
 
$ip=$REMOTE_ADDR;
}

$mail=mailer ("moj email", $text, "$predmet", "$email");
if (!$mail) echo "<p>Správa nebola odoslaná. </p>";
else echo "Správa odeslaná.";
else:    
?>
<script type="text/javascript" src="objednavka.js"></script>
tu je HTML formular

<?php endif; ?> 

Stale ma to odvolava na riadok s ELSE: na konci php
rafej
Profil
Pokud je to celý kód souboru, tak

a) smaž závorku z řádku 36,
b) na řádek 41 napiš }else{
c) a na řádku 46 místo endif; napiš }

Zbylo to tam z přepisu podmínek. Myslela jsem, že upravit případné závorky už zvládneš sám.
Peter2
Profil *
No ja mal na riadku 41 len else{ tam bola chyba hm...tak idem skusat dalej...este nejaky naznak jak upravim ten JS?


Tak som to nejako upravil zda sa ze to funguje este to riadne preverim a otestujem...


No mam tam este jeden problem, aj ked vyplnim pole a formular odoslem tak mi vypise: chyba! Položka Kod musí byť vyplňená.
Peter2
Profil *
Skusil som ten php mierne upravit snad to nieje zle riesenie
<?php  
$predmet = "=?utf-8?B?".base64_encode("Správa")."?=";
function chyba($chyba) {
echo "<div style=\"color:#6f6b67;\">Chyba!</div>";
echo "<div style=\"color:#6f6b67;\">$chyba</div>";
echo "<hr>";
}

if ($process):


if (!$meno) { chyba("Položka Jméno musí byť vyplňená."); $process=false; }
if (!$priezvisko) { chyba("Položka Příjmení musí byť vyplňená."); $process=false; }
if (!$ulica) { chyba("Položka Ulice musí byť vyplňená."); $process=false; }
if (!$mesto) { chyba("Položka Město a PSČ musí byť vyplňená."); $process=false; }
if (!$telefon) { chyba("Položka telefon musí byť vyplňená."); $process=false; }
if (!$email) { chyba("Položka e-mail musí byť vyplňená."); $process=false; }
if (!$web) { chyba("Položka Stránky musí byť vyplňená."); $process=false; }
endif;

if ($process){
  $n = count($_POST['vyrobky']);
  $text = "
<b>Jméno: </b> $meno<br>
<b>Příjmení: </b> $priezvisko<br>
<b>Ulice: </b> $ulica<br>
<b>Město a PSČ: </b> $mesto<br>
<b>Telefon: </b> $telefon<br>
<b>E-mail: </b> $email<br>
<br />
<b>Zpráva: </b> $poznamka
<br><br>
<b>Stránky:</b> $web<br>
  ";
  for ($i=0;$i<$n;$i++){
    if (empty($_POST['vyrobky']['kod'][$i])){
      //chyba("Položka Kod musí byť vyplňená.");
      $process=false;
      break;
    }else{    
      $kod = strip_tags(RemoveXSS($_POST['vyrobky']['kod'][$i]));
      $velikost =strip_tags(RemoveXSS($_POST['vyrobky']['velikost'][$i]));
      $barva =strip_tags(RemoveXSS($_POST['vyrobky']['barva'][$i]));
      $mnozstvi=strip_tags(RemoveXSS($_POST['vyrobky']['mnozstvi'][$i]));
      $cena=strip_tags(RemoveXSS($_POST['vyrobky']['cena'][$i]));
 
      $text   .= "
    
      <b>Kod: </b> {$kod}<br>
                       <b>Velikost: </b> {$velikost}<br>
                       <b>Barva: </b> {$barva}<br>
                       <b>Množství: </b> {$mnozstvi}<br>
                       <b>Cena: </b> {$cena}<br>
      ";
      if (!empty($text)) {
        $text .= "<hr />";  
      }
   }
 }
 
$ip=$REMOTE_ADDR;



$mail=mailer ("moj email", $text, "$predmet", "$email");
if (!$mail) echo "<p>Správa nebyla odeslaná. </p>";
else echo "Správa odeslaná.";
}else{

?>

Pridal som par poli no a teras ked vyhodi chyby Položka musí byť vyplňená tak mi v inpute
<input class="inp" type="text" size="10" name="vyrobky[kod][]" value="<?php echo $kod?>">
zmaze vyplnene policko cize ho musim zakazdym vyplnat znova...

Pri tych poliach ako meno to mam takto
<input type="text" name="meno" value="<?php echo $meno ?>" size="24"> a tu mi zapisanu hodnotu nezmaze.
rafej
Profil
Máš tam zbytečně dvakrát podmínku: if ($proces) - řádek 9 a 21.
Stačí vložit kód na řádku 12 až 18 za řádek 21 a ten zbytek smazat.

Aby ti formulář při opravě chyby zachoval vyplněné hodnoty, musí se ty políčka, které máš ve formuláři vícekrát vypisovat jako pole, ty tam máš proměnnou - tj. jeden údaj.
Samozřejmě u jména ti to fungovat bude, protože to je tam jen jednou. Navíc díky tomu, že další řádky formuláře přidáváš javascriptem se musí vypsat jiný formulář při prvním vypsání a při opravě chyby.

Ty úpravy nejsou zas tak složité, ve zkratce jsem to již naznačila, ale zdá se mi, že se v tom tak trochu topíš.
Pokud to potřebuješ jen dát dohromady, napiš mi na e-mail, co to má přesně dělat a kontrolovat a můžeme se domluvit, že ti to za nějakou menší částku přepíšu.
Pokud se chceš učit, budeš si toho muset ještě dost nastudovat, protože ti chybí základní znalosti. Nastuduj si v PHP minimálně podmínky, jak se zachází s poli a multidimenzionálními poli, načítání a ošetřování proměnných odeslaných formulářem, bezpečný výpis proměnných do HTML kódu atd.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: