Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[PHP]MYSQL database koppeling werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een webquiz te maken in PHP. Nu is het de bedoeling dat er een database gekoppeld wordt, waar de naam van de speler en de score naartoe wordt gestuurd. De koppeling is gelukt, maar er wordt niets naartoe verzonden, lijkt wel. De quiz bestaat uit 10 vragenpagina's, een index waar een session wordt gestart, gameover.php en highscore.php:
PHP:
1
2
3
4
5
6
7
session_start();

if (isset ($_GET['naam'])) {
    $naam = $_GET['naam'];
    $_SESSION['naam'] = $naam; //de variabele naam declareren
    $_SESSION['vraag'] = $vraag; //de variabele vraag declareren
}


Vervolgens wordt op iedere vragenpagina een tellertje aangemaakt en ieder juist antwoord wordt in de GET variabele gezet (altijd a, dus boven in de adresbalk bijv vraag3.php?antwoord=a). Indien fout gaat de quiz naar de game over pagina.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
session_start();
$_SESSION['vraag'] = 2; //dit is de vraag waar de speler is

$antwoord = $_GET['antwoord']; //de variabele antwoord

if($antwoord == "a") {
    echo "Dat is goed!"; //als het antwoord a is, is het goed en wordt dit op het scherm gezet

}
else {
    echo "<meta http-equiv=\"refresh\" content=\"0;URL=gameover.php\">"; //bij een fout antwoord wordt de speler meteen naar de gameover pagina doorgestuurd
}


Op de highscore pagina moeten de hoeveelheid punten (iedere vraag is 1 punt) en de naam naar de database toegezonden worden.
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
session_start();
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "highscore";

$conn = new mysqli($servername, $username, $password, $dbname); //connectie met de database maken

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error); //als de conectie niet lukt, krijg je de melding "connection failed"
} 

$sql = "INSERT INTO highscore (naam, score) 
VALUES ('naam', 'vraag')"; //plaats naam en vraag uit de session in de kolommen naam en score

if ($conn->query($sql) === TRUE) {
   /* echo "New record created successfully"; */ //dit komt op het scherm als alles gelukt is, dat is het uiteraard dus ik comment het omdat het niet op het scherm hoeft te verschijnen
} else {
    echo "Error: " . $sql . "<br>" . $conn->error; //als er geen nieuw record is gemaakt dan krijg je een foutmelding
}

$result = mysqli_query($conn,"SELECT * FROM highscore ORDER BY score ASC LIMIT 10"); 

        while($row = mysqli_fetch_array($result)) { 
        echo $row['naam'] . " " . $row['score'];    
        echo "<br>"; 
    }


$conn->close(); //sluiten van de mysql connectie


Nu is het zo dat als ik de quiz een keer speel, dat het dan zo is dat mijn naam en score NIET in de array staan die op de highscore pagina wordt gestuurd. Hoe zou ik dit kunnen oplossen? :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Staat regel 14 letterlijk zo in je code? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • DennusB
  • Registratie: Mei 2006
  • Niet online
code:
1
2
$sql = "INSERT INTO highscore (naam, score) 
VALUES ('naam', 'vraag')";


Je ziet hier geen vars... je pleurt gewoon 'naam' en 'vraag' in de 2 kolommen..

Owner of DBIT Consultancy | DJ BassBrewer


Verwijderd

Topicstarter
Ja ik denk dat daar het probleem zou kunnen zitten ja! Ik moet dus die vars uit de session variabele in de kolommen doen. Hoe zou ik dat voor elkaar kunnen krijgen? Ik ben niet zo geweldig met PHP, ben meer van het frond-end development.

  • DennusB
  • Registratie: Mei 2006
  • Niet online
Verwijderd schreef op dinsdag 13 januari 2015 @ 14:08:
Ja ik denk dat daar het probleem zou kunnen zitten ja! Ik moet dus die vars uit de session variabele in de kolommen doen. Hoe zou ik dat voor elkaar kunnen krijgen? Ik ben niet zo geweldig met PHP, ben meer van het frond-end development.
Wat dacht je van :
code:
1
2
$sql = "INSERT INTO highscore (naam, score) 
VALUES ($var1, $var2)";


Dit is ook echt wel op Google te vinden hoor..

Owner of DBIT Consultancy | DJ BassBrewer


Verwijderd

Ik zou de laatste query die je doet ook even checken zoals je daarboven doet, wellicht dat die een error geeft maar dat zie je nu dus niet.

