PHP plaatsing fout na inloggen

Pagina: 1
Acties:

Onderwerpen


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Hallo allemaal,

Voor school ben ik bezig met een project waarbij ingelogd kan worden en gebruikers iets kunnen plaatsen op de homepagina.

Op deze link is mijn project te vinden, inloggen kan met:
link is verwijderd
Gebruikersnaam: admin
Wachtwoord: test

Zodra er is ingelogd komt er een nieuw formulier met titel en bericht.
Dit formulier roep ik in de div nieuws aan onder de div content.
Echter komt deze in de div content te staan tussen het andere formulier en de tabel in.

(Als ik in de broncode kijk staat de div nieuws wel onder de div content, maar als ik via chrome element inspecteren doe staat die wel in de div content. Dit vind ik al helemaal apart..)

Op wat voor manier ik het ook probeer ik krijg de div nieuws niet onderaan na de tabel.

De volgende code gebruik ik:

PHP:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
        <div id='content'>
        <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" id="country">            
            Country: <input type="text" name="country">      
            National animal: <input type="text" name="animal">             
            <input type="submit" name="submit">                           
        </form>        
        
        <?php           
        if (isset($_POST['submit']) && isset($_POST['country'])) {             
            $country = empty($_POST['country']) ? die ("ERROR: Enter a country") : mysql_real_escape_string($_POST['country']);
            $animal = empty($_POST['animal']) ? die ("ERROR: Enter an animal") : mysql_real_escape_string($_POST['animal']);
            $query = "INSERT INTO symbols (country, animal) VALUES ('$country', '$animal')";
            $result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());
            echo "New record inserted with ID ".mysql_insert_id();          
        }            
        
        // delete
        if (isset($_GET['id'])) {
            $deleteQuery = "DELETE FROM symbols WHERE ID = ".$_GET['id'];
            mysql_query($deleteQuery);              
        }                   
            
        // show table   
        $query = "SELECT * FROM symbols";
        $result = mysql_query($query);
        
        echo "<table cellpadding=10 border=1>";
        
        while($row = mysql_fetch_array($result)) {          
            echo "<tr>";            
            echo "<td>".$row[ID]."</td>";           
            echo "<td>".$row[Country]."</td>";          
            echo "<td>".$row[Animal]."</td>";               
            if( isset( $_SESSION['auth'] ) && $_SESSION['auth'] === 1 ) {           
                echo "<td><a href='index.php?id=".$row[ID]."'>Delete</a></td>";                 
            }           
            echo "</tr>";                   
        } ?> 
        </div> <!-- #content -->
        
        <?php
        if( isset( $_SESSION['auth'] ) && $_SESSION['auth'] === 1 ) {           
            echo "<div id='nieuws'>
            
            <form action='<?php ". $_SERVER['PHP_SELF'] ."; ?>' method='post'>            
                Titel: <input type='text' name='titel'>      
                Bericht: <input type='textfield' name='bericht'>             
                <input type='submit' name='submit'>                           
            </form>";           
            
            echo "</div>";      
        }        
        ?>


Iemand een idee hoe ik dit kan verhelpen en hem wel op de goede plek in de html kan krijgen?

Bij voorbaat dank!

[ Voor 2% gewijzigd door Creepy op 05-06-2012 10:28 ]


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 03-11 20:03

Creepy

Tactical Espionage Splatterer

Je mist sowieso een </table> tag. Ik kan me voorstellen dat er dan het 1 en ander mis kan gaan omdat de browser nu zelf moet gaan verzinnen wat wanneer moet gaan komen en hoe zaken afgesloten moeten gaan worden.

Maar dat je je natuurlijk zelf ook al kunnen zien door de broncode te pakken en die in 1 of ander tooltje even te laten formatteren of door een validator te laten halen. Is er een reden waarom je dat niet hebt gedaan? Zomaar je code dumpen en hopen dat wij het voor je gaan bugfixen is eigenlijk niet de bedoeling hier, dat moet je in eerste instantie zelf doen.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Wiethoofd
  • Registratie: Juli 2007
  • Laatst online: 01:08

Wiethoofd

Broadcast TOM

