flera $_get

PHPportalen Forum Index » PHP
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
wonderwizard



Medlem i: 6589 dagar

Status: Offline



#742851
Inlägg Skrivet: 2020-09-30 22:01      Ämne: flera $_get Citera

jag försöker göra en stegvis underkategori med querystrings
och med hjälp av breadcrumbs
första och andra visas, men inte sista. vad gör jag fel ?

KOD:
1:
 
2:
<?php
3:
$make = isset($_GET['make']) ? $_GET['make'] : NULL;
4:
$model = isset($_GET['model']) ? $_GET['model'] : NULL;
5:
?>
6:
<table class="table table-bordered table-hover"  width="100%" cellspacing="0">
7:
<nav aria-label="breadcrumb">
8:
  <ol class="breadcrumb">
9:
  <li class="breadcrumb-item"><a href="?p=view&make=all">Home</a></li>
10:
  <li class="breadcrumb-item"><a href="?p=view&make=<?php echo $make ; ?>"><?php echo $make ; ?></a></li>
11:
  <li class="breadcrumb-item active" aria-current="page"><?php echo $model ; ?></li>
12:
  </ol>
13:
</nav>
14:
<?php
15:
if ($_GET['make'] === "all") {
16:
  // echo "Show all manufacturer";
17:
  echo "<tr>";
18:
  echo    "<td><a href='?p=view&make=Yamaha'>Yamaha</a></td>";
19:
  echo "</tr>";
20:
}
21:
 
22:
elseif ($_GET['make'] === $make ) {
23:
  // echo "Show all $make";
24:
  echo "<tr>";
25:
  echo    "<td><a href='?p=view&make=Yamaha&model=YZF R1'>YZF R1</a></td>";
26:
  echo    "<td><a href='?p=view&make=Yamaha&model=YZF R6'>YZF R6</a></td>";
27:
  echo    "<td><a href='?p=view&make=Yamaha&model=YZF R7'>YZF R7</a></td>";
28:
  echo "</tr>";
29:
}
30:
 
31:
elseif ($_GET['model'] === $model ) {
32:
  // echo "specify $model";
33:
  echo "<tr>";
34:
  echo    "<td>Show all info about $model</td>";
35:
  echo "</tr>";
36:
}
37:
?>
38:
</table>
39:
 
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



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



#742852
Inlägg Skrivet: 2020-10-01 10:18      Ämne: Citera

Det saknas både rawurlencode och htmlspecialchars på rad 10 och 11
Vissa textsträngar blir osynliga när htmlspecialchars saknas, t.ex om de tolkas som html-taggar.
Även på rad 25-27 har det inte escapeats som det skall:
&-tecken i html-kod skrivs &amp;
spacetecken i url kan skrivas med +

Om det inte hjälper: Testa att ta bort class-attributet, och sätt $model till något mer synligt än NULL om $_GET['model'] saknas.
 

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



Medlem i: 6589 dagar

Status: Offline



#742853
Inlägg Skrivet: 2020-10-06 16:52      Ämne: Citera

Lite uppdatering av kod & tillsnyggning (vad jag tycker iaf)

nu fungerar det som jag vill, men det funkar i min browser & via min samsung mobil

om du/ni har förslag till bättre uppbyggnad / kodning / förenkling så är jag

KOD:
1:
 
2:
<?php
3:
$make = isset($_GET['make']) ? $_GET['make'] : NULL;
4:
$model = isset($_GET['model']) ? $_GET['model'] : NULL;
5:
?>
6:
 
7:
<nav aria-label="breadcrumb">
8:
    <ol class="breadcrumb">
9:
        <li class="breadcrumb-item"><a href="?p=view&amp;make=all">Home</a></li>
10:
        <li class="breadcrumb-item"><a href="?p=view&amp;make=<?php echo htmlspecialchars ("$make") ; ?>"><?php echo htmlspecialchars("$make")  ; ?></a></li>
11:
        <li class="breadcrumb-item active" aria-current="page"><?php echo htmlspecialchars ("$model") ; ?></li>
12:
    </ol>
13:
</nav>
14:
 
15:
<div class="table-responsive">
16:
    <table class="table table-bordered"  width="100%" cellspacing="0">
17:
        <?php
