Mensen,

Ik heb de afgelopen tijd heel veel vragen gesteld maar ik kom tot de ontdekking het niet goed te begrijpen. Daarom back to basic. Als mensen mij willen helpen zou ik het leuk vinden anders houd het op.

Ik begin wel met een database.

Ik heb een connectie gemaakt. Daar heb ik mijn eerste vraag dan ook over:

Ik zal de code later hieronder plaatsen. De vraag is waarom krijg ik geen echo als de connectie mislukt en wel als deze lukt?


<?php
$servername = "host";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli("host","username","password","naam");
// Check connection
if (!$conn) {
    echo"connectie mislukt";
}else{
echo "Connected successfully";
}
?>

 

Je controleert alleen of $conn niet bestaat, en dat heeft geen weet van de connectie met je database.

Als je wilt weten of de connectie gelukt is, kijk dan naar het connect_errno() method.
<?php
if ($con->connect_errno) {
echo "Connectie mislukt: (" . $conn->connect_errno . ") " . $conn->connect_error;
}
?>
Probeer om te beginnen het verschil te begrijpen tussen een waarde en een variabele...
Een waarde is toch de inhoud van de variabelen?

Jullie hebben gelijk dat ik alleen het bestaan test. Nu heb ik bewust een fout gemaakt om te kijken of het werkt en krijg ik deze preek op mijn scherm:


Warning: mysqli::mysqli(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /public/sites/mijnwebsite/project/database.php on line 7

Warning: mysqli::mysqli(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: Name or service not known in /public/sites/mijnwebsite/project/database.php on line 7
Connectie mislukt: (2002) php_network_getaddresses: getaddrinfo failed: Name or service not known

Ik test op een eigen domein. Het is dus daadwerkelijk live.
Als het 'live' is kan je PHP-errors beter uitzetten. Het verklapt voldoende voor hackers en anders gespuis, en met deze "Chinese" taal maak je mensen bang ("Help, mijn browser/$browsernaam) is stuk"). Ja, die mensen heb ik wel eens gezien. ;-)

De beste oplossing is om een mooie error-handler in PHP te maken, waarin je de bezoekers geruststelt met een vriendelijke foutmelding, waarbij je met error_log ervoor zorgt dat de foutmelding netjes in een bestand wordt gelogd.
Oke, goede tip. Dan moet ik toch echt eens even zoeken hoe dat te implementeren.
Heel belangrijk is ook om te begrijpen hoe een functie/method werkt. Veel starters zijn zich niet bewust dat ze een reeks aan in php ingebouwde functies gebruiken en dat die functies iets terug kunnen geven.

Jij gebruikt reeds de OOP versie van Mysqli. Is het niet handiger om de Procedural mysqli_ functies te gebruiken?

Het maken van een connectie met de database ziet er dan zo uit:
<?php
$conn = mysqli_connect('localhost', 'username', 'password', 'database');

if (!$conn) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
?>

Als je op php.net kijkt dan zie je bij de mysqli functies over het algemeen twee voorbeelden staan: "Object oriented style" en "Procedural style". Hou iig één van de twee aan.
De controle die @Frank hierboven doet levert mogelijk niet het gewenste resultaat op, omdat mysqli_connect() altijd een object retourneert, zelfs als de connectie mislukt. Dit object evalueert dus nooit tot false en daarom is !$conn dus ook geen goede check voor het slagen of mislukken van de verbinding. Dit is de afgelopen tijd al minstens 2 keer aangehaald trouwens :p.

Gebruik de functies die php.net voorstelt: connect_error().
Ik laat de error afhandeling nog even varen. Eerst wil ik iets anders leren :) Ik maak een scriptje waarmee ik gegevens uit een formulier in een database wil proppen. Alleen heb ik nooit goed begrepen waar ik de mist in ga met de verwerking.

Kan iemand mij dat uitleggen?

[code]
<?php
include 'database.php';
?>


<?php

if(isset ($_POST['verzenden'])) {
echo "Formulier niet verzonden";
}else {
$voornaam = addslashes($_POST['voornaam']);
$tussenvoegsel = addslashes($_POST['tussenvoegsel']);
$achternaam = addslashes($_POST['achternaam']);

$sql = "INSERT INTO gebruikers (voornaam, tussenvoegsel, achternaam)
VALUES ('$voornaam', '$tussenvoegsel', '$achternaam')";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>registreren</title>
</head>
<body>
<form action="registreren.php" method="post">
<input type="text" name="voornaam" value="voornaam"> <br>
<input type="text" name="tussenvoegsel" value="tussenvoegsel"> <br>
<input type="text" name="achternaam" value="achternaam"><br>
<input type="submit" name="verzenden" value="verzenden">
</form>
<?php }; ?>
</body>
</html>

[/code
1. Je controleert nergens of het formulier gesubmit is.
2. Addslashes is GEEN query beveiliging, gebruik de escaping functie die bij je database hoort.
3. Je voert nergens een query uit.
Welke tutorial volg je? Want je lijkt steeds wat stappen te missen.

Reageren