php profile token script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 4 5 volgende »

Pascal klienstra

pascal klienstra

29/09/2019 16:56:33
Quote Anchor link
heb het nu als volgende.
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
<?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']}')"
;
            $sql1="INSERT INTO `tickets` (ticket_naam, token)
           VALUES ('{$_POST['ticket_naam']}','{$_result}')"
;
            if (mysqli_query($conn, $sql ,$sql1)) {
               echo "Gelukt";
               echo "br>"
               $url = "http://example.com/tickets.php?listing=$result";
               echo "kopieer het linkje:";
               echo "br>";
               echo $url;
            }
else {
               echo "Error: " . $sql . "" . mysqli_error($conn);
               echo "br>"
                echo "Error: " . $sql1 . "" . mysqli_error($conn);
            }

            $conn->close();
         }

      ?>
 
PHP hulp

PHP hulp

24/11/2024 17:45:47
 
Thomas van den Heuvel

Thomas van den Heuvel

29/09/2019 16:59:04
Quote Anchor link
Nota bene, waarom zou je het user id uit de user tabel willen (be)trekken? Als je een echte relationele database hebt waarbij tickets.u_id een foreign key is naar de account-tabel dan is al gegarandeerd dat deze user bestaat. Het enige waar ik dan eventueel nog op zou controleren is of het account nog actief is (of geen "deleted" flag heeft ofzo) maar het is (dan) niet nodig om het user id te verifiëren via de user tabel. Op dit moment is het wat mij betreft dus nogal "loos" dat je de user tabel betrekt in je query.

Dat gezegd hebbende, ik denk dat je er (dus) ook verstandiger aan doet om hier een echte relationele database van te maken, te meer omdat dit een soort van administratief systeem betreft. De InnoDB-engine is hier bij uitstek geschikt voor (in tegenstelling tot de MyISAM engine). Ook zou ik een uitgebreidere character set/encoding gebruiken dan latin1.

Er valt nog aardig veel winst te pakken bij een ander (en m.i. beter) database-ontwerp.

EDIT je overschrijft nog steeds je eerste query ($sql). Het is niet nodig om een tweede variabele $sql1 te definiëren. Een fout is met zo'n variabele-naam snel gemaakt.

De flow is als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
definieer query #1
voer query #1 uit
vraag autoincrement id op van query #1
definieer query #2 met gebruikmaking van dit id
voer query #2 uit
Gewijzigd op 29/09/2019 17:02:34 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 16:59:29
Quote Anchor link
Lees mijn vorige bericht nog eens terug over je query.
 
Pascal klienstra

pascal klienstra

29/09/2019 17:02:22
Quote Anchor link
heb nu 2 aparte sql query's gemaakt

maar als ik nu bestandje tickets.php aanmaak
dan moet ik het via get oproepen toch.
maar hoe weet ik dan als de token link bij welk formulier hoort die ingevuld is,
zodat die data afleest

zou je misschien de sql query kunnen schrijven zodat ik een idee heb
Gewijzigd op 29/09/2019 17:07:02 door pascal klienstra
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 17:17:39
Quote Anchor link
Check Thomas zijn workflow eens?
Als je wilt controleren of een token van een ticket klopt, dan kan je die $_GET in de WHERE plaatsen. Uiteraard speelt het escapen hier ook weer een belangrijke rol.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/09/2019 17:19:19
Quote Anchor link
Een sha256 hash produceert in ieder geval een (lowercase) hexadecimale string van 64 karakters lang.

Jouw reguliere expressie is voor de validatie van die hash niet goed, omdat deze *precies* 40 karakters verwacht.

Ook jouw token-kolom biedt maar ruimte aan 40 karakters.

Ik zou in ieder geval zorgen dat dat allemaal in de pas loopt.
 
Pascal klienstra

pascal klienstra

29/09/2019 17:19:23
Quote Anchor link
ja alleen snap ik niet hoe ik die sql combineer
definieer query #1
voer query #1 uit
vraag autoincrement id op van query #1
definieer query #2 met gebruikmaking van dit id
voer query #2 uit
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 17:21:10
Quote Anchor link
Het zijn en blijven twee losse INSERT-queries. Het ID van de eerste gebruik je bij de tweede.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/09/2019 17:22:36
Quote Anchor link
Dat is voor het invoeren, niet voor het uitlezen.

