lørdag, januar 23, 2021

Ændrer ikke på data (PHP/MySQL)

Daily Rush Debat Programmering Ændrer ikke på data (PHP/MySQL)

  • Forfatter
    Emne
  • #0

    Skipper
    Bruger
    1.205 indlæg
    Offline

    < ?php include("../../../includes/connect.php"); $user_id = $_GET['userid']; if ($_GET['ban'] == '0') { mysql_query('UPDATE users SET user_ban=0 WHERE user_id=$user_id'); } else if ($_GET['ban'] == '1') { mysql_query('UPDATE TABLE users SET user_ban=1 WHERE user_id=$user_id'); } ?>

    Sagt super kort – ovenstående virker ikke..
    Jeg er ved at kode et forum, hvor jeg skal kunne banne brugere, jeg har i brugerlisten brugt følgende “if”‘s

    if ($ml[‘user_ban’] == “1”)
    {
    echo ‘Unban user‘;
    }
    else if ($ml[‘user_ban’] == “0”)
    {
    echo ‘Ban user‘;
    }

    På siden hvor man skal kunne se sidst nævnte kode skildrer den det fint – men så snart jeg klikker på linket går den videre til siden, men opdatere ikke databasen, så det passer..

    connect.php forbinder til databasen fint (hvis jeg kalder noget fra databasen virker det fint og hvis jeg skriver til databasen virker det også ok – bare ikke lige præcis den funktion som jeg her ønsker hjælp til)..

    Nogen der har en idé om hvad jeg gør forkert?

    Skal i øvrigt også nævnes at “GET” variablen også overføres fint mellem de to – og at jeg har prøvet at få siden til at vise variablerne…

    $ml er et kald til en query i databasen der også virker fint…

    Oh btw. – Dailyrush konvertere mit ban/unban link til et reelt link – det virker naturligvis ikke..

    Abandon ship!

Viser 5 kommentarer - 1 til 5 (af 5 i alt)
  • Forfatter
    Kommentarer
  • #1

    Invader
    Bruger
    2.478 indlæg
    Offline

    du skal kun banne hvis isset($_GET[‘userid’]­)===true

    Derudover så kan du ikke indsætte variabler i strenge lavet med ” – du skal benytte “”:

    Altså med ” frem for ‘:
    mysql_query(“UPDATE users SET user_ban=0 WHERE user_id=$user_i­d”);

    #2

    Invader
    Bruger
    2.478 indlæg
    Offline

    http://php.net/manual/en/language.types.string.php

    Note: Unlike the double-quoted and heredoc syntaxes, variables and escape sequences for special characters will not be expanded when they occur in single quoted strings.

    #3

    Skipper
    Bruger
    1.205 indlæg
    Offline

    Takker for hjælpen, har fået det til at virke nu

    Abandon ship!

    #4

    Puppetmaster
    Bruger
    247 indlæg
    Offline

    Jeg ved ikke om det ligger i noget af den kode du har klippet ud, men “better safe than sorry”.. Hvis du ikke har gjort det, så skal du sanitere på det GET input.. Stol aldrig, aldrig på GET eller POST… Hvis $_GET[‘userid’] bør være ettal, så brug enten et cast til int eller intval… Så du undgår en Little Bobby Tables: http://xkcd.com/327/

    Sendt fra min Nokia 3310

    #5

    Invader
    Bruger
    2.478 indlæg
    Offline

    Enig med #4 (genial xkcd!). SQL injections kan undgåes nemt ved blot at benytte prepared statements (PDO prepare()) frem for mysql_query() fra stenalderen

    Meeen man skal også sikre sig mod Cross Site Scripting (XSS) f.eks. ved at escape output med htmlspecialchars().

Viser 5 kommentarer - 1 til 5 (af 5 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.