Autor Zpráva
dejvis
Profil *
Zdravím,

mám kod, kde používám i AJAX. Když chci vložit data do databáze pomocí $_POST, tak mi nefunguje $_POST["model"];

mám dva soubory a to

nabidka.php

<?php
include('func.php');
?>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    $('#wait_1').hide();
    $('#drop_1').change(function(){
      $('#wait_1').show();
      $('#result_1').hide();
      $.get("func.php", {
        func: "drop_1",
        drop_var: $('#drop_1').val()
      }, function(response){
        $('#result_1').fadeOut();
        setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
      });
        return false;
    });
});

function finishAjax(id, response) {
  $('#wait_1').hide();
  $('#'+id).html(unescape(response));
  $('#'+id).fadeIn();
}
</script>
<?php
....
...
..
$pridat = mysql_query("INSERT INTO nabidka (druh_vozu, vyrobce, model_vozu, doplnujici_nazev, informace_vozu, aktivni) values (
          '".$_POST["druh_vozu"]."',
          '".$_POST["vyrobce"]."',
          '".$_POST["model"]."',
          '".$_POST["doplnujici_nazev"]."',
          '".$_POST["informace_k_vozidlu"]."',
          '".$_POST["aktivni"]."'
        );");

func.php

<?php
//**************************************
//     Page load dropdown results     //
//**************************************
function getTierOne()
{
    $result = mysql_query("SELECT DISTINCT id_vyrobce FROM model_vozu ORDER BY nazev") 
    or die(mysql_error());

      while($tier = mysql_fetch_array( $result )) 
  
        {
        $search_sec = MySQL_Query("SELECT * FROM vyrobce WHERE id = ".$tier['id_vyrobce']."");
  while($row = mysql_fetch_array($search_sec)) 
{
           echo '<option value="'.$tier['id_vyrobce'].'">'.$row['nazev'].'</option>';
       }
        }

}

//**************************************
//     First selection results     //
//**************************************
if($_GET['func'] == "drop_1" && isset($_GET['func'])) { 
   drop_1($_GET['drop_var']); 
}

function drop_1($drop_var)
{  
    include_once('../inc/config.php');
    $result = mysql_query("SELECT * FROM model_vozu WHERE id_vyrobce='$drop_var' ORDER BY nazev");
    
    echo 'Model vozu: <select name="model" id="tier_two">
          <option value="" disabled="disabled" selected="selected">Vyberte model vozu</option>';

           while($drop_2 = mysql_fetch_array( $result )) 
            {
              echo '<option value="8">'.$drop_2['nazev'].'</option>';
            }
    
    echo '</select> ';

}
?>


Zkrátka všechno se zobrazuje jak má, ale při uložení se neukládá <select name="model" id="tier_two"> ....

Zajímavý je, že se to děje pouze ve firefoxu a chrome, v IE to funguje bezvadně....

tento problém sem našel i na netu např: www.webdeveloper.com/forum/showthread.php?262618-Help-with-grabbing-value-from-jquery-generated-select-tag
bohužel neporadili mu

Nevíte kde může být zakopán pes?
Budu moc vděčný za každou odpověď.
slovakCZ
Profil
muzes si posilat cely formular (to by mohlo problem vyresit, netestoval jsem to ale), treba takto:
$.get("func.php", {
        func: "drop_1",
        data: $('#tvuj-formular').serialize()
      }, function(response){
        $('#result_1').fadeOut();
        setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
      });
dejvis
Profil *
Děkuji za odpověď, bohužel nevím jak to myslíte....

Popřípadě existuje nějaký snadný řešení, aby mi druhý select reagoval na první ?
Kcko
Profil
dejvis:
Celý ten kód je hodně divný.

Např.

 $.get("func.php", {
        func: "drop_1",
        drop_var: $('#drop_1').val()
      }, function(response){
        $('#result_1').fadeOut();
        setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);
      });
        return false;
    });

Tohle se mi vůbec nepozdává, zkrácený zápis metody ajax, tj.get vypadá i dle dokumentace zcela jinak.

Připravte si někam funkční ukázku.
dejvis
Profil *
Kcko:
Tento kod jsem našel na netu

živá ukázka http://moto-vosy.cz/nabidka_pridat.php
Kcko
Profil
dejte tam pred ten insert var_dump($_POST);
slovakCZ
Profil
Kcko:
zapis .get ma dobre, tam zadna chyba neni..

problem je v tom, ze po vyberu prvniho selectu se provede ajaxove odeslani formulare (pomoci get) na func.php.. tato stranka vrati html kod, ktery se vlozi do stranky jako novy selectbox no a tady je zakopany pes.. kdyz pak uzivatel klikne na odeslat formular, tak se samozrejme formular odesle bez tohoto pridaneho selectu..

hlavne se mi vubec nelibi ta myslenka, ze po vyberu prvniho selectboxu predavas ajaxem cele html.. je to zbytecne, ten selectbox muzes mit u tak jednoducheho formulare v html uz predpripraveny a ajaxem predavat jen jeho obsah (napr jsonem).

pripadne cely formular muzes odesilat ajaxem, pak tenhle problem vyresis relativne jednoduse...
dejvis
Profil *
Kcko:
array(6) { ["druh_vozu"]=> string(2) "10" ["vyrobce"]=> string(1) "2" ["doplnujici_nazev"]=> string(2) "rt" ["informace_k_vozidlu"]=> string(2) "rt" ["aktivni"]=> string(1) "1" ["odeslano"]=> string(1) "1" }

chybí tam jeden string [model_vozu]

slovakCZ:
Rád bych, ale v tomhle jsem začátečník...
Kcko
Profil
slovakCZ:
Pravda pardon, koukal jsem se nějak divně :/

Co se týká připomínky, že když se přidá formulářový prvek ajaxem do formuláře, tak se neprojeví je ale blbost. To normálně funguje.


dejvis:
Jestli chceš, napiš mi na ICQ a dáme to do kupy, mám ted asi hodku čas.
dejvis
Profil *
připomínám, že v IE to funguje jak má..., když zkouknu stránku FIREBUGEM žádný problém nevidím....
Kcko
Profil
setTimeout("finishAjax('result_1', '"+escape(response)+"')", 400);

onoto toto by mělo být v anonymní funkci a escapovat bys měl přes encodeUriComponent a takových věcí je tam víc, je to zralé na přepsání a učesání

Edit taky jsem si ted všiml, že máš nějak prapodivně uzavřený formulář. A je v tabulce, měl by obalovat tabulku když už, a ten ajaxový input by se měl vložit do něj, ted se vkládá mimo, to bude nejspíš ten důvod.
dejvis
Profil *
Tak vyřešeno, děkuji Kcko

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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