Avatar billede zaittam Nybegynder
15. oktober 2007 - 14:30 Der er 8 kommentarer og
1 løsning

Cannot use a scalar value as an array

Efter at jeg opdaterede min servers php.ini fra display_errors Off til display_errors On samt error_reporting fra E_ALL til E_ERROR | E_PARSE | E_WARNING begyndte min webside på en fejl jeg ikke umiddelbart kan se en løsning på.

Den returnerer fejl på følgende linier 104-109:

104: include("inc/moduler.php");
105:
106: $modul_nyheder_arkiv = modul_nyheder_arkiv();
107: $modul_nyheder_seneste = modul_nyheder_seneste5();
108:$row[tekst] = str_replace("[-modul_nyheder_arkiv-]", $modul_nyheder_arkiv, $row[tekst]);
109: $row[tekst] = str_replace("[-modul_nyheder_seneste5-]", $modul_nyheder_seneste, $row[tekst]);

Den returnerer følgende fejl:

Warning: Cannot use a scalar value as an array in /srv/www/vhosts/itplaneten.dk/httpdocs/temp/index.php on line 108

Warning: Cannot use a scalar value as an array in /srv/www/vhosts/itplaneten.dk/httpdocs/temp/index.php on line 109

Filen inc/moduler.php indeholder følgende:

<?
include("db.php");

function modul_nyheder_seneste5() {
    $return = "";
    $query = mysql_query("SELECT * FROM nyheder ORDER BY timestamp DESC LIMIT 5");
    while($row = mysql_fetch_assoc($query)) {
        $return .= '
        <b>'.$row[overskrift].'</b> ('.date("d/m-Y", $row[timestamp]).')<br><br style="font-size: 3px">
        '.nl2br($row[tekst]).'<hr>
        ';
    }
    return $return;
}

function modul_nyheder_arkiv() {
    $return = "";
    $query = mysql_query("SELECT * FROM nyheder ORDER BY timestamp DESC");
    while($row = mysql_fetch_assoc($query)) {
        $return .= '
        <b>'.$row[overskrift].'</b> ('.date("d/m-Y", $row[timestamp]).')<br><br style="font-size: 3px">
        '.nl2br($row[tekst]).'<hr>
        ';
    }
    return $return;
}
?>

Anyone?
Avatar billede barklund Nybegynder
15. oktober 2007 - 14:40 #1
Er du sikker på, at der er linje 108 og 109? For jeg kan ikke få str_replace til at give den fejlbesked uanset hvad jeg giver den af input?
Avatar billede barklund Nybegynder
15. oktober 2007 - 14:40 #2
at det er*
Avatar billede zaittam Nybegynder
15. oktober 2007 - 14:42 #3
Det er helt sikkert de her to linier der er linie 108 og 109:

$row[tekst] = str_replace("[-modul_nyheder_arkiv-]", $modul_nyheder_arkiv, $row[tekst]);
$row[tekst] = str_replace("[-modul_nyheder_seneste5-]", $modul_nyheder_seneste, $row[tekst]);
Avatar billede barklund Nybegynder
15. oktober 2007 - 14:48 #4
Hm, for det første er $row[tekst] ikke pænt - det hedder $row['tekst'] alle steder.

Men derudover kan jeg ikke se, hvad der skulle være galt.

Prøv inden den første linje at skrive:

var_dump($row['tekst']);
var_dump($modul_nyheder_arkiv);

Så kan du se, hvad variablerne helt præcist indeholder, og hvilke typer, de har.

Og du er sikker på, at ovenstående 2 linjer er i den rigtige fil - altså i index.php?
Avatar billede zaittam Nybegynder
15. oktober 2007 - 15:11 #5
De er helt sikkert i index.php

Kan det skyldes at $row['tekst'] = NULL?
Avatar billede zaittam Nybegynder
15. oktober 2007 - 15:13 #6
Det kunne det vidst godt :) Men det burde str_replace da kunne finde ud af, gjorde den ikke?
Avatar billede zaittam Nybegynder
15. oktober 2007 - 15:23 #7
Smider du et svar?
Avatar billede barklund Nybegynder
15. oktober 2007 - 15:25 #8
Det giver ikke mening at kalde str_replace hvor nogle af argumenterne er NULL. Hvordan skulle den dog kunne håndtere det? returnere null, returnere ""? Den kunne passende give en bedre fejlbesked, men håndtere det er svært :)
Avatar billede barklund Nybegynder
15. oktober 2007 - 15:25 #9
Helt sikkert :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester