website omzetten naar PHP8

Status
Niet open voor verdere reacties.

marcblom33

Nieuwe gebruiker
Lid geworden
20 sep 2023
Berichten
2
Beste mede forummers,

Ik heb jaren geleden een website gebouwd die gebouwd is in php6 en mysql. Nu ondersteunt mijn server (Synology) geen php 6 meer en is er over geüpgraded naar php8. Nu krijg ik allemaal foutmelding op mijn website. Ik ben er al enige tijd mee aan het stoeien, maar kom er niet meer uit, ben ook maar een amateur... ;)

Is er iemand op dit forum die bereid is mijn te helpen om te kijken waar de fout zit en hoe ik de website weer draaiend krijg?

De foutmeldingen zijn in onderstaande afbeelding genoemd:

Scherm­afbeelding 2023-09-20 om 13.37.10.png


Volgens mij betreft het aanvankelijk de code in dit bestand:
Bekijk bijlage linkcontainer.php.zip

Code:
<?php
// met deze 2 variabelen kun je het aantal kolommen en de kolombreedte wijzigen:
$aantalkolommen=3;
$kolombreedte="205px";


//db connectie
include('connectie.php');


//username halen uit url
$array = array('<', '>', '\\', '/', '=', '.blommetje.nl');
$request_url=$_SERVER['HTTP_HOST'];
$username=str_replace($array, "", $request_url);


// selecties maken
if ($username == "www") {
    $userid = 1;
} else {
    $sql = mysqli_query($conn, "SELECT id, gebrnaam FROM users WHERE gebrnaam ='$username'");
    while ($res = mysqli_fetch_assoc($sql)) {
        trigger_error(mysqli_error($conn));
    }


    if (mysqli_num_rows($sql) == 0) {
        header("Location: aanmeld.php");
        exit;
    } else {
        while ($row = mysqli_fetch_assoc($sql)) {
            $userid = $row['id'];
        }
        $username = $row['gebrnaam'];
    }
}


//start de opbouw van de linkpagina
$linkcode="<div class="linktank"><div class="linkcontainer">";


//link aantallen en afbreekwaarden bepalen
$breaksmade=-0;
$makebreak=0;
$count=0;
$counttotal=0;


$sqlll= mysqli_query($conn, "SELECT COUNT(lid) as total FROM links WHERE uid ='$userid'");
if (!($temp_2 =  mysqli_query($sqlll,$conn)))
    showerror();
    $aantallen = mysqli_fetch_array($temp_2);
    
if ($aantallen['total'] == 0)
{
    include('geenlinksgevonden.php');
}


//categorien in de geselecteerde linkdir vinden
$sqll= mysqli_query($conn, "SELECT DISTINCT cat FROM links WHERE uid ='$userid' GROUP BY cat ");
if (!($temp =  mysqli_query($sqll,$conn)))
    showerror();
    $aantalcats=mysqli_num_rows($temp);


    //kolommen
    $totalrows= $aantallen['total'] + $aantalcats;
    $splitvalue= ceil($totalrows/$aantalkolommen);


    // voor elke categorie een apart blok bouwen
    while ($groep = mysqli_fetch_array($temp))
    {
        $category=$groep["cat"];


        // voor elk blok de links selecteren & html code schrijven
        $sql= mysqli_query($conn, "SELECT * FROM links WHERE cat = '$category'  AND uid ='$userid' ORDER BY naam ");
        if (!($result =  mysqli_query($sql,$conn)))
            showerror();
            $count++;
            $counttotal++;                                


            //categorie kop
            $linkcode.="<div class="list1">".$category."</div><div>";
            while ($row = mysqli_fetch_array($result) )
            {
                $count++;
                $counttotal++;                                


                //link
                $linkcode.="<a target="_blank" href="".$row["link"]."">".$row["naam"]."</a><br>";
                if ($count >= $splitvalue)
                {
                    $makebreak=1;
                }
            }
            if ($makebreak==1)
            { 


                // einde?
                if ($counttotal == $totalrows)
                {
                    $linkcode.= "</div><br>";
                }


                //nog een kolom        
                else 
                { 
                    $linkcode.= "</div></div><div class="linkcontainer">";
                    $makebreak=0;
                    $count=0;
                    $breaksmade++;
                }
            }
            else
            {


            //einde categorie
            $linkcode.= "</div><br>";
            }
        }    


        //niet genoeg kolommen maar wel genoeg categorien correctie:
        if ($breaksmade < $aantalkolommen && $aantalcats >=$aantalkolommen)
        {
            function str_replace_count($search,$replace,$subject,$times) 
        {
         $subject_original=$subject;
          $len=strlen($search);   
           $pos=0;
           for ($i=1;$i<=$times;$i++) 
        {
            $pos=strpos($subject,$search,$pos);
               if($pos!==false) 
            {               
                $subject=substr($subject_original,0,$pos);
                   $subject.=$replace;
                   $subject.=substr($subject_original,$pos+$len);
                   $subject_original=$subject;
               }
            else
            {
                break;
               }
           }
           return($subject);
    }
    $extrabreaks =$aantalkolommen-$breaksmade;
    $linkcode = str_replace_count("</div><br>",  "</div></div><div class="linkcontainer">",  $linkcode, ($extrabreaks-1));
}
?>

