Reaktywna kontrola pola formularza VUE niesie za sobą kilka zagwozdek – jedną z nich jest współbieżność.
1. Robimy formularz HTML wewnątrz sekcji id=”APP” VUE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <div role="group"> <b-form-input type="text" placeholder="Kategoria" v-model="dodajKategoria" :state="unikalnyKlucz" @change="sprawdz" aria-describedby="inputLiveHelp inputLiveFeedback" > </b-form-input> <b-form-invalid-feedback id="inputLiveFeedback"> Nazwa kategorii musi być dłuższa od 0 i nie występować w bazie (sprawdzane przy wyjściu z pola). </b-form-invalid-feedback> <b-form-text id="inputLiveHelp"> Nazwa kategorii jest poprawna. </b-form-text> </div> |
2. Robimy zmienne użyte w pierwszym fragmencie do aplikacji JS VUE:
W sekcji data:
1 2 3 4 5 | data: { dodajKategoria: '', //dodawana kategoria unikalnyKlucz: false, //czy klucz jest unikalny? //... } |
3. W sekcji methods:
1 2 3 4 5 6 7 8 9 10 11 | methods: { sprawdz: function(value) { //sprawdza AJAX czy jest już taki w bazie axios .get('https://adres/czy_dostepna_kategoria_json.php?kategorie=' + value) .then( response => this.unikalnyKlucz = !!response.data && value.length>0 ); //może zostać dodany }, //... } |
4.Do przycisku wysyłającego do bazy dodajemy :disabled=”!unikalnyKlucz”
1 | <b-btn class="mt-3" variant="outline-danger" block :disabled="!unikalnyKlucz" @click="zapiszDoBazy">Zapisz</b-btn> |
5. Jeszcze tworzymy plik sprawdzający klucz w bazie wywoływany AXIOSem:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php //Zwraca true jeśli można dodać podany klucz GET do bazy (to znaczy nie ma już takiego samego) include "../polacz.php"; $kategorie = $_GET["kategorie"]; if ($sql = $baza->prepare("SELECT kategorie FROM kategorie WHERE kategorie = ?")) { $sql->bind_param("s", $kategorie); $sql->execute(); $sql->bind_result($kat); if($sql->fetch()) echo "false"; else echo "true"; //jeśli jest taki w bazie zwraca false - to znaczy nie można dodać $sql->close(); } else die ("Błąd SQL - sprawdź zapytanie w MySQL"); $baza->close(); ?> |