Hallo PHPHulp,

Ik maak gebruik van gratis hosting die binnenkort php 5.4 niet meer ondersteund en overgaat naar 7.0 (je kunt nog wel kiezen uit 5.6) Maar mijn vraag is als ik 7.0 aanzet dan zie ik allemaal errors met mysql en meer. Aangezien dit een lange topic wordt aangezien er meerdere delen van een script aan bot komt.

1ste error. Toevoeging:
Error 1:
Mijn eerste error is

Fatal error: Uncaught Error: 
Call to undefined function mysql_connect() in /home/prive/public_html/members_area/config.php:12
 Stack trace: #0 /home/prive/public_html/members_area/index.php(2):
 include() #1 {main} thrown in /home/prive/public_html/members_area/config.php on line 12

Dit is mijn source: (config.php)

mysql_connect('localhost', 'gebruikersnaam', 'wachtwoord');
mysql_select_db('database');

Ik denk zelf dat ik van 2 rijen naar 1 moet gaan zoiets als dit:

mysqli_connect('localhost', 'gebruikersnaam', 'wachtwoord', 'database');
De standaard MySQL driver (dit omvat alle mysql_* functies) bestaat niet meer in PHP 7.0. Je zult moeten overstappen naar MySQLi of PDO. Dit wordt ook hoog tijd, want dit wordt al circa ~10 jaar aanbevolen.
Dus dit is goed?:

mysqli_connect('localhost', 'gebruikersnaam', 'wachtwoord', 'database');
@Tim Wolf: Ja, maar de voorkeur gaat meestal naar de OO MySQLi.
Maar kwa verschil van resultaat zal het niet uitmaken.
Tim Wolf op 19/02/2016 21:53:23

Dus dit is goed?:

mysqli_connect('localhost', 'gebruikersnaam', 'wachtwoord', 'database');


Ja, maar zeker niet de enige stap. Alle functies moet je herschrijven naar mysqli. Vaak gaat dit gepaard met een extra argument die naar je connectie verwijst.

Ikzelf raad de MySQLi-OO variant aan.
hmmm hmmm OOP ja. Dit staat overigens voor Object Oriented Programming. Maarrrrr als de hele PHP code Procedural geschreven is dan is dit ook een beetje een vlag op een str*ntschuit :-)

Indien Tim aardige ervaring heeft opgebouwd met Procedural code en geen ervaring heeft met OOP dan zou ik zeker de Procedural manier aanraden.
Mijn hele CMS was nog procedureel geschreven, maar een half jaartje geleden zag ik in dat alles eens maar MySQLi-OO moet gaan, en ben ik alles aan het verbouwen naar OO. ;-)

Hoop werk, maar foutafhandeling kan je op deze manier meteen integreren in je $db->query("......");
Inderdaad Ariën.
Maar nu heb alles van mysql connect naar mysqli connect gezet. Werkt goed maar nu kom ik bij ht volgende:

mysql_real_escape_string(stripslashes($_POST['username']));

en

mysql_real_escape_string($_POST['username']);

en

$dn = mysqli_fetch_array($req);

Als ik daar mysqli_real_escape_string van maak geeft hij de eerste error aan:
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given
hetzelfde met:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in
Je zet je mysqli_connect in een variabele
bv:

<?PHP 
$link = mysqli_connect("localhost", "gebruiker", "wachtwoord", "database"); 
?>



je mysqli_real_escape_string wordt dan:


<?PHP
mysqli_real_escape_string($link, stripslashes($_POST['username']));
?>


Zie: http://php.net/manual/en/mysqli.real-escape-string.php
Dat zei ik dus ;-)


Ja, maar zeker niet de enige stap. Alle functies moet je herschrijven naar mysqli. Vaak gaat dit gepaard met een extra argument die naar je connectie verwijst.
Neeeeeeee....
Het eerste stukje klopt, met de variabele waarin je de connectie link maakt.
Maar die stripslashes moet er uit. Je escaped, dat wil zeggen dat er (onzichtbare)slashes worden toegevoegd.
Dat is om te escapen op kwaadwillende karakters. Vervolgens ga je die om zeep helpen met stripslashes dus dat moet eruit.

<?php
mysqli_real_escape_string($link, $_POST['username']);
?> 


EDIT nog een betere uitleg:
Een string die je door _escape_string() haalt ziet er zo uit:

"Ik heb een nieuwe fiets.\n En bart\'s fiets is al 20 jaar oud."

als je stripslashes gebruikt dan haal je die \ weg en dan heb je het zelfde als dat je geen _escape_string() gebruikt.
Dus:

"Ik heb een nieuwe fiets. En bart's fiets is al 20 jaar oud."

En dan is ie lek, en gevoelig op een sql injection. want dan kan je na de ' dus iets erbij zetten. Daarom geen stripslahes..

Reageren