Autor Zpráva
luma64
Profil
Zdravím, ako pls získam id, ktoré patrí vybranej položke v autocomplete? Toto je môj príklad:
$stanica=$_POST['stanica'];

$qry_stan="Select id as id_stanica, stanica from stanica where stanica = '$stanica'";
$dotaz_stan = $pdo->prepare($qry_stan);
$dotaz_stan->execute();
$stan_roleta = $dotaz_stan->fetchAll();
foreach ($stan_roleta as $row_stan)
{
    echo '<option value="' .$row_stan['id_stanica']. '"'.($_POST["stanica"]==$row_stan['id_stanica']?' selected':'').'></option>';
    
}
Ďakujem !
Keeehi
Profil
Bude odeslané ve formuláři.
luma64
Profil
Mal som uviesť kompletnú časť formulára, ktorá sa týka toho autocomplete. Teda:

Stanica:<input type="text" size="10" id="stanica" name="stanica" value="<?php echo $_POST["stanica"];?>">
<?php
$stanica=$_POST['stanica'];

$qry_stan="Select id as id_stanica, stanica from stanica where stanica = '$stanica' and odbornost_id='$odbornost_id' limit 1";
$dotaz_stan = $pdo->prepare($qry_stan);
$dotaz_stan->execute();
$stan_roleta = $dotaz_stan->fetchAll();
foreach ($stan_roleta as $row_stan)
{
    echo '<option value="' .$row_stan['id_stanica']. '"'.($_POST["id_stanica"]==$row_stan['id_stanica']?' selected':'').'></option>';
    
}


V rolete sa ponúkajú hodnoty, po odoslaní formuláru sa vždy odošle iba hodnota vybranej položky. Nie jej id.
Keeehi
Profil
No, to nepomohlo. Zdá se, že nemáš ani páru co děláš. Autocomplete standardně řeší javascript, který se ajaxem ptá na výsledky podle momentálně zadaného textu. To co jsi ukázal nedává moc smysl ani do jedné z částí.
luma64
Profil
Myslím , že viem čo chcem. Písaním do text poľa sa dynamicky toto aktualizuje na základe práve vpísanej časti reťazca v textboxe. Toto zabezpečuje php v spolupráci s javascriptom(jquery). No a v určitom momente, keď si užívateľ povie "toto si vyberiem", prináleží tejto vybranej hodnote aj nejaké id záznamu z tabuľky. A ja chcem získať toto id po odoslaní formuláru a zapísať do databázy. Samozrejme, že sa to dá aj tak, že získam hodnotu z rolety, zistím si prostredníctvom selektu jej id a toto zapíšem (toto je prípad, ktorý som popísal vyššie).


.. samozrejme v spolupráci s ajaxom..
T-fon
Profil
Nejsem si jistej, jestli se ptáš na tohle, ale asi chceš vědět, jak JS získá to id, ne? Čili něco takovýho?
var id = $('#stanice').find(':selected').val()
Keeehi
Profil
T-fon:
To to být nemůže, jelikož element s id stanice je input a ne select.

luma64:
Myslím , že viem čo chcem.
Já nikdy netvrdil že ne. Ty víš co chceš, ale absolutně nemáš tušení jak to sestavit.
Generování možností na stránce nedává vůbec smysl, pokud chceš data tahat ajaxem. Předávání proměnných také vůbec nedává smysl. Celé se to motá kolem, ale nic nedává pořádně smysl.

Podívej se do dokumentace, máš tam funkční ukázku. jqueryui.com/autocomplete/#remote
luma64
Profil
Snáď som mal začať, že stránke kde je spomínaný selekt mám skript
$().ready(function() {
        $("#stanica").autocomplete("stanica.php", {
                width: 100,
                matchContains: true,
                //mustMatch: true,
                //minChars: 0,
                //multiple: true,
                //highlight: false,
                //multipleSeparator: ",",
                selectFirst: false
        });
});
Ten je vyvolaný keď sa začne písať do input (text poľa). Kód volanej stránky stanica.php je nasledovný (jeho časť):

$odbornost_id = $_SESSION['SESS_ODBORNOST_ID'];


$q = strtolower($_GET["q"]);
if (!$q) return;
$qry_q = "select stanica as course_name from stanica where odbornost_id='$odbornost_id' and stanica LIKE '%$q%'";
//echo $qry_q;
$dotaz_q = $pdo->prepare($qry_q);
$dotaz_q->execute();
$q_roleta = $dotaz_q->fetchAll();

foreach ($q_roleta as $row_q)
{
    $cname = $row_q['course_name'];
    echo "$cname\n";
}
Keeehi
Profil
No, to už je lepší.

Tu dokumentaci jsi však ale nečetl, že? Je tam napsané
The datasource is a server-side script which returns JSON data, specified via a simple URL for the source-option.
Jde toho velmi jednoduše dosáhnout
$dotaz_q = $pdo->prepare('SELECT stanica AS label, id AS value
FROM stanica
WHERE odbornost_id= ? AND stanica LIKE ?');
$dotaz_q->bindParam(1, $odbornost_id, PDO::PARAM_INT);
$dotaz_q->bindParam(2, "%$q%", PDO::PARAM_STR);

echo json_encode($dotaz_q->fetchAll(PDO::FETCH_ASSOC));

Tvůj původní kód trpí na SQL Injection zranitelnost. Tak jsem to přepsal a takto by to mělo být snad správně. S PDO ale nedělám, takže ruku do ohně za to nedám.

Poznámka na okraj - jak se můžeš ptát, jak dostat z autocompletu id záznamu, když jsi ho z databáze ani nevybral? Kde by k takové informaci měl přijít?

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:

0