Je geeft de link ergens door, bijvoorbeeld via e-mail of via knippen en plakken bij wijze van test.

Vervolgens heb je een (ander) stuk code die dat allemaal weer uitleest, dat staat los van het bovenstaande.

Het helpt natuurlijk als je weet wat er precies in je database is gezet zodat je kunt testen en debuggen terwijl je iets aan het bouwen bent.

In het bovenstaande codefragment staat je link al:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
http://example.com/tickets.php?listing=$result


Het gaat hierbij om $result, die plak je in de aanroep naar je tickets(.php) script. Maar die moet dan dus wel goed in de database staan en de validatie moet ook kloppen, anders kom je niet zover.

---

Laten we het over een andere boeg gooien. Het "invoer" script en het "uitlees" script zouden zelfs los van elkaar ontwikkeld kunnen worden als je een afspraak hebt over hoe je informatie doorgeeft. Dit ligt al grotendeels vast in de databasedefinitie.

Dus je zou zelfs met het uitleesscript kunnen beginnen zolang je maar wat testdata in je database hebt staan.

Oftewel: welke data staat er op dit moment in je database waar je mee aan de slag zou kunnen gaan?
Gewijzigd op 29/09/2019 17:24:57 door Thomas van den Heuvel
 
Pascal klienstra

pascal klienstra

29/09/2019 17:25:08
Quote Anchor link
maar je zegt 2 variable hoeft niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$sql="INSERT INTO `account` (u_naam, avatar)
           VALUES ('{$_POST['naam']}','{$_POST['avatar']}')";
            $sql1="INSERT INTO `tickets` (ticket_naam, token)
           VALUES ('{$_POST['ticket_naam']}','{$_result}')";
            if (mysqli_query($conn, $sql ,$sql1)) {

maar hoe kan ik table account vullen en table tickets

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
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(64) 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 AUTO_INCREMENT,    
  PRIMARY KEY (`token`)  
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;  
Gewijzigd op 29/09/2019 17:28:19 door pascal klienstra
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 17:31:45
Quote Anchor link
Volgens mij gaat het erom dat je geen variabelen moet nummeren, zeg gewoon wat ze doen.
En mysqli_query werkt niet meet meerdere queries inéén.
Dus voer twee aparte mysqli_query() uit met je INSERT.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (mysqli_query($conn, $sql ,$sql1)) {

is dit is dus onzin. Leuk bedacht, maar gaat niet werken.
Bij twijfel: Check php.net/{functienaam} en bekijk de mogelijkheden en syntax.
Gewijzigd op 29/09/2019 17:33:39 door - Ariën -
 
Pascal klienstra

pascal klienstra

29/09/2019 17:37:09
Quote Anchor link
dus gewoon 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
$sql="INSERT INTO `account` (u_naam, avatar)
           VALUES ('{$_POST['naam']}','{$_POST['avatar']}')";
           }
            if (mysqli_query($conn, $sql)) {
            echo "query 1";
            } else {
              echo "niks gevonden";
}
$sql1="INSERT INTO `tickets` (u_naam, avatar)
           VALUES ('{$_POST['naam']}','{$_POST['avatar']}')";
           }
if (mysqli_query($conn, $sql1)) {
            echo "query 2";
            } else {
              echo "niks gevonden";
}
?>

 
Thomas van den Heuvel

Thomas van den Heuvel

29/09/2019 17:38:11
Quote Anchor link
Je hebt sowieso informatie van het resultaat van de eerste query nodig in de tweede query.

Het is dus zaak dat je de eerste query eerst uitvoert. Daarna zou je $sql prima kunnen hergebruiken, of je plaatst de query-tekst meteen in de aanroep, dan heb je niet eens een variabele nodig.

Maar ik heb ff terug zitten kijken in jouw historie.

Was je hier een aantal maanden geleden (interne link) niet ook al mee bezig?

Ik denk dat het voor de beeldvorming handig is als je hier gewoon even stap voor stap doorheen gaat en niet alles tegelijkertijd probeert te doen. Debug waarden, kijk of INSERTs slagen en of er iets in de database zit.

