Autor Zpráva
Grass33
Profil *
Zdravím,

jsem v JS naprostý začátečník. Řeším tento problém: na webu chci formulář se Selectem, kde si uživatel něco vybere, na základě čeho se pak doplní další políčka ve formuláři.

<script>
$("body").on('change', '#sel_dodaci_adresa', function()
 {
     var selectedValue = $(this).val();
    $.ajax({
        url: 'dodaci_adresa.php',
        type: 'POST',
    data: {option : selectedValue},
        success: function(data) {
            console.log("Data sent!");
                        $('#jmeno').val(???);
            $('#prijmeni').val(???);
            $('#ulice').val(???);
            alert(selectedValue); 
        }
    });
});
</script>

Testovací alert funguje (do dodaci_adresa.php se předá např. 1), jen nedokážu přenést data (nevím co napsat místo těch otazníků) z dodaci_adresa.php do polí formuláře. V dodaci_adresa.php je něco jako:

require_once("config.php");
$query3  = mysqli_query($pripojeni, "SELECT * FROM uzivatele_adresy WHERE id='$_REQUEST['option']'");
while ($res = mysqli_fetch_array($query3)) {
            echo $res['jmeno'];
            echo $res['prijmeni'];
            echo $res['ulice'];
        }
        
Kajman
Profil
Pozor, pomocí uvedného php skriptu na serveru může kdokoliv vypsat všechny adresy všech uživatelů. Dokonce i data z jiných tabulek.

Takže

1. ošetřete sql injection, např. díky www.php.net/manual/en/mysqli.prepare.php
2. ošetřete, aby uživatel mohl získat jen svoji adresu
3. pole dat (např. celé $res, pokud nevadí, že tam budou všechny sloupce) vraťte pro jednoduché použíti jako JSON pomocí funkce www.php.net/manual/en/function.json-encode.php a se správným Content-Type
4. v případě úspěchu pak budou předaná data v data['jmeno']
Grass33
Profil *
Děkuji za odpověď. Bezpečnost jsem zatím neřešil, jen chci rozeběhnout funčknost :-).

Stále se mi to nějak nedaří, teď mám kód:

<script>
$("body").on('change', '#sel_dodaci_adresa', function()
 {
     var selectedValue = $(this).val();
    //make the ajax call
    $.ajax({
        url: 'dodaci_adresa.php',
        type: 'POST',
        data: {option : selectedValue},
    contentType: "application/json",
    dataType: 'json',
        success: function(data) {
                $('#jmeno').val(data['prijmeni']);
                $('#prijmeni').val(data['prijmeni']);
        },
    error: alert("nejde to")
    });
});
</script>

Což hodí error alert. A v dodaci_adresa.php

<?php
require_once("config.php");
$query3  = mysqli_query($pripojeni, "SELECT * FROM uzivatele_adresy WHERE id='$_POST['option']'");
$array = mysqli_fetch_array($query3);
echo json_encode($array);
?>
Kajman
Profil
Content-Type na json jste měl nastavit pro odpověd ze serveru, ne pro požadavek na server. Tedy v php skriptu ne v js. Zapněte si v prohlížeči díky F12 vývojářské nástroje. Tam uvidíte asi i detail chyby.

Edit: A to prepare Vám pomůže i k funkčnosti sestaveného stringu s dotazem.

Edit2: Osobně bych to ale řešil jinak. Nachystal bych si v php při generování košíku všechny uložené adresy uživatele, předal je stránce jako javascriptové pole nebo je dal jako data atributy k jednotivým optionům a pak si údaje do formuláře vyzobnul jen javascriptem bez dotazu na server.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0