Wat betreft de sessie ophalen dat doe je met de $_SESSION array, dus dit is weer $_SESSION['vraag'] etc. Let wel op dat je nu last hebt van SQL injection. Check google even hoe je dat kan fixen :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 13 januari 2015 @ 14:08:
Ja ik denk dat daar het probleem zou kunnen zitten ja! Ik moet dus die vars uit de session variabele in de kolommen doen. Hoe zou ik dat voor elkaar kunnen krijgen? Ik ben niet zo geweldig met PHP, ben meer van het frond-end development.
[google=php mysqli variables in query]

Kom op, een beetje eigen inzet mag wel hoor. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Nu heb ik een succesvolle koppeling en een nieuw record aangemaakt in de database. Alleen helaas nog geen gegevens in de database die op het scherm gezet worden :'(

  • Saven
  • Registratie: December 2006
  • Laatst online: 09:51

Saven

Administrator

Riekt een beetje naar een schoolopdracht?

  • pennywiser
  • Registratie: November 2002
  • Laatst online: 08:45
Wat is daar dan weer mis mee..

Verwijderd

Topicstarter
Dat is het inderdaad ;)

  • technorabilia
  • Registratie: November 2006
  • Laatst online: 20-11 14:20
Beter als je die zelf oplost?

👉🏻 Blog 👈🏻


Verwijderd

Topicstarter
Daar ben ik al 4 weken mee bezig, en ik heb het dus bijna voor elkaar, alleen dit laatste component loop ik dus vast mee...

  • RGAT
  • Registratie: Augustus 2011
  • Niet online
In ieder geval zou het een goed idee zijn een van de vele tutorials te lezen over mysql en php, daarin wordt het stap voor stap behandeld.

Overigens is dit ook geen goed idee:
session_start();

if (isset ($_GET['naam'])) {
$naam = $_GET['naam'];
$_SESSION['naam'] = $naam; //de variabele naam declareren
$_SESSION['vraag'] = $vraag; //de variabele vraag declareren
}

Als ik dan een leuke bui heb kan ik script.php?naam=Sinterklaas aanroepen enz. als ik een rotbui heb gooi ik er een MySQL command in, lees je dus ook voor de veiligheid even in over 'MySQL injection' en de basis om dat tegen te gaan voordat je al je data straks kwijt bent ;)

Om je MySQL wachtwoord nog maar even te negeren, en je accountnaam 'root' in je applicatie gebruiken is, ook voor testen, een recept voor rampen...

[ Voor 10% gewijzigd door RGAT op 13-01-2015 14:45 ]

Fixing things to the breaking point...


Verwijderd

Topicstarter
De opdracht blijft intern, voor school op de eigen server van school, ook was ons al aangegeven dat er voor dit vak niet op security enz werd gelet, dus dat is hiervoor niet zo'n gek groot probleem opzich. Vond het zelf ook al gek, maar het is geen vereiste voor de opdracht dus dat laat ik maar zo, om het niet verder gecompliceerd te maken :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

RGAT schreef op dinsdag 13 januari 2015 @ 14:43:
Overigens is dit ook geen goed idee:
Daar is niks mis mee als je gewoon prepared statements gebruikt voor je queries.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • RGAT
  • Registratie: Augustus 2011
  • Niet online
NMe schreef op dinsdag 13 januari 2015 @ 14:58:
[...]

Daar is niks mis mee als je gewoon prepared statements gebruikt voor je queries.
Dat klopt, maar ik zag (en verwacht) ze hier niet ;)

Fixing things to the breaking point...


  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
Verwijderd schreef op dinsdag 13 januari 2015 @ 14:53:
De opdracht blijft intern, voor school op de eigen server van school, ook was ons al aangegeven dat er voor dit vak niet op security enz werd gelet, dus dat is hiervoor niet zo'n gek groot probleem opzich. Vond het zelf ook al gek, maar het is geen vereiste voor de opdracht dus dat laat ik maar zo, om het niet verder gecompliceerd te maken :)
Dus wanneer de spoorbomen dicht gaan maar niemand jou vraagt om even te wachten op de aanstormende trein, kruip jij onder de spoorbomen door en loop je naar de overkant? Het lijkt me sterk....

Code schrijven die gevoelig is voor SQL injection, is niet handig. En dan druk ik het voorzichtig uit.

Komt nog bij dat het voorkomen van SQL injection wel zo kinderachtig eenvoudig is, dat dit gewoon jouw standaard zou moeten zijn. Net zoals het stoppen voor gesloten spoorbomen standaard zou moeten zijn.

Verwijderd

Topicstarter
Nogmaals, het is geen vereiste voor het vak en er wordt ook niet op gelet. In de toekomst wel, maar nu (nog) niet. Het is ook enkel een quiz op de interne server van de school. En dit geeft ook geen antwoord op mijn vraag, dit vak is een introductie op PHP, dus wat dat betreft heb ik nog geen standaard :)
Pagina: 1