Door
Marco Hopster
op 23-04-2017 19:32
gewijzigd op 23-04-2017 19:33
5.915 views
Hallo Allemaal,
Zoals sommigen nu wel weten ben ik een oude site van mij aan het opknappen. Nu loop ik vast op het volgende:
Ik wil een javascript uit laten voeren, maar krijg een melding undefined variabel, terwijl er zeker wat achter staat.
Nu ben ik bang dat dit in de loop van de jaren veranderd is, en dat het daarom niet werkt.
$log="SELECT * FROM kieklog WHERE wieid=$id";
$logdata = mysqli_query($db,$log);
$logrij=mysqli_fetch_array($logdata);
$rows=mysqli_num_rows($logdata);
if ($rows) {
do {
$cover=$logrij['filmcover'];
$kiekcovers.='<a href="javascript:Popup(\'kiekkiekspiek.php?id='.$logrij['filmid'].'\');"><img src="dvd-covers/tn/tn_'.$cover.'" width=150 > ';
} while ($logrij=mysqli_fetch_array($logdata));
}
Ik ben meteen bezig om de gekke benamingen te veranderen, maar dat lijkt me handiger als het script ook goed werkt.
Weet iemand wat ik hier fout doe?
?Onbekende gebruiker
28-05-2017 01:18
gewijzigd op 28-05-2017 18:21
**KNIP**
In beide gevallen heb ik PHP Warning A non-numeric value encountered
waardoor ik ook het tweede geval heb getest en het tweede geval is inderdaad een string
Dus de vraag is WAAROM het eerste geval fout is!!!
ed hoeven, lees even mee:
Ozzie: ik had die '5' even gemist, maar nu je het zegt inderdaad ja. En dat is ook meteen de reden van de melding, dat soort achterlijkheden die je kunt uithalen.
Je kunt ook gewoon leren wat datatypen zijn en dat coercion GEEN goed idee is. Wanneer je wilt converteren kun je ook gewoon casten. Een string optellen bij een getal of andersom hoezeer die string ook op een getal lijkt is achterlijk. Getallen tel je op bij getallen, net als dat je strings concateneert aan strings. Dat je nu allerlei scripts moet gaan repareren zegt NIETS over PHP, maar over hoe jij ermee om bent gegaan, bugs in de hand werkend en wel. Hetzelfde geldt voor niet bestaande array indexes. Wat wil je dan dat er gebeurt? In stilte foute data verwerken? Wanneer je weet dat een array index niet hoeft te bestaan kun je daarop controleren.
Ik ben nu wel een beetje klaar met dat gevit op PHP 7.1, je opmerkingen hebben immers NIETS met PHP te maken. Als jij geen meldingen wil zien zet je toch gewoon lekker error_reporting(0) bovenaan je script? Moet je alleen niet aankomen met "waarom doet dit niet wat ik wil?"
Voor de grap trouwens: weet je hoeveel scripts ik heb moeten repareren bij het migreren? Ik ga je laten raden naar het aantal.
Lees even je eigen reactie en praat gewoon zelf normaal ... zonder te gaan schreeuwen.
>> Dus de vraag is WAAROM het eerste geval fout is!!!
Post eens je hele code.
[size=xsmall]Toevoeging op 28/05/2017 01:27:22:[/size]
>> Ik ben nu wel een beetje klaar met dat gevit op PHP 7.1, je opmerkingen hebben immers NIETS met PHP te maken.
Precies!!
?Onbekende gebruiker
28-05-2017 02:17
gewijzigd op 28-05-2017 18:22
WWil ik jullie bedanken, voor de PHP test link van OZZIE .
En als het als gevit is overgekomen dan was dat niet negatief bedoeld,
enkel kwam ik niet tot een oplossing, wat in PHP7.0 goed runt en in PHP7.1 vast loopt,
ik weet nu waarom, en dit is voor mij een werkend oplossing.
de data kan zijn '', of een string, zijn of een getal.
Als dat je code is, afgezien van de variabele namen dan.. Dan heb ik medelijden met degene die deze code gaat ontvangen. Damn.
Let op.
if ($waarde == '') Waarde is leeg, oh laat ik doeditdan maar gelijk maken aan waarde.
elseif ($waarde != '') Waarde is niet leeg, laat ik doeditdan maar gelijk maken aan waarde.
elseif ($waarde > 0) (wanneer ga je dit met bovenstaande condities ooit zien?) Laten we opnieuw doeditdan maar gelijk maken aan waarde.
?Onbekende gebruiker
28-05-2017 02:44
gewijzigd op 28-05-2017 18:23
Ach het is maar als voorbeeld bedoeld ik ga mijn script niet aan publiek tonen
Het gaat er om dat op deze manier geen foutmeldingen meer zijn
En hoe de data ingevuld word, moet zo flexibel als mogelijk zijn
de eenvoud zit in de data, des te korter des te beter.
dus als data geen waarde geeft of een string of een getal
flex !! toch.
de site werkt super snel en daar gaat het om.