18:
        if ($_GET['make'] === "all") { // echo "Show all manufacturer";
19:
            echo "<div class='d-flex flex-wrap'>";
20:
            $stmt = $mysqli->prepare("SELECT make_name FROM make order by make_name asc");
21:
            $stmt->execute();
22:
            $stmt->store_result();
23:
            $stmt->bind_result($make_name);
24:
            while($stmt->fetch())
25:
                   {
26:
                   echo "<div class='col-xs-10 p-3 d-flex justify-content-centeralign-items-center border-bottom'>";
27:
                   echo "<a title='$make_name' href='?p=view&amp;make=".str_replace(' ', '%20',$make_name)."'><img src='images/bikes/make/$make_name.png' width='50'/></a>";
28:
                   echo "</div>";
29:
                    }
30:
            echo "</div>";
31:
            $stmt->close();
32:
 
33:
        } elseif ($_GET['make']   === "$make") {  // echo "Show all make";
34:
 
35:
            if ($_GET['model'] === "$model") {  // echo "specify $model";
36:
                echo "Display all stored information in database about $model";
37:
            } else {
38:
 
39:
                $stmt2 = $mysqli->prepare("SELECT modell_name FROM modell WHERE make_name = '$make' ORDER BY modell_name ASC ");
40:
                $stmt2->execute();
41:
                $stmt2->store_result();
42:
                $stmt2->bind_result($modell_name);
43:
                while($stmt2->fetch()) {
44:
 
45:
                    $stmt3 = $mysqli->prepare("SELECT COUNT(*) FROM files WHERE file_modell = ?");
46:
                    $stmt3->bind_param('s', $modell_name);
47:
                    $stmt3->execute();
48:
                    $stmt3->bind_result($models);
49:
                    while ($stmt3->fetch());
50:
                    $stmt3->close();
51:
 
52:
                    echo "<div class='d-flex align-content-start flex-wrap col-sm-12 p-1 border-bottom'>";
53:
                    echo "<a title='$make - $modell_name' href='?p=view&amp;make=$make&amp;model=$modell_name'>$modell_name</a>";
54:
                    echo "&nbsp;($models) files";
55:
                    echo "</div>";
56:
                }
57:
            }
58:
        }
59:
        ?>
60:
    </table>
61:
</div>
62:
 
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande MSN Messenger
harald_b
Moderator



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



#742854
Inlägg Skrivet: 2020-10-10 14:47      Ämne: Citera

Förlåt för sent svar. Men här kommer mina synpunkter:

Jag ser att det fortfarande inte är helt rätt escapeat överallt ännu.
Skall man göra allt enligt konstens alla regler skall först data som ligger i url-en escapeas med rawurlencode eller urlencode:

PHP:
1:
 $data "två ord"//exempeldata som måste escapeas
2:
$url '?p=view&make='.rawurlencode($data); //OBS! här använder vi inte &amp; ännu. Det kommer senare. 


Sedan, när man gör html-kod av url-en så skall htmlspecialchars användas:
PHP:
1:
 
2:
$länktext "Ditt & datt"//exempeldata som måste escapeas
3:
$html '<a href="'.htmlspecialchars($url).'">'.htmlspecialchars($länktext).'</a>'//Här förvandlas & till &amp; och en del annat som är nödvändigt för html. 


Nu är det så finurligt att data som en gång paserat rawurlencode eller urlencode inte nödvändigtvis behöver escapeas ytterligare för att bli säker html-kod, och därför kan man göra det hela lite enklare också. Som t.ex så här:



PHP:
1:
 $data "två ord"//exempeldata som måste escapeas
2:
$länktext "Ditt & datt"//exempeldata som måste escapeas
3:
$html =  '<a href="?p=view&amp;make='.rawurlencode($data).'">'.htmlspecialchars($länktext).'</a>';//OBS! Här måste vi använda &amp; i url-en eftersom den inte escapeas med htmlspecialchars 


Den lösningen bör du kunna tillämpa på rad 10!

Du bör byta ut str_replace på rad 27 mot rawurlencode! Det kan vara bra att escapea fler tecken än spacetecken.
Det gäller även $make_name i url-en till bilden!

Sedan ser jag att du stoppar in data direkt i sql-koden på rad 39 ($make). Det bästa är att göra likadant med $make som du gör med $modell_name på rad 45. Men vill du stoppa in data direkt i sql-koden så går det också bra, bara det escapeas rätt. I detta fall med mysqli_real_escape_string:

PHP:
1:
 $sql "SELECT modell_name FROM modell WHERE make_name = '".$mysqli->real_escape_string($make)."' ORDER BY modell_name ASC " 



På rad 53 kan du behöva använda htmlspecialchars på innehållet i title-attributet, eftersom det innehåller $make och $modell_name, och sedan rawurlencode på samma variabler när de ingår i url-en, och slutligen htmlspecialchars$modell_name när det visas som länktext.
På rad 54 behöver $models dras genom htmlspecialchars, eftersom det ingår i html-kod där.
 

_________________
R.r - Ett fritt affärssystem
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget
PHPportalen Forum Index » PHP
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