<style type="text/css">
<!--
.list1 {
    font-weight:bold;
    background-color:#0060ac;
    /* background-color: #E96516; */
    color: #ffffff;
    text-align:center;
    /* letter-spacing: 1px; */
    line-height: 17pt;
    margin-bottom: 5px;
    border-radius: 10px 10px 10px 10px;
    /* border:2px solid #E96516; */
}


.linktank {
width:<?php echo ($aantalkolommen*$kolombreedte)+($aantalkolommen*14) ?>px;
}


.linkcontainer {
    float:left;
    margin:0px 5px;
    line-height: 13pt;
    width:<?php echo $kolombreedte;?>;
}
-->
</style>

<?php echo "<br clear="all">".$linkcode.""; ?>


Dank alvast voor diegene die willen meedenken!!!

Groet,
Marc
 
Laatst bewerkt door een moderator:
Ik wil heus een kijkje nemen in je code, maar ontrafel dan eerst even je brei aan spaghetticode. ;)
Er staat allemaal code hier tussen commentaar blokken.

Overigens heeft PHP6 nooit officieel bestaan. Enkel als een soort afgekeurde pilot-versie.
Na PHP 5 kwam PHP 7, waarna weer netjes PHP 8 kwam.
 
Laatst bewerkt:
Netjes, zonder codetags? :D
Ik zal zo eens kijken..
 
Ik heb niet het idee dat dit door de overgang naar PHP8 komt, of je hebt eerder de errors al weggemoffeld met een 'foute' error_reporting.
Ik krijg meer het vermoeden dat je connectie niet klopt.
 
Je ziet het wel voorbij komen maar persoonlijk stop ik een function liever niet in een IF.

Code:
    if ($breaksmade < $aantalkolommen && $aantalcats >=$aantalkolommen)
    {
        function str_replace_count($search,$replace,$subject,$times)
        {
            $subject_original=$subject;
            $len=strlen($search);  
            $pos=0;
            for ($i=1;$i<=$times;$i++)
            {
                $pos=strpos($subject,$search,$pos);
                if($pos!==false)
                {
                    $subject=substr($subject_original,0,$pos);
                    $subject.=$replace;
                    $subject.=substr($subject_original,$pos+$len);
                    $subject_original=$subject;
                }
                else
                {
                    break;
                }
           }
           return($subject);
        }
        $extrabreaks =$aantalkolommen-$breaksmade;
        $linkcode = str_replace_count("</div><br>",  "</div></div><div class="linkcontainer">",  $linkcode, ($extrabreaks-1));
    }
 
Beste,

Begin eens met de volgende dingen:
  • Variabelen buiten een string te halen
    Betreft elke query.
  • "-tekens (quotjes) in een string te escapen (dan klopt je string weer)
  • functies defineer je aan het begin en niet in een if-statement.
    Bij voorkeur zelfs in een aparte file die je include
 
Met escapen wordt de \ bedoeld :) bijvoorbeeld
Code:
$linkcode = "<div class=\"linktank\"><div class=\"linkcontainer\">";
 
In plaats van escapen zou ik de HTML buiten PHP-tags behandelen, of single-quotes gebruiken bij een echo.
In dit geval moet je variabelen wel altijd buiten quotes halen.
 
Ik heb veel kunnen lezen maar weinig die de nagelkop benadert.

We beginnen bij het begin.
Je ziet volgende ...
PHP:
if ($username == "www") {
    $userid = 1;
} else {

Nu ergens wordt userid gebruikt en is deze niet aanwezig. zie warning !!!ELKE VARIABELE MOET GEINITALISEERT WORDEN!!!
zoals onderstaande en het voorbeeld is niet volledig juist omdat 0 en 1 in php niet worden gebruikt uit veiligheids overweging.
PHP:
$userid = 0;
if ($username == "www") {
    $userid = 1;
} else {

Mijn bedenkingen is dat je bij www niet ingelogd kan zijn dus moet dit veilig zijn .
echter dien je toch op te letten als er gebruiker is zonder id zou dit nare gevolgen kunnen hebben op veiligheid.

een veiligheids upgrade zou nuttig zijn op de plaats van

$sql = mysqli_query($conn, );

onder voorbehout van typfouten onderstaande ref:https://stackoverflow.com/questions/1290975/how-to-create-a-secure-mysql-prepared-statement-in-php

$stmt = $conn->prepare("SELECT id, gebrnaam FROM users WHERE gebrnaam =?");
$stmt->bind_param('s',$username);
$stmt->execute();
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan