NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!

Diskuze: Angular JS - nejde smazat řádek po načtení hodnot z databáze

V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
UrbiCZ
Člen
Avatar
UrbiCZ:27.11.2016 20:12

Ahoj, učím se s Angular JS a mám menší problém s tímto kódem:
HTML:

<table>
                <th>Jméno</th>
                <th>Příjmení</th>
                <th>Datum narození</th>
                <th>Superschopnost</th>
                <tr data-ng-repeat="x in zaznam track by $index">
                    <td>{{x.jmeno}}</td>
                    <td>{{x.prijmeni}}</td>
                    <td>{{x.datum_narozeni}}</td>
                    <td>{{x.superschopnost}}</td>
                    <td data-ng-click="smazat({{x.id}})">X</td>
                </tr>
            </table>

JavaScript:

<script>

            var app = angular.module("kosmonauti", []);

            app.controller("koskon", function($scope, $http){
               $http.get("select.php").then(function(response){
                   $scope.zaznam = response.data;
               });
               $scope.sendData = function(e){
                   e.preventDefault();
                   var config = {
                       method : "POST",
                       url : "insert.php",
                       data : {
                           "jmeno" : $scope.jmeno,
                           "prijmeni" : $scope.prijmeni,
                           "datum" : $scope.datum,
                           "schopnost" : $scope.schopnost
                       }
                   };
                   var request = $http(config);
                   request.then(function (response){
                        $scope.zaznam = response.data;
                    }, function (error) {
                        alert(error.data);
                   });
               }
               $scope.smazat = function(id){
                   var config = {
                       method : "POST",
                       url : "delete.php",
                       data : {
                           "id" : id
                       }
                   };
                   var request = $http(config);
                   request.then(function (response){
                        $scope.zaznam = response.data;
                    }, function (error) {
                        alert(error.data);
                   });
               }
            });

        </script>

Jde o to, že pomocí data-ng-repeat se načtou hodnoty z DB v pohodě, ale jakmile přidám poslední buňku <td data-ng-click="smazat({{x­.id}})">X</td>, tak se zobrazí error ( error ) a po kliknutí na X se neprovede smazání.

Nevíte, kde by mohl být problém? Díky.

Odpovědět
27.11.2016 20:12
http://snitch.cz/ - web o GameMakeru
Avatar
Odpovídá na UrbiCZ
Marian Benčat:27.11.2016 21:44
smazat(x.id)

Nechces totiz "vypsat" vyraz x.id (interpolace - https://docs.angularjs.org/…nterpolation) , ale chces to pouzit jako promennou, co posilas do funkce.

Editováno 27.11.2016 21:44
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
27.11.2016 21:44
Totalitní admini..
Avatar
UrbiCZ
Člen
Avatar
Odpovídá na Marian Benčat
UrbiCZ:27.11.2016 23:18

Jasný, díky moc. :)

Jo a nevíš, proč se mi nezobrazí modifikovaná tabulka po smazání řádku? Řádek se úspěšně smaže, ale poté pošlu zpět do proměnné zaznam nové hodnoty, které se ovšem v tabulce nezobrazí.

http://michalurban.cz/angular/

Tady kód ze souboru delete.php:

$sql = "DELETE FROM kosmonaut WHERE id=$id";
$delete = mysqli_query($conn,$sql);
if(!$delete){
    echo mysqli_error($conn);
}else {
    $sql = "SELECT * FROM kosmonaut";
    $dotaz = mysqli_query($conn, $sql);

    $output = array();

    if(mysqli_num_rows($dotaz) >= 1){
        while($radek = mysqli_fetch_assoc($dotaz)){
           $output[] = $radek;
        }
    }

    echo json_encode($output);
}
Nahoru Odpovědět
27.11.2016 23:18
http://snitch.cz/ - web o GameMakeru
Avatar
Marian Benčat:27.11.2016 23:22
  1. Máš tam SQL injection jako kráva. Každý ti může smazat celou databázi a zabere mu to 10 vteřin.
  2. Toto je Server side, polož konkrétní dotaz v PHP sekci, tam ti lidé odpoví... tedy nejdříve tě zjebou za ten SQL injection a pak ti odpoví.
Nahoru Odpovědět
27.11.2016 23:22
Totalitní admini..
Avatar
UrbiCZ
Člen
Avatar
Odpovídá na Marian Benčat
UrbiCZ:27.11.2016 23:30

Už jsem to opravil, chyba v jedné proměnné. SQL injections vyřeším, díky za rady.

Nahoru Odpovědět
27.11.2016 23:30
http://snitch.cz/ - web o GameMakeru
Avatar
Odpovídá na UrbiCZ
Neaktivní uživatel:27.11.2016 23:38

Těžko říct, dokud nevidíme celý php skript a jeho výstup.

Nahoru Odpovědět
27.11.2016 23:38
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.