Notice: Trying to get property of non-object fout code / notice

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ricardo B

Ricardo B

12/03/2017 12:43:14
Quote Anchor link
Hallo iedereen ik ben momenteel bezig om een oud script van 10 jaar geleden om te scripten naar php 7 ondersteuning en alle foutcodes eruit te halen ik werk momenteel met mysqli maar het is alweer 10 jaar geleden dat ik een php bestand geopend heb toen was ik er ook geen pro in maar wist ik er wel meer vanaf dan nu.

Ik heb momenteel een notice error die kan ik eventueel uitzetten maar ik wil hem er uit hebben.

dit is de foutcode: Notice: Trying to get property of non-object in /mnt/web121/d2/33/58167933/htdocs/includes/functions.php on line 201\



$drop =mysqli_query($con,"SELECT * FROM casinos");

while($tard=mysqli_fetch_object($drop)){
$per = mysqli_fetch_object(mysqli_query($con,"SELECT * FROM users WHERE username='$tard->owner'"));
if ($per->status == "Dead" or $per->status == "Banned"){
mysqli_query($con,"UPDATE casinos SET owner='0' WHERE casino='$tard->casino' AND owner='$tard->owner'");
}

}



Dit is lijn 201:
if ($per->status == "Dead" or $per->status or "Banned"){




Ik had al een een tip gekregen dat dit gevoelig is voor mysql injection en dat ik een string als variable gebruik ?


Kan iemand deze error voor mij oplossen zodat ik dan vervolgens de oplossing als voorbeeld kan gebruiken voor de rest van mijn scripts?
 
PHP hulp

PHP hulp

08/02/2023 14:03:41
 
Adoptive Solution

Adoptive Solution

12/03/2017 13:47:02
Quote Anchor link
Laat maar...
Gewijzigd op 12/03/2017 13:56:40 door Adoptive Solution
 
Ricardo B

Ricardo B

12/03/2017 15:44:10
Quote Anchor link
Op de andere site kreeg ik dit als antwoord:

$drop = $con->query("SELECT owner FROM casinos");
while ($tard = $drop->fetch_row()) {
$con->prepare("SELECT status,casino,owner FROM users WHERE username=?")
->bind_param("s", $tard[0])->execute()
->bind_result($status, $casino, $owner)->fetch()->close();
if (in_array($status, ["Dead", "Banned"], true)) {
$con->prepare("UPDATE casinos SET OWNER='0' WHERE casino=? and owner=?")
->bind_param("ss", $casino, $owner)->execute();
}
}

Maar ik snap niet wat die bind_param S inhoud

en bind param SS

iemand een idee ?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

12/03/2017 22:47:54
Quote Anchor link
Een S staat voor een variabele die een "string" is.
Twee S-en staan voor twee variabelen die beiden een "string" zijn

(string = een rij karakters)
 
Ricardo B

Ricardo B

12/03/2017 23:16:39
Quote Anchor link
Oke top.


Ik heb het stukje script nu als volg:

Quote:
$drop = $con->query("SELECT * FROM casinos");
while ($tard = $drop->fetch_row()) {
$con->prepare("SELECT status,casino,owner FROM users WHERE username=$tard->owner")
->bind_param("s", $tard[0])->execute()
->bind_result($status, $casino, $owner)->fetch()->close();
if (in_array($status, ["Dead", "Banned"], true)) {
$con->prepare("UPDATE casinos SET OWNER='0' WHERE casino=$tard->casino and owner=$tard->owner")
->bind_param("ss", $casino, $owner)->execute();
}
}



De foutcode's zijn weg alleen er werd afgeraden om * te gebruiken in bijvoorbeeld SELECT * FROM casinos


Alleen het hele script staat er vol mee... wat zijn daar de alternatieven voor of kan dit verder geen kwaad? werking van het script nog niet getest maar de fouten zijn weg
 
Ben van Velzen

Ben van Velzen

12/03/2017 23:32:59
Quote Anchor link
Ik zou je naast de andere adviezen ook aanraden om eens wat queries te combineren tot joins. Waarom selecteer je bijvoorbeeld alle casino's om daarna pas per casino de user op te vragen, en dan daarnanog eens een update te doen?
Dit kan allemaal in 1 query als je het handig aanpakt.
 
Ricardo B

Ricardo B

12/03/2017 23:55:14
Quote Anchor link
Ik ben geen held met php ik ben momenteel elke dag minimaal 3 a 4 uur bezig om rond te kijken maar zonder goed werkend voorbeeld is het echt een ellende.

Wat dit stukje text moet doen is:

If Status is Dead or Banned ////// Status is een kolom in de database onder tabel users

then set owner to 0 in de kolom owner onder tabel casinos


10 jaar geleden werkte alles goed maar sinds ik overgestapt ben op php7 en 10 jaar letterlijk niks meer met php gedaan heb is het echt een gedoe.

Kan iemand mij op gang helpen met een werkend stukje script wat doet wat ik omschrijf? als ik een goed voorbeeld heb wat werkt zonder fouten kan ik er van leren en ermee aan de slag gaan
 
Frank Nietbelangrijk

Frank Nietbelangrijk

13/03/2017 00:16:58
Quote Anchor link
Het klinkt allemaal een beetje onlogisch. Stel een gebruiker is op non-actief gezet maar dit blijkt een vergissing. Dan zou alles weer moeten werken zodra deze gebruiker weer de normale status krijgt. Ga je nu owner=0 doen dan heb je dus een spook "casino"? Laat die owner gewoon staan en volg het advies dat Ben al gaf op want dan kun je iets doen als

SELECT c.id, c.name, u.username FROM casino c JOIN user u ON u.id=c.owner WHERE u.status='active'

en plotsklaps heb je daar enkel de casino's van ACTIEVE gebruikers.
 
Ricardo B

Ricardo B

13/03/2017 01:42:31
Quote Anchor link
Stel als het een vergissing is dan zou ik het in de db kunnen veranderen banned is ook echt een permanent ban ik wil daarnaast ook een tijdelijke ban instellen maar ik wil eerst dit werkend hebben.

Als een casino 0 als owner heeft dan betekent dit dat het casino vrij is om gekocht te worden dit is zo geregeld in de script. geen spook casino maar een casino die weer beschikbaar is.

ook als een speler "dood" is dan moet dit stukje script er ook voor zorgen dat de casino die de speler beheert word vrijgegeven en dus dat de kolom owner weer op 0 komt te staan
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.