Script werkt niet meer na upgrade van PHP-versie (5.6 naar 7.x)
Door
Tim Hoogland
op 14-02-2018 14:58
gewijzigd op 14-02-2018 15:19
3.450 views
Ik heb een programma gemaakt waarmee je tarotkaarten kan trekken.
Omdat er technisch onderweg nog wel eens iets mis kan gaan, sla ik de kaarten die getrokken zijn op in een my_sql database. Dit werkt prima onder PHP 5.6, maar onder versie 7.1 niet meer. Nu ben ik absoluut geen kenner van PHP, waar kan dit aan liggen? De instellingen zijn bijgesloten.
Ik hoor het graag.
Ik gok dat je de oude mysql_***() functies gebruikt, en die werken niet meer in PHP 7. Daarom raad ik aam om de mysqli_***() functies of PDO te gebruiken.
Verder is "werkt niet" ook niet duidelijk. Want wat gebeurt er?
Inderdaad gebruikte ik de oude mysql functies. Werkt niet, wil in dit verband zeggen dat er niets wordt weggeschreven in de database. Mijn code hiervoor is:
Ook loont het de moeite om een test(- of ontwikkel)omgeving in te richten die representatief is voor de nieuwe live omgeving. Daar kun je dan ook eens proberen om het melden + weergeven van fouten aan te zetten.
Dat gezegd hebbende, mysqli_query() heeft een verplichte eerste parameter waarin je de database-connectie moet meegeven.
Terug naar de tekentafel?
Verder kan het waarschijnlijk ook geen kwaad om je eens te verdiepen in wat security-gerelateerde zaken, want bovenstaande code stemt mij niet bepaald hoopvol.
In veel gevallen is het niet enkel alleen een 'i' in de de functie erbij te zetten.
Zo zul je eerst je mysqli_connect() moeten aanpassen. Deze heeft ook een vierde waarde voor je databasenaam. Dan hoef je mysqli_select_db() niet te gebruiken.
Verder kan je de eventuele fouten die in de connectie optreden ophalen met mysqli_connect_errno().
Fouten in queries kan je ophalen met mysqli_error($conn), waarbij $conn verwijst naar de variabele van je connectie (die nu nog geen variabele heeft).
Tevens is het zeer aan te bevelen om MySQL de instructies te geven welke characterset je gebruikt
<?php
$conn = mysqli_connect($dbhost1, $dbuser1, $dbpass1, $dbname1);
mysqli_set_charset($conn, "utf8");
// Check connection
if (mysqli_connect_errno())
{
echo "Verbinding met MySQL mislukt: " . mysqli_connect_error();
} else {
// alles is gelukt, voer hier de rest uit.
}
?>
Met dit script hierboven ben je al een stap in de goede richting.
Verder is er nog op te merken dat je nu erg vatbaar bent voor hacking d.m.v. SQL-injection, omdat mysqli_real_escape_string() ontbreekt op je GET-waardes. Deze functie hoor je toe te passen op waardes die de gebruiker kan manipuleren zoals POST, GET, COOKIE en mogelijk ook ENV.
Verder is de opzet van je database ook niet erg optimaal ==> Normalisatie
Ik ben geen kenner van php maar kan door omstandigheden de hulp van mijn dochter nu niet inroepen. Het gaat erom, dat een script op een pagina van mijn website niet meer werkt als ik mijn website upgrade van php 5.6 naar 7.1
Het heeft volgens mij alles te maken met het oproepen van de database, aangezien het script gegevens uit deze database presenteert op een pagina in mijn website. Wie kan mij helpen op bepaalde codes uit dit script om te zetten en ook te zorgen, dat de database niet gehackt kan worden?
De website zelf werkt prima onder php 7.1 maar alleen daar waar ik connectie maak met de database gaat het mis.