En auto options med js

PHPportalen Forum Index » HTML/CSS/JavaScript/Design
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Sthlms_Jonas



Medlem i: 4800 dagar
Från: Stockholm
Status: Offline



#742527
Inlägg Skrivet: 2019-04-06 14:22      Ämne: En auto options med js Citera

Hej.
Har följt en manual för att göra en auto option. Fungerade fint fast nu ska jag försöka få den att passa till mig.

Jag kommer att hämta från samma tabell så kan tyvärr inte använda id i första steget.
db:
id, city, house.
Där jag vill välja 'city' i första option och i nästa ska den plocka fram alla olika 'house' där city är rätt, för att till sist få fram rätt id.

Det fungerar fint om jag använder id, fast tyvärr fungerar det inte då jag vill hämta från samma tabell och city är sparade i namn(ni kommer nog tycka att det är fel:P).
Undrar om det kan vara något med det lilla js skriftet i starten. inte så bra på js.

index:
PHP:
1:
    <script type="text/javascript">
2:
        $(document).ready(function(){
3:
            $("#sel_depart").change(function(){
4:
                var deptid = $(this).val();
5:
                $.ajax({
6:
                    url: 'getUsers.php',
7:
                    type: 'post',
8:
                    data: {depart:deptid},
9:
                    dataType: 'json',
10:
                    success:function(response){
11:
                        var len = response.length;
12:
                        $("#sel_user").empty();
13:
                        for( var i = 0; i<len; i++){
14:
                            var id = response[i]['id'];
15:
                            var name = response[i]['name'];
16:
                            $("#sel_user").append("<option value='"+id+"'>"+name+"</option>");
17:
                        }
18:
                    }
19:
                });
20:
            });
21:
        });
22:
    </script>
23:
</head>
24:
<body>
25:
        <div>Stad </div>
26:
        <select id="sel_depart">
27:
            <option value="0">- Stad -</option>
28:
            <?php
29:
            // Fetch Department
30:
            $data $pdo->query("SELECT DISTINCT city FROM building")->fetchAll();
31:
            foreach ($data as $row) {
32:
                $departid $row['city'];
33:
                $depart_name $row['city'];
34:
                // Option
35:
                echo "<option value='".$departid."' >".$depart_name."</option>";
36:
            }
37:
            ?>
38:
        </select>
39:
        <div class="clear"></div>
40:
        <div>Hus </div>
41:
        <select id="sel_user">
42:
            <option value="0"></option>
43:
        </select>


getUsers:
PHP:
1:
<?php
2:
include "config.php";
3:
$departid $_POST['depart'];   // department id
4:
// Option
5:
$data $pdo->query("SELECT id, house FROM building WHERE city=$departid")->fetchAll();
6:
foreach ($data as $row) {
7:
  $userid $row['id'];
8:
  $name $row['house'];
9:
  $users_arr[] = array("id" => $userid"name" => $name);
10:
}
11:
// encoding array to json format
12:
echo json_encode($users_arr);
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 4899 dagar
Från: Tavesta
Status: Offline



#742528
Inlägg Skrivet: 2019-04-06 17:41      Ämne: Citera

i getUsers:
PHP:
3:
 $departid $_POST['depart'];
4:
// Option
5:
$data $pdo->query("SELECT id, house FROM building WHERE city=$departid")->fetchAll(); 

De här raderna fungerar bara när $_POST['depart'] är numeriskt, men inte när det är text, och den är vidöppen för sql-injections.

Ändra till:
PHP:
3:
 $departid $pdo->quote($_POST['depart']); 
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Sthlms_Jonas



Medlem i: 4800 dagar
Från: Stockholm
Status: Offline



#742529
Inlägget är accepterad som det rätta svaret Skrivet: 2019-04-07 14:21      Ämne: Citera

Upptäckte det när jag tog ut koden till en egen fil.
Gjorde om det till en annan kod som fungerar för sig själv, fast tyvärr inte där inne.

PHP:
1:
<?php
2:
include "config.php";
3:
//$departid = $_POST['depart'];   // department id
4:
 $departid $pdo->quote($_POST['depart']);
5:
// Option
6:
$search $pdo->prepare("SELECT id, house FROM building WHERE city LIKE ?");
7:
$search->execute(array("$departid"));
8:
foreach($search as $row) {
9:
 $userid $row['id'];
10:
 $name $row['house'];
11:
 $users_arr[] = array("id" => $userid"name" => $name);
12:
}
13:
// encoding array to json format
14:
echo json_encode($users_arr);






LÖST..

Blev rätt när jag gjorde om rad 3 som orginal

PHP:
1:
  $departid $_POST['depart']; 
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Peppe L-G



Medlem i: 4641 dagar
Från: Mullsjö
Status: Offline



#742530
Inlägg Skrivet: 2019-04-07 20:47      Ämne: Citera

Du är nu öppen för SQL injections. Du borde göra som harald_b föreslog innan istället. Om du inte fick den koden att fungera så borde du felsöka och rätta till det. Är det %-tecknet i sökningen som inte fungerar?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



Medlem i: 4899 dagar
Från: Tavesta
Status: Offline



#742533
Inlägg Skrivet: 2019-04-08 13:36      Ämne: Citera

@Peppe L-G:
Om du tittar noga så ser du att Sthlms_Jonas ändrat till preparerad databasfråga, och då passar inte mitt förslag till lösning.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Peppe L-G



Medlem i: 4641 dagar
Från: Mullsjö
Status: Offline



#742534
Inlägg Skrivet: 2019-04-08 17:01      Ämne: Citera

Tur du är med och rättar ^^'
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » HTML/CSS/JavaScript/Design
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic