Geen mysql db verbinding code werkt niet

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Mortalboy[NL]
  • Registratie: Oktober 2011
  • Laatst online: 16-07-2021
Mensen,

Ik ben bezig met een leuk sideproject, en heb al tijdje een encrypted register/login systeem klaar liggen. Deze ben ik nu aan het implementeren, maar ik krijg opeens helemaal niks te zien als er geen verbinding kan worden gemaakt met de database.

Ik heb eerst getest of alles goed werkt als er een database connectie is <- werkt.
Als ik in de connect file wat aanpas zodat ik geen verbinding kan maken, zie ik een blank page na het registreren.

De manier waarop de data wordt opgeslagen wordt nog veranderd, ben eerst nog aan het testen.

Zie hier de code waar het om gaat:

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
<section id="main" class="wrapper">
                <div class="container">
                    <?php
                    if(isset($_POST['submit'])){
                        
                        require('db.php');
                        
                        if(!$conn){
                            ?>
                                <header class="major">
                                <h2><?php die("Error!"); ?></h2>
                                <p>We have lost connection to our database. Please contact us!</p>
                            </header>
                            <?php
                        }
                        
                        if($conn){
                            
                        $username = $_POST['user'];
                        $password = $_POST['pass'];
                        $email = $_POST['email'];
                        $birthday = $_POST['birthday'];
                        $credits = 10;
                        
                        $hashFormat = "$2y$10$";
                        $salt = "hjsahznwchysvlvbavmu22";
                        $hashF_and_salt = $hashFormat . $salt;
                        $password = crypt($password, $hashF_and_salt);
                            
                            $stmt = $conn->prepare("INSERT INTO users VALUES (NULL, ?, ?, ?, ?, ?, 0, 1)");
                            $stmt->bind_param("ssssi", $username, $password, $email, $birthday, $credits);
                            $stmt->execute();
                            $stmt->close();
                            ?>
                            <header class="major">
                                <h2>Welcome, <?php echo $username . "!"; ?></h2>
                                <p>Your account is created.<br>Take this: <b>10 credits</b> to start with!</p>
                                <p>
                                    <ul class="actions">
                                        <center><a href="#" class="button">Login</a></center>
                                    </ul>
                                </p>
                            </header>
                            <?php
                        }
                    }
                    ?>
                </div>
            </section>


Iemand?

[ Voor 3% gewijzigd door Mortalboy[NL] op 07-06-2017 11:40 ]


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Zet je error reporting eens aan, dan zie je geen blanco pagina maar een zinnige melding.

Acties:
  • 0 Henk 'm!

  • emnich
  • Registratie: November 2012
  • Niet online

emnich

kom je hier vaker?

Haal die 'die' er eens uit en zet die achter de gewenste output.

Heb je overigens ook in je bron gekeken of die helemaal leeg is?

Waarom gebruik je niet gewoon de standaard password_* functies?

[ Voor 23% gewijzigd door emnich op 07-06-2017 11:45 ]


Acties:
  • 0 Henk 'm!

  • mcDavid
  • Registratie: April 2008
  • Laatst online: 02-10 08:45
je hebt waarschijnlijk gewoon display_errors uit staan?

algemene opmerkingen:
- Gebruik alsjeblieft geen hardcoded salt, zonde om crypt() zo te verkreupelen.
- kijk eens naar een templating engine. Of zorg in ieder geval dat je je code en HTML gescheiden houdt in verschillende bestanden voor de leesbaarheid.

Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 18:27

Damic

Tijd voor Jasmijn thee

Wat Radiant zegt en wat staat er in db.php?

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • Mortalboy[NL]
  • Registratie: Oktober 2011
  • Laatst online: 16-07-2021
emnich schreef op woensdag 7 juni 2017 @ 11:43:
Haal die 'die' er eens uit en zet die achter de gewenste output.

Heb je overigens ook in je bron gekeken of die helemaal leeg is?
Bron is leeg inderdaad, zal zo eens kijken met error reporting.

Acties:
  • 0 Henk 'm!

  • Mortalboy[NL]
  • Registratie: Oktober 2011
  • Laatst online: 16-07-2021
Damic schreef op woensdag 7 juni 2017 @ 11:44:
Wat Radiant zegt en wat staat er in db.php?
code:
1
2
3
4
5
6
7
8
9
10
<?php

