php profile token script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 4 5 volgende »

Pascal klienstra

pascal klienstra

29/09/2019 00:52:10
Quote Anchor link
Hallo,
ik ben bezig met een systeem
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--  
 -- Table structure for table `account`  
 --  
 CREATE TABLE IF NOT EXISTS `account` (  
  `u_id` int(11) NOT NULL AUTO_INCREMENT,  
  `u_naam` varchar(250) NOT NULL,  
  `avatar` varchar(250) NOT NULL,
  PRIMARY KEY (`u_id`)  
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;  

 --  
 -- Table structure for table `tickets`  
 --  
 CREATE TABLE IF NOT EXISTS `tickets` (  
  `token` CHAR(40) NOT NULL,
  `ticket_naam` varchar(250) NOT NULL,
  `ticket_datum` date NOT NULL,
  `plaats` varchar(250) NOT NULL,
  `prijs` int(2) NOT NULL,
  `betaallink` varchar(250) NOT NULL,  
  `u_id` int(11) NOT NULL,  
  PRIMARY KEY (`token`)  
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;  
 

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
?php
// retrieve token
if (isset($_GET["listing"]) && preg_match('/^[0-9A-F]{40}$/i', $_GET["listing"])) {
    $token = $_GET["listing"];
}
else {
    throw new Exception("niks gevonden");
}

// verify token
$query = $db->prepare("SELECT u_id, ticket_naam FROM tickets INNER JOIN account ON tickets.ticket_id = account.u_id WHERE token = ?");
$query->execute(array($token));
$row = $query->fetch(PDO::FETCH_ASSOC);
$query->closeCursor();

if ($row) {
    extract($row);
}
else {
    throw new Exception("niks gevonden");
}
$row["u_naam"];
$row["ticket_naam"];
?>



wat nou het idee moet wezen zodra ik 1 aanmaak wil ik dat die een aparte token code krijgt met link zodat je van de table users informatie leest en de tickets van die user die code kunnen mensen dan sturen zodat ze de pagina kunnen zien iemand tips/ of beetje op weg kan helpen
 
PHP hulp

PHP hulp

24/11/2024 15:40:58
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 01:07:17
Quote Anchor link
Maak een unieke string aan, en zorg ervoor dat het veld ook UNIQUE is.
 
Pascal klienstra

pascal klienstra

29/09/2019 12:31:09
Quote Anchor link
zou je me een klein setje kunnen geven hoe en wat
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 12:34:27
 
Pascal klienstra

pascal klienstra

29/09/2019 12:40:41
Quote Anchor link
is de query wel goed
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$query = $db->prepare("SELECT u_id, ticket_naam FROM tickets INNER JOIN account ON tickets.ticket_id = account.u_id WHERE token = ?");
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 12:46:21
Quote Anchor link
Heb je het al uitgetest in phpMyAdmin of welke MySQL cliënt je maar gebruikt?
Persoonlijk ben ik niet van de prepared-queries.
Gewijzigd op 29/09/2019 12:48:37 door - Ariën -
 
Pascal klienstra

pascal klienstra

29/09/2019 12:51:20
Quote Anchor link
hoe zou jij het beter doen dan
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 12:52:19
Quote Anchor link
Gewoon de query() functie van MySQLi, en alles netjes escapen.
Gewijzigd op 29/09/2019 12:52:30 door - Ariën -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/09/2019 14:45:53
Quote Anchor link
Huh? prepared statements zijn een stuk veiliger als er zoals hier een get variabele in de query wordt opgenomen...
Dus gewoon prepared statements blijven gebruiken. Je zou wel kunnen overwegen om PDO te gebruiken in plaats van mysqli.
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 14:51:10
Quote Anchor link
Ik heb nergens gezegd dat het onveiliger is. Maar bij beiden moet je ervoor zorgen dat de invoer veilig is.
 
Pascal klienstra

pascal klienstra

29/09/2019 15:26:15
Quote Anchor link
ik heb nou dit
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
 include 'config.php';
         if(isset($_POST["submit"])){
        $token = rand();
        $result = hash("sha256", $token);  

            }

            $sql = "";
            if (mysqli_query($conn, $sql)) {
               echo "Gelukt";
            }
else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
            }

            $conn->close();
         }

      ?>

<html>
<body>
<form action="">
<h1>Gebruikers info</h1><br>
  Naam:<br>
  <input type="text" name="naam" value="">
  <br>
  avatar img:<br>
  <input type="text" name="avatar" value="">
  <br>
  <h1>Ticket info</h1><br>
   Ticket naam:<br>
  <input type="text" name="ticket_naam" value="">
  <br>
   Ticket header image:<br>
  <input type="text" name="ticket_naam" value="">
  <br>
   ticket_datum:<br>
  <input type="text" name="ticket_datum" value="">
  <br>
  plaats:<br>
  <input type="text" name="plaats" value="">
  <br>
  prijs:<br>
  <input type="text" name="avatar" value="">
  <br>
   Betaalmethode:<br>
  <input type="text" name="betaallink" value="">
  <br>
  <br>
  <input type="submit" value="Submit">
</form>
</body>
</html>


nou moet ik de insert into maken alleen probleem is
de table gebruikers u_id moet het zelfde zijn bij table tickets
en bij token moet de code in de table tickets zodat ik het afkan lezen in table tickets
Gewijzigd op 29/09/2019 15:42:05 door pascal klienstra
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 16:12:30
Quote Anchor link
En nu met interpuncties?
 
Pascal klienstra

pascal klienstra

29/09/2019 16:25:48
Quote Anchor link
Ik heb een html formulier die ik kan invullen.
Wat ik nou precies wil is het volgende
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<h1>Gebruikers info</h1><br>
  Naam:<br>
  <input type="text" name="naam" value="">
  <br>
  avatar img:<br>
  <input type="text" name="avatar" value="">
  <br>


