Php7 platform overgezet
Pagina: « vorige 1 2 3 4 5 6 volgende »
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:
Ongewenst.
Dit kun je ook combineren tot één PHP-blok:
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.
Toevoeging op 03/10/2018 22:45:38:
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.
Hieronder in code mijn oude uitlog-script.
Code (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<?php
session_start();
Header('Cache-Control: no-cache');
Header('Pragma: no-cache');
include 'library/config.php';
include 'library/opendb.php';
include 'library/puchfunctions.php';
//GEWIJZIGD mysql NAAR mysqli PER JANUARI 2016 IVM MIGRATIE PHP 5.6
$con = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
if (!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
mysqli_select_db($con,$dbname);
logpagina($sessie); //schrijf deze pagina-hit in big sister
function waarschuwing($msg) {
//geeft de waarschuwing $msg als windows alert
echo "<script language=\"javascript\">alert(\"".$msg."\");</script>";
}
$paginanaam=$_SERVER['PHP_SELF'];
$doorgeven=$_SERVER['QUERY_STRING'];
$query="update Sessions set member_ID='' where SessionID='".$sessie."'";
mysqli_query($con,$query) or die(mysqli_connect_error());
waarschuwing("U bent nu uitgelogd");
?>
<html>
<head>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-42779813-1', 'rspp.nl');
ga('send', 'pageview');
</script>
<script type="text/javascript" language="JavaScript">
function nieuw(){
location.replace("http://rspp.nl<?=$doorgeven;?>");
}
</script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-7771863-2");
pageTracker._trackPageview();
} catch(err) {}</script>
<meta name="description" content="Puchlinks van interne en externe sites. Steekwoorden, informatie en kennis op de site www.rspp.nl. Verwijzing naar andere Puch- en Tomos websites.">
<meta name="keywords" content="puchliefhebber, technische vraagbaak, puch, liefhebber, rubriek, specifiek, puchprobleem, behandelen, technische vraagbaak, specifiek puchprobleem, eigen import, toerritjes, 2008, puchwinkeltje, puchparts, rspp, ruud schuitemaker puch, denfeld zadeldek, puch skytrack, lucia, dedus achterlicht, 50, mv, schuitemaker">
<meta name="robots" content="noodp, noydir, index, follow">
<meta name="revisit-after" content="3 month">
<meta name="author" content="webspanning">
<title>Uitloggen</title>
<!-- cilinder, koelkappen, carterdelen -->
<link href="rspp.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body>
<div id="container">
<!--<h4>U wordt uitgelogd</strong>--><script type="text/javascript" language="JavaScript">nieuw(); </script>
<!--<br>
</h4>-->
<?php
include 'library/closedb.php';
?>
<!--eind container--></div>
</body>
</html>
session_start();
Header('Cache-Control: no-cache');
Header('Pragma: no-cache');
include 'library/config.php';
include 'library/opendb.php';
include 'library/puchfunctions.php';
//GEWIJZIGD mysql NAAR mysqli PER JANUARI 2016 IVM MIGRATIE PHP 5.6
$con = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
if (!$con)
{
die('Could not connect: ' . mysqli_connect_error());
}
mysqli_select_db($con,$dbname);
logpagina($sessie); //schrijf deze pagina-hit in big sister
function waarschuwing($msg) {
//geeft de waarschuwing $msg als windows alert
echo "<script language=\"javascript\">alert(\"".$msg."\");</script>";
}
$paginanaam=$_SERVER['PHP_SELF'];
$doorgeven=$_SERVER['QUERY_STRING'];
$query="update Sessions set member_ID='' where SessionID='".$sessie."'";
mysqli_query($con,$query) or die(mysqli_connect_error());
waarschuwing("U bent nu uitgelogd");
?>
<html>
<head>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-42779813-1', 'rspp.nl');
ga('send', 'pageview');
</script>
<script type="text/javascript" language="JavaScript">
function nieuw(){
location.replace("http://rspp.nl<?=$doorgeven;?>");
}
</script>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-7771863-2");
pageTracker._trackPageview();
} catch(err) {}</script>
<meta name="description" content="Puchlinks van interne en externe sites. Steekwoorden, informatie en kennis op de site www.rspp.nl. Verwijzing naar andere Puch- en Tomos websites.">
<meta name="keywords" content="puchliefhebber, technische vraagbaak, puch, liefhebber, rubriek, specifiek, puchprobleem, behandelen, technische vraagbaak, specifiek puchprobleem, eigen import, toerritjes, 2008, puchwinkeltje, puchparts, rspp, ruud schuitemaker puch, denfeld zadeldek, puch skytrack, lucia, dedus achterlicht, 50, mv, schuitemaker">
<meta name="robots" content="noodp, noydir, index, follow">
<meta name="revisit-after" content="3 month">
<meta name="author" content="webspanning">
<title>Uitloggen</title>
<!-- cilinder, koelkappen, carterdelen -->
<link href="rspp.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body>
<div id="container">
<!--<h4>U wordt uitgelogd</strong>--><script type="text/javascript" language="JavaScript">nieuw(); </script>
<!--<br>
</h4>-->
<?php
include 'library/closedb.php';
?>
<!--eind container--></div>
</body>
</html>
Toevoeging op 03/10/2018 22:46:30:
Hopelijk worden jullie niet gek van mijn gevraag :)
We zitten ook niet meer in de jaren 90, dus een alert is nogal... retro.
Waar komt $sessie vandaan en ben je ook nagegegaan of sessies ook goed geconfigureerd zijn nu je bent overgestapt naar https (als daar sprake van is)?
Hij heeft toen een statistiekpagina gebouwd die we bigsister hebben genoemd en daar staat alles vwb de orders.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?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;
?>
//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;
?>
SessionID is de de sleutel van de Sessions-tabel
$sessie vandaan? Niet de database kolomnaam of wat dan ook.
Een witte pagina duidt op fouten, check je logs.
Waar komt de PHP-variabele Een witte pagina duidt op fouten, check je logs.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
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
//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
Waarom niet als argument in je functie meegeven? Dan heb je tenminste een goed overzicht wat je in je functie binnen neemt.
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.
Ik vond de variabele $sessie in punchfunctie
Code (php)
1
2
3
4
5
6
2
3
4
5
6
// HIERONDER GEEN FUNKTIE. DE CODE HIERONDER WORDT ALTIJD UITGEVOERD (en functies alleen als je ze aanroept)
//zoek alvast nuttige info
$sessie = session_id();
$pathinfo = $_SERVER['PHP_SELF'];
$membernaam="";
$dezepagina=str_replace("/","",$pathinfo);
//zoek alvast nuttige info
$sessie = session_id();
$pathinfo = $_SERVER['PHP_SELF'];
$membernaam="";
$dezepagina=str_replace("/","",$pathinfo);
Je bedoeld onderstaande error logs welke je al hiervoor aangaf. Ik zal deze in alle pagina's helemaal bovenaan het script toevoegen.
ini_set('display_errors',1);
De webserver houdt als het goed is al het een en ander (stilzwijgend) bij, in een directory genaamd /logs of equivalent boven de webdirectory. Zowel bezoek (doorgaans in access.log) als foutmeldingen (doorgaans in error.log) worden daar als het goed is geregistreerd.
Je had het eerder over, dat het verstandig is om htmlspecialchars te gebruiken voor b.v. $_POST. Hoe zet ik dat neer in onderstaand statement? Of gebruik je htmlspecialchars alleen na een echo en voor $_post?
Trouwens, waarom zou je een password door htmlspecialchars halen? Die echo je sowieso niet, of je wilt graag een bijzonder security-lek inkoppen.
Passwords moet je met Bcrypt opslaan, met password_hash() en daarna controleren met password_verify()
Maarre, heeft dit nog met de overgang naar PHP7 te maken? :-P
Gewijzigd op 07/10/2018 00:03:00 door - Ariën -
Een wachtwoord dien je versleuteld op te slaan, dus die komt nooit meer als platte tekst terug omdat het originele wachtwoord nergens (in die vorm) opgeslagen zou mogen zijn.
Er is weer een heleboel mis met mijn website. Voordat ik in mijndomein het platform omzet van php 5.6 naar php7.1 heb ik alle webpagina’s gewijzigd:
http/rspp.nl/ enz > https:/rspp.nl/enz
<? > <?php
<?= > <?php echo enz
Problemen in order.php
Wanneer ik het @-teken verwijder in order.php en deze upload in sftp, dan krijg ik foutmeldingen in order.php pagina en deze verwijzen naar onderstaande lijnen. Er wordt niets berekend. Wanneer ik de @-tekens terugzet dan wel weer en komt de bestelling in de mailbox [email protected]
@-TEKEN (onderdrukking) in order.php voor :
Lijn 60: if (strlen(trim(@$_POST['alverzonden']))>1) {$doen=0;}
Lijn 83: if (@$_POST['verzend']) {
Lijn 109: @$remote_addr."','".$password1."')";
Lijn 152: @$totaalprijs=$totaalprijs+($prijs*(int)$aantal[$i]);
Lijn 153: @$totaalaantal=$totaalaantal+(int)$aantal[$i];
Lijn 168: $totaalbericht.='<td>'.@$totaalaantal.'
Lijn 169: $totaalbericht.='<td>'.maakeuros(@$totaalprijs).
Probleem met uitlog.php en mijnorder.php - kan niet uitloggen
Met de knop OK uit bedankt.php kom je weer in index.php, dan zie je links boven dat je bent ingelogd en links onder in het menu kun je uitloggen en mijnorder bekijken.
Bij mijnorder.php staat dan een lege order 0,00. Wanneer ik op de knop uitloggen klik, kom ik b.v. op de homepage terecht met een wit scherm. Wanneer ik opnieuw de url rspp.nl site opvraag staat er soms nog mijn welkomsnaam links bovenaan en onderaan het menu nog de knop uitloggen.
Probleem in winkelwagen.php
Wanneer je in categorie frame, motor of wiel een artikel invoert b.v. 5 en je wijzigt het artikel in b.v. 3 in winkelwagen.php, dan wordt er niets berekend 0,00 en ook geen artikelfoto meer.
Artikel wijzigen in winkelwagen.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<select name="invoer<?php echo $i ?>" id="invoer<?php echo $i ?>" onChange="document.forms['guestform'].submit();">
<?php
for ($q=0; $q < 10; $q++) {
// wat is het aantal wat geselecteerd zou moeten zijn voor item $i > $i=0?
$selectedValue = isset($aantal[$i]) ? $aantal[$i] : 0;
// dit is de huidige optie
$selected = ($selectedValue == $q ? ' selected="selected"' : '');
// ingeval het aantal gelijk is aan 0 willen we " " afdrukken in plaats van het aantal
$label = ($q == 0 ? ' ' : $q);
?>
<option value="<?php echo $q ?>"<?php echo $selected ?>><?php echo $label ?></option>
<?php
}
?>
</select>
<?php
for ($q=0; $q < 10; $q++) {
// wat is het aantal wat geselecteerd zou moeten zijn voor item $i > $i=0?
$selectedValue = isset($aantal[$i]) ? $aantal[$i] : 0;
// dit is de huidige optie
$selected = ($selectedValue == $q ? ' selected="selected"' : '');
// ingeval het aantal gelijk is aan 0 willen we " " afdrukken in plaats van het aantal
$label = ($q == 0 ? ' ' : $q);
?>
<option value="<?php echo $q ?>"<?php echo $selected ?>><?php echo $label ?></option>
<?php
}
?>
</select>
Artikelfoto in winkelwagen.php
Code (php)
1
2
2
$plaatje='<img src="https://rspp.nl/afbeeldingen/winkelfotos/'.$thumb.'">';
if ($thumb=='') {$plaatje='geen foto beschikbaar';};
if ($thumb=='') {$plaatje='geen foto beschikbaar';};
Is het mogelijk dat iemand mij hierbij helpt? Zou ik ooit mijn website weer goed draaiende krijgen:) ?
Groet, Margot
Gewijzigd op 14/10/2018 00:04:30 door - Ariën -
Wat mij betreft mag je hier best vragen blijven stellen, maar op deze manier gaat het omzetten (of meer een fatsoenering van code die lang op zich heeft laten wachten) wel erg lang duren want elk probleem wat je aanboort zal in een soort van schaakspelvorm behandeld moeten worden. Het zou veel handiger zijn als iemand hier direct "hands on" aan werkt.
Misschien is het ook handig dat je een soort van testomgeving inricht (hetzij op een lokaal opgezet webservertje, hetzij online) die representatief is voor de live omgeving zodat je daar eerst de wijzigingen door kunt voeren en testen. Ontwikkelen op een live omgeving is meestal niet zo handig, vooral als dit een (redelijk) centraal deel uitmaakt van de broodwinning.
Ook zou ik je aanraden om een soort van versiebeheer toe te passen op code, zodat je wijzigingen beter bij kunt houden en je een betere garantie hebt dat er straks niet tig varianten van eenzelfde codebestand rondzwerven. Of je moet een soort van stramien hebben die hier zorg voor draagt (bijvoorbeeld door eerst altijd bestanden te downloaden voordat je deze wijzigt en weer upload ofzo). Dit laatste is mogelijk minder complex, maar bewerkelijker.
Een @ kan zijn nut hebben, maar wordt vaak misbruikt om fout(meldig)en te onderdrukken. Hiermee veeg je in dit geval potentiële problemen onder het tapijt.
Het feit dat getracht wordt foutmeldingen op $_POST variabelen te onderdrukken vertelt mij dat er niet echt een scheiding is (in code) tussen de weergave van het formulier en de afhandeling na verzending hiervan. Dit is vrijwel nooit handig en resulteert vaak in een onoverzichtelijke brei (spaghetti code) met een of meer spagaten door middel van if-else statements om te bepalen wat er moet gebeuren (weergeven formulier, of toch verwerking hiervan?). Het is vele malen handiger om deze verschillende acties (beter) te compartimenteren zodat deze acties ook in afzondering behandeld (en mogelijk belangrijker: gedebugged) kunnen worden.
Dit zou een ideale oplossing zijn, en ik begrijp dat je eerst alles weer op de rails wilt krijgen maar het is wel iets om over na te denken: je kunt alles wel oppoetsen maar als de onderliggende programmastructuur/architectuur niet echt je dat is dan laat je de deur toch een beetje half open staan voor (al dan niet toekomstige) issues.
Ook maakt het ontbreken van een soort van algehele structuur het oplossen van dingen die niet naar behoren werken complexer omdat je bij elk issue het hele systeem in beschouwing moet nemen, in plaats van een enkel, en losstaand, onderdeel. Nu is de applicatie een beetje een baksteen.
Gewijzigd op 14/10/2018 14:43:56 door Thomas van den Heuvel
Thomas van den Heuvel op 14/10/2018 14:39:27:
Ook zou ik je aanraden om een soort van versiebeheer toe te passen op code, zodat je wijzigingen beter bij kunt houden en je een betere garantie hebt dat er straks niet tig varianten van eenzelfde codebestand rondzwerven. Of je moet een soort van stramien hebben die hier zorg voor draagt (bijvoorbeeld door eerst altijd bestanden te downloaden voordat je deze wijzigt en weer upload ofzo). Dit laatste is mogelijk minder complex, maar bewerkelijker.
Ook zou ik je aanraden om een soort van versiebeheer toe te passen op code, zodat je wijzigingen beter bij kunt houden en je een betere garantie hebt dat er straks niet tig varianten van eenzelfde codebestand rondzwerven. Of je moet een soort van stramien hebben die hier zorg voor draagt (bijvoorbeeld door eerst altijd bestanden te downloaden voordat je deze wijzigt en weer upload ofzo). Dit laatste is mogelijk minder complex, maar bewerkelijker.
En versiebeheer-systeem is wel handig, maar het opzetten ervan vergt ook een flinke 'know-how' en een goed model hoe je het project uitrolt naar de live omgeving. Ik denk dat een goed stramien met downloaden, uploaden en een gelijkmatige LAMP/WAMP/MAMP testomgeving voor een beginner de beste keuze is.
Ikzelf heb zelfs een aparte domeinnaam geregistreerd voor testdoeleinden. Want ik ontwikkel op Windows en draai live op Linux en test het op die manier ook daar op uit.
Daar hoef je (meestal) niet perse een aparte domeinnaam voor te registreren. Als het gewoon een simpele website is, zonder callbacks vanaf anders servers of iets dergelijks, dan kun je als ServerName (in je Apache config) gewoon een "fantasie domeinnaam" aanmaken en die vervolgens aan je Windows "hosts" bestand toevoegen.