$sname = "localhosttttt";
$suser = "xxx";
$spass = "xxx";
$sdb = "xxx";

$conn = new mysqli($sname, $suser, $spass, $sdb);

?>


localhost had ik veranderd naar localhosttttt om de db fout te testen.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Gebruik ook http://php.net/password_hash ipv crypt()

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Laatst online: 18:27

Damic

Tijd voor Jasmijn thee

je zou in je db.php al kunnen testen of je een connectie hebt.

Maar ik zien nergens een msqli_close($conn) en is het trouwens niet http://php.net/manual/en/function.mysqli-connect.php nope mag in OO ook zo

Wel leuke voorbeeld code ;) http://php.net/manual/en/mysqli.construct.php

[ Voor 22% gewijzigd door Damic op 07-06-2017 11:51 ]

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • Mortalboy[NL]
  • Registratie: Oktober 2011
  • Laatst online: 16-07-2021
Damic schreef op woensdag 7 juni 2017 @ 11:49:
je zou in je db.php al kunnen testen of je een connectie hebt.

Maar ik zien nergens een msqli_close($conn) en is het trouwens niet http://php.net/manual/en/function.mysqli-connect.php
Ja als ik direct in db.php test heb ik bij goede db gegevens een verbinding.
Ik gaf ook al aan, als ik goede gegevens in db.php zet gaat het registreren van een gebruiker prima.

[ Voor 12% gewijzigd door Mortalboy[NL] op 07-06-2017 11:51 ]


Acties:
  • 0 Henk 'm!

  • _trickster_
  • Registratie: Mei 2005
  • Laatst online: 08-10 17:41
Als eerste zou ik zeggen zet Error reporting op z'n hoogste aan.
En zet ook eens iets van een Echo of een print in db.php,
Dan zou je kunnen kijken of het includen van db.php wel goed gaat.

Acties:
  • +2 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 17:05

Rannasha

Does not compute.

Als de connectie met de DB faalt, dan levert de constructor van mysqli alsnog een object terug. Dus $conn heeft altijd een waarde en de door jouw gemaakte error-melding (in het "if (!$conn)" stukje) zal nooit worden weergegeven. Omdat $conn een waarde heeft, wordt er vervolgens geprobeerd om een query op de DB af te schieten, wat niet werkt omdat er geen verbinding is. Maar die error vang je niet af. En gezien je waarschijnlijk error-reporting uit hebt staan, krijg je niets te zien.

In plaats van te controleren of $conn bestaat, zou je kunnen kijken naar de waarde van $conn->connect_error

Zie ook: http://php.net/manual/en/mysqli.construct.php

[ Voor 3% gewijzigd door Rannasha op 07-06-2017 11:57 ]

|| Vierkant voor Wiskunde ||


Acties:
  • 0 Henk 'm!

  • smesjz
  • Registratie: Juli 2002
  • Niet online
En op php.net vind je dit stukje nog voor foutafhandeling:

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}

Acties:
  • 0 Henk 'm!

  • Mortalboy[NL]
  • Registratie: Oktober 2011
  • Laatst online: 16-07-2021
Rannasha schreef op woensdag 7 juni 2017 @ 11:53:
Als de connectie met de DB faalt, dan levert de constructor van mysqli alsnog een object terug. Dus $conn heeft altijd een waarde en de door jouw gemaakte error-melding (in het "if (!$conn)" stukje) zal nooit worden weergegeven. Omdat $conn een waarde heeft, wordt er vervolgens geprobeerd om een query op de DB af te schieten, wat niet werkt omdat er geen verbinding is. Maar die error vang je niet af. En gezien je waarschijnlijk error-reporting uit hebt staan, krijg je niets te zien.

In plaats van te controleren of $conn bestaat, zou je kunnen kijken naar de waarde van $conn->connect_error

Zie ook: http://php.net/manual/en/mysqli.construct.php
Thanks!

code:
1
Connect Error (2002) php_network_getaddresses: gethostbyname failed. errno=0

Acties:
  • 0 Henk 'm!

  • Mortalboy[NL]
  • Registratie: Oktober 2011
  • Laatst online: 16-07-2021
Het is gelukt om een goede foutmelding te krijgen. Bedankt voor de tips tussendoor. Ben eerst bezig om het een en ander te programmeren. In een latere fase zal ik het een en ander nog gaan optimaliseren.
Pagina: 1