Niet echt veilig die post naar $_SERVER['PHP_SELF'], hoe wel te gebruiken.
Ook een die() bij een enkele fout in een variabele ipv deze (netjes) af te handelen en alle errors verzameld weer te geven.
Een $_GET['id'] rechtstreeks in je delete gooien, dit is wel heel erg onveilig....
En je tweede form output letterlijk <?php in je action....
Input type 'textfield' bestaat niet, misschien eens kijken naar een textarea ;)

Het is vaak logischer en makkelijker om eerst in je output te kijken dan in de code die de output genereert als het in je browser fout gaat.

[ Voor 7% gewijzigd door Wiethoofd op 05-06-2012 13:00 ]

Volg me op Twitter/X & Bluesky


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Creepy schreef op dinsdag 05 juni 2012 @ 10:31:Maar dat je je natuurlijk zelf ook al kunnen zien door de broncode te pakken en die in 1 of ander tooltje even te laten formatteren of door een validator te laten halen. Is er een reden waarom je dat niet hebt gedaan? Zomaar je code dumpen en hopen dat wij het voor je gaan bugfixen is eigenlijk niet de bedoeling hier, dat moet je in eerste instantie zelf doen.
No offense, maar vind het nogal een botte reactie voor hoe ik mijn probleem uitleg.
Ben net een week intensief bezig met php en vind dat ik al een aardig eindje ben gekomen, liep nu alleen tegen een paar fouten aan waar ik niet meer wist waar ik het moet zoeken.

En gezien mijn redelijk goede html achtergrond had ik niet verwacht dat het aan de html zou liggen maar aan de php en aangezien daarin geen fouten werden aangegeven dacht ik dat ik daarin iets over het hoofd zag.

Maar de table vergeten te sluiten was inderdaad dom van mij en had ik moeten zien.
Het loste met wat omwegen genoeg, bedankt.
Wiethoofd schreef op dinsdag 05 juni 2012 @ 12:59:
Niet echt veilig die post naar $_SERVER['PHP_SELF'], hoe wel te gebruiken.
Ook een die() bij een enkele fout in een variabele ipv deze (netjes) af te handelen en alle errors verzameld weer te geven.
Een $_GET['id'] rechtstreeks in je delete gooien, dit is wel heel erg onveilig....
En je tweede form output letterlijk <?php in je action....
Input type 'textfield' bestaat niet, misschien eens kijken naar een textarea ;)

Het is vaak logischer en makkelijker om eerst in je output te kijken dan in de code die de output genereert als het in je browser fout gaat.
Had hem iets tesnel online gegooid want die textfield bijvoorbeeld had ik later ook al aangepast zonder je comment gelezen te hebben. En de $_SERVER['PHP_SELF'] vooral met php tags in de action was zeer dom. wou m sowieso nog gewoon naar index.php veranderen maar dat heb ik nu direct gedaan, bedankt had ik over het hoofd gezien.

Wat je zegt over de $_GET['id'] rechtstreeks in een div gooien snap ik niet en ik kan hier ook geen uitleg of bronnen over vinden via google. Misschien zoek ik verkeerd? Heb jij misschien hier nog een uitleg, bron of oplossing voor waardoor ik het wel veilig kan doen?

Verder bedankt voor de twee scherpe opmerkingen die ik over het hoofd had gezien.

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 16:09
Niet in een div, maar in het delete statement:

code:
1
2
3
4
if (isset($_GET['id'])) {
            $deleteQuery = "DELETE FROM symbols WHERE ID = ".$_GET['id'];
            mysql_query($deleteQuery);                
        }


Ik weet niet of je voor het stuk geposte code nog validatie gebruikt, maar als ik nu als pagina het volgende aanroep:

index.php?id=0;DROP TABLE users Slecht voorbeeld, vergeten dat mysql_query maar 1 query uitvoert, gebruik tegenwoordig alleen maar PDO meer...

index.php?id=0 OR id !=0

wat zou er gebeuren denk je ;)

[ Voor 16% gewijzigd door azerty op 05-06-2012 22:32 ]


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Jawel, ik de gebruik va de volgende beveiliging bovenin de php code:
PHP:
1
2
    $username = mysql_real_escape_string( $_POST['name']['name'] );
    $password = mysql_real_escape_string( $_POST['pass']['name'] );