Begin eens met het uitvoeren van één INSERT-query. De documentatie is hier niet direct heel duidelijk over, maar met behulp van mysqli_insert_id() kun je het auto-increment id van het laatst geINSERTe record opvragen. Deze stop je vervolgens in je tweede query.

Dat mysql_insert_id() is de "vraag autoincrement id op van query #1"-stap uit het bovenstaande boodschappenlijstje. Als je deze gewoon stap voor stap implementeert ben je klaar (althans, met het invoer-deel). En zo zou je in zijn algemeenheid ook code moeten ontwikkelen. Bedenk eerst WAT je gaat doen, en vul het dan simpelweg een voor een in.
Gewijzigd op 29/09/2019 17:42:49 door Thomas van den Heuvel
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 17:39:26
Quote Anchor link
Ja, maar gebruik dan fatsoenlijke variabele-namen i.p.v. een nietszeggende $sql en $sql1.
En vergeet de mysqli_real_escape_string() niet!!!

Die "Niks gevonden" slaat ook nergens op, omdat een INSERT querie niks zoekt. Dat doet SELECT.
En dan alsnog controleer je in het geval van een SELECT met een mysqli_num_rows() of een record bestaat.
 
Thomas van den Heuvel

Thomas van den Heuvel

29/09/2019 17:44:39
Quote Anchor link
Je zou je ook kunnen afvragen waarom het aanmaken van een account en het aanmaken van een ticket op hetzelfde moment moet gebeuren.

Waar worden deze tickets uberhaupt voor gebruikt? Zijn dat activatielinks ofzo? En zoja, waarom zitten die in een aparte tabel?
 
Pascal klienstra

pascal klienstra

29/09/2019 17:49:47
Quote Anchor link
wou het eigenlijks zo hebben maar denk dat alles ook in 1 table kan
elk formulier moet een apparte code hebben
dus zo listing?=46fsjhksaadj

gebruikers info
naam: piet

ticket info
ticket naam hein

maak weer een nieuwe formulier aan

gebruikers info
naam: klaas

ticket info
ticket naam kaas

en krijg weer een nieuwe code link listing?=534rjfsjhfhs
zodat die toko die data afleest wat in de databse staat dan
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 17:52:15
Quote Anchor link
Gebruikers en tickets zijn twee verschillende entiteiten, dus dat zijn twee tabellen.
 
Rob Doemaarwat

Rob Doemaarwat

29/09/2019 19:19:34
Quote Anchor link
Merk op: rand() genereert waarden in een relatief klein bereik. Je maakt er met sha256 wel een lekkere lange "random" string van, maar die is dus niet zo random als dat ie eruit ziet. Je kunt dan beter in een loopje en met random_int() echt willekeurig karakters achter elkaar zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$chars
= 'abcdefghijklmnopqrstuvwxyz0123456789'; //evt. incl. hoofdletters indien case sensitive DB
$token = '';
for($i = 0; $i < 64; $i++) $token .= $chars[random_int(0,strlen($chars) - 1)];
print($token);
?>

Of voeg in ieder geval een beetje "zout" toe aan je hash functie:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$token
= hash('sha256',rand() . 'super geheim');
?>
 
Pascal klienstra

pascal klienstra

29/09/2019 22:55:51
Quote Anchor link
heb het nou als volgende
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
<?php
$chars
= 'abcdefghijklmnopqrstuvwxyz0123456789';
for($i = 0; $i < 64; $i++) $token .= $chars[random_int(0,strlen($chars) - 1)];
print($token);
$sql = "INSERT INTO account (u_naam, avatar)
VALUES ('. $_POST['naam'].', '. $_POST['avatar'].');"
;
$sql .= "INSERT INTO tickets (ticket_titel, token)
VALUES ('. $_POST['ticket_naam'].', '.$token.');"
;

if ($conn->multi_query($sql) === TRUE) {
    echo "succesvol toegevoegd";
}
else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}


$conn->close();
?>
 
- Ariën  -
Beheerder

- Ariën -

29/09/2019 23:34:01
Quote Anchor link
Escape je data die je in je query plaatst tegen SQL-injection.
 

Pagina: « vorige 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.