die data moet opgeslagen worden in de table account.
De data ticket info
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<h1>Ticket info</h1><br>
   Ticket naam:<br>
  <input type="text" name="ticket_naam" value="">
  <br>
   Ticket header image:<br>
  <input type="text" name="ticket_naam" value="">
  <br>
   ticket_datum:<br>
  <input type="text" name="ticket_datum" value="">
  <br>
  plaats:<br>
  <input type="text" name="plaats" value="">
  <br>
  prijs:<br>
  <input type="text" name="avatar" value="">
  <br>
   Betaalmethode:<br>
  <input type="text" name="betaallink" value="">
  <br>
  <br>
  <input type="submit" value="Submit">
</form>
</body>
</html>

moet in de table tickets staan
bij de table tickets moet de token code in de table staan.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
       $token = rand();
        $result = hash("sha256", $token);  

zodat ik straks elk pagina een token code heeft, bijvoorbeeld ?listing=SHGDHAGDADHGAHG
die lees dan de data af van de token, en vanuit de tabellen
de gegevens van account afleest en van tickets.
Maar dat is dan een select query

dus wat ik aan jullie vraag
hoe moet ik de sql query doen
insert into en select
Gewijzigd op 29/09/2019 16:30:25 door pascal klienstra
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 16:28:43
Quote Anchor link
Als je een INSERT in twee tabellen uitvoert, zijn dit twee INSERT queries.

Zo bouw je een INSERT op:

INSERT INTO TABLE_NAME (ID, dit, dat)
VALUES ('', 'zus', 'zo');

In dit geval is ID als value leeg, omdat het al automatisch ingevuld wordt door MySQL, als het auto_increment is.
Gewijzigd op 29/09/2019 16:39:20 door - Ariën -
 
Pascal klienstra

pascal klienstra

29/09/2019 16:40:35
Quote Anchor link
dus dan moet het zo
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 include 'config.php';
         if(isset($_POST["submit"])){
        $token = rand();
        $result = hash("sha256", $token);  

            }

             $sql="INSERT INTO `account` (u_naam, avatar)
           VALUES ('{$_POST['naam']}','{$_POST['avatar']}')"
;
            $sql="INSERT INTO `tickets` (ticket_naam, token)
           VALUES ('{$_POST['ticket_naam']}','{$_result}')"
;
            if (mysqli_query($conn, $sql)) {
               echo "Gelukt";
            }
else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
            }

            $conn->close();
         }

      ?>
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 16:42:41
Quote Anchor link
Niet helemaal, maar zorg wel voor escaping van je data met mysqli_real_escape_string(), voordat je query (kwaadschikt) gemanipuleerd wordt.

En voer dan je query ook twee keer uit in plaats van je SQL-string te overschrijven. Nu INSERT nu alleen in je ticket tabel.
Gewijzigd op 29/09/2019 16:46:02 door - Ariën -
 
Pascal klienstra

pascal klienstra

29/09/2019 16:44:07
Quote Anchor link
oke maar hoe krijg ik de u_id het zelfde van table account naar table tickets u_id
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 16:44:50
Quote Anchor link
Is dat een ID vanuit auto_increment?
Zie ook mijn edit!
Gewijzigd op 29/09/2019 16:45:15 door - Ariën -
 
Pascal klienstra

pascal klienstra

29/09/2019 16:47:17
Quote Anchor link
Wat mijn idee eigenlijks is

table account
u_id
naam
avatar

table tickets
token
titel_naam
u_id

u_id het zelfde zodat ik met de select de token kan checken en de data afleest van de gebruiker en van de tickets
 
Thomas van den Heuvel

Thomas van den Heuvel

29/09/2019 16:49:24
Quote Anchor link
Frank Nietbelangrijk op 29/09/2019 14:45:53:
Huh? prepared statements zijn een stuk veiliger als er zoals hier een get variabele in de query wordt opgenomen...

Dit is simpelweg niet waar. Het enige wat veiligheid ten goede komt is een juist gebruik. Wanneer je prepared statements verkeerd gebruikt is dit even onveilig als enige andere methode.

- Ariën - op 29/09/2019 14:51:10:
Maar bij beiden moet je ervoor zorgen dat de invoer veilig is.

Ook dit klopt niet (helemaal). Je moet gewoon alle DATA in je query escapen. Het maakt dan niet uit of deze onveilig was of niet.

ontopic: wat ik wel zou doen is de hash ergens aan koppelen in de hyperlink. Als je enkel een hash in een URL meegeeft dan zou je deze veel makkelijker kunnen bruteforcen (alle combinatie afgaan totdat je een match hebt). Dit wordt al (een stuk) moeilijker als je een tweede argument toevoegt, zelfs een auto increment id kan al helpen. Dan moet namelijk de combinatie kloppen.
EDIT: tenzij dit een afgeschermd systeem is waar de gebruiker zich eerst moet authenticeren.

En ja, je zult ook op een of andere manier een verband moeten leggen tussen beide tabellen...

De tweede SQL-string ($sql) wordt overschreven door de eerste. Je zult echt twee queries moeten uitvoeren waarbij je het insert-id van de eerste query, die dus in wezen het user-id bevat, invoegt in de tweede query.

@Ariën: ja, zie de tabeldefinities in het oorspronkelijke bericht.
Gewijzigd op 29/09/2019 16:52:58 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 16:49:30
Quote Anchor link
Het u_id kan je ophalen met mysqli_insert_id()

https://www.w3schools.com/php/func_mysqli_insert_id.asp
 

Pagina: 1 2 3 4 5 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.