Ik ben klant van Mijndomein. Mijndomein heeft een aantal dagen geleden mijn website rspp.nl overgezet naar een nieuw platform php vs 7.1. Mijn phpscripts ondersteunen dat nog niet. Er is een mogelijkheid bij Mijndomein om het platform terug te zetten naar vs 5.6, wat ik ook heb gedaan. Begin 2019 komt PHP 5.6 te vervallen.
Wat ik nu niet begrijp is dat ik ineens die foutmelding(en) krijg ná het vernieuwen van het platform. Het script is sinds twee jaar niet gewijzigd en werkte uitstekend.
Sinds het nieuwe platform er is, stonden er drie fouten op mijn website die inmiddels zijn opgelost. Daarna kreeg stond er weer eentje welke ik niet kan oplossen.
Een onversleuteld wachtwoord lijkt mij sowieso geen goede zaak. Ik gebruik zelf altijd dubbele quotes in HTML. In zekere zin maakt het (blijkbaar) niet uit wat je gebruikt. Het belangrijkste is dat je hier zelf lijn in aanbrengt.
Daarnaast is het zaak dat je de DATA die uit oogpunt van HTML mogelijk speciale karakters kan bevatten onschadelijk maakt. Je komt bijvoorbeeld in de problemen als $inlogpassword een enkele quote bevat, of bijvoorbeeld een sluitingshaak ( > ). Dit doe je met escaping-functies zoals htmlspecialchars().
Ook lijken mij mengvormen als:
<?php echo $paginanaam;?>?<?=$doorgeven;?>
Ongewenst.
Dit kun je ook combineren tot één PHP-blok:
<?php echo $paginanaam.$doorgeven; ?>
De punt rijgt de twee stringwaarden aan elkaar.
Zorg gewoon dat alle dynamische content binnen PHP-blokken valt, en alle niet-dynamische content hier buiten valt. Er is geen enkele reden om statische lappen HTML te echo'en want je kunt een PHP-blok te allen tijde afsluiten en weer openen.
Ik ben die mengvorm aan het herstellen en zie dan telkens weer wat anders wat ik moet aanpassen. Ik heb nu weer alles gebackupd en teruggezet in sftp ivm met die mengvorm o.a. Ik ga alles weer nalopen op die html dubbele quotes.
[size=xsmall]Toevoeging op 03/10/2018 22:45:38:[/size]
Waar ik nu weer tegenaan loop is het volgende. Misschien hebben jullie een idee?
Na het verzenden van artikelen uit order.php wordt je direct ingelogd in mijnorder.php om deze te bekijken. Mijn echtgenoot krijgt dan een mailtje met betreffende artikelen, prijzen en afzender. Je kunt op iedere pagina weer uitloggen en dan kom je weer in een andere pagina. Maar dat gebeurt niet meer en ik weet niet waarom. Er verschijnt een wit scherm en het ip-adres is dan http://rspp.nl/uitlog.php?/order.php
Dit gebeurt ook wanneer ik alles in https://www.rspp.nl enz. heb gewijzigd.
Ik heb alle pagina's weer gebackupd om dit te opnieuw te testen, maar helaas kom ik niet meer in b.v. index.php. Kan iemand even meekijken naar mijn uitlogscript hieronder?
Er staat een ook stukje java in en ik heb ook al gekeken of dit nog wel actueel is en er window.location.replace van gemaakt, maar dat werkt ook niet. Ook tevergeefs heb ik er https:// enz. van gemaakt.
De college die de website heeft gebouwd destijds was een C++ programmeur en hij vond dat kennelijk leuk. Het was volgens mij voor hem toen ook een uitdaging :) Wij zijn ook niet de jongeste meer, haha.
Hij heeft toen een statistiekpagina gebouwd die we bigsister hebben genoemd en daar staat alles vwb de orders.
<?php
//ik wil hier een loop over alle orders
$query="select ID,SessionID,Datum, Tijd,remote_addr,pagina,browser,komtvan,IP from Sessions where remote_addr not in ('80.101.18.47') order by ID desc";
#where ID>165
$result = mysqli_query($con,$query) or die($query.' Error, query failed. ' . mysqli_connect_error());
while($row = mysqli_fetch_array($result)) {
list($ID,$SessionID,$Datum, $Tijd,$remote_addr,$pagina,$browser,$komtvan,$IP) = $row;
?>
ex-collega heeft een puchfunctie script met ongeveer 400 rijen geschreven waar alle variabele en functies instaan, waaronder ook $sessie
function leesnieuwepagina($categorie,$cat,$sessie) {
//deze functie vult het array $aantal[] met de bestellingen die eerder in de categorie besteld zijn in deze sessie
//invoer: $categorie, een string met de waarden 'frame', 'wiel', of 'motor'
//invoer: $cat, een karakter met de waarden 'F', 'W', of 'M'
//invoer: $sessie
global $aantal;
//lees de $schrijf
Maar dat is een functie-parameter, niet een variabele die geldig is in de globale scope. Een functieparameter is meestal een "placeholder" voor een andere variabele. Daarnaast is de scope (het geldigheidsgebied) van een functie-parameter het gedeelte tussen { accolades }, dus daarbuiten bestaat (deze) $sessie niet.
$sessie, de variabele op regel 28 van je uitlogscript zal dus ergens gedeclareerd moeten staan in de globale scope, dus ergens in:
- /library/config.php (of een vervolg-include)
- /library/opendb.php (of een vervolg-include)
- /library/puchfunctions.php (of een vervolg-include)
En anders is deze variabele gewoonweg niet gedeclareerd ("bestaat deze niet").
Ik zou je errorlogs raadplegen om te kijken wat er misgaat als je deze uitlogpagina aanroept.