Ik van horen zeggen dat zo'n beveiliging genoeg is tegen een SQL injectie, of is deze informatie niet juist?

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

Heb je ooit eens http://php.net/mysql_query helemaal doorgelezen en gesnapt? Inclusief de code voorbeelden, het commentaar in de code en de verwijzingen naar andere pagina's?

[ Voor 5% gewijzigd door ibmos2warp op 05-06-2012 22:03 . Reden: hehe verkeerde bbcode ]

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


  • Ronnyrr
  • Registratie: Juni 2009
  • Laatst online: 16-02-2024
Nee, maar daar moet ik zo te zien een keer goed de tijd voor nemen!

  • azerty
  • Registratie: Maart 2009
  • Laatst online: 16:09
En lees je maar eens goed in over SQL injection en user input.

  • LEDfan
  • Registratie: Juni 2012
  • Laatst online: 14:57
Mij hebben ze altijd aangeraden om in html atijd dubbele quotes te gebruiken, en in PHP enkele. Stel je echo'ed het volgende:
PHP:
1
2
$var = 'Deze tekst gaat geechod worden.';
echo "$var";


Dan komt er 'Deze tekst gaat geecho'd worden' op het scherm. (Uiteraard zonder de quotes)
Maar als je nu het volgende doet:
PHP:
1
2
$var = 'Deze tekst gaat geechod worden.';
echo '$var';

Komt er netjes dit te staan: '$var'.

Alle tekst tussen dubbele quotes ("), zal uitgevoerd worden, tussen enkel quoets niet, tussen enkele quotes zal het ook geescpaed worden. Je kan alles
Je kan alles hier nog een keertje nalezen.

Ik vind het vreemd dat jullie mysql_ functies leren? Ik ben hier ook zo mee begonnen, maar diverse mensen raden mij aan prepared PDO statements te gebruiken.

EDIT: Zie volgende post.

[ Voor 1% gewijzigd door LEDfan op 06-06-2012 09:10 . Reden: Zelf foutje met quotes gemaakt.. ]


  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

LEDfan schreef op woensdag 06 juni 2012 @ 08:46:
Alle tekst tussen dubbele quotes ("), zal uitgevoerd worden, tussen enkel quoets niet, tussen enkele quotes zal het ook geescpaed worden.
Nee, er zal niet 'geescpaed' worden. Dingen als \n (new line) \t (tab) werken gewoon niet binnen enkele quotes, die werken alleen binnen dubbele quotes. Dingen als [url=http://php.net/htmlspecialchars[/url]htmlspecialchars[/url] zul je ook nog steeds zelf over je output heen moeten gooien.
LEDfan schreef op woensdag 06 juni 2012 @ 08:46:
Ik vind het vreemd dat jullie mysql_ functies leren? Ik ben hier ook zo mee begonnen, maar diverse mensen raden mij aan prepared PDO statements te gebruiken.
Het is mooi om eerst dit 'hoofdstuk' goed af te sluiten. Inderdaad is het misschien wel handiger om op PDO over te stappen.

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


  • LEDfan
  • Registratie: Juni 2012
  • Laatst online: 14:57
Sorry, ik heb men post hierboven even aangepast. Maar het is wel belangrijk dat je de variables uit de quotes haalt? Een (Engels) PHP handboek staat op men snel bestel lijstje.

  • ibmos2warp
  • Registratie: Januari 2007
  • Laatst online: 20-11-2023

ibmos2warp

Eval is Evil

LEDfan schreef op woensdag 06 juni 2012 @ 09:14:
Sorry, ik heb men post hierboven even aangepast. Maar het is wel belangrijk dat je de variables uit de quotes haalt? Een (Engels) PHP handboek staat op men snel bestel lijstje.
Ja, variabelen binnen quotes is vies, dat moet niet :)

Ik weet alles van niks
Vind Excel ongelovelijk irritant.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Dat is en blijft een kwestie van smaak ibmos2warp, het is geen absolute waarheid.
Pagina: 1