Notice: Trying to get property of non-object fout code / notice
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?
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?
Laat maar...
Gewijzigd op 12/03/2017 13:56:40 door Adoptive Solution
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 ?
$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 ?
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)
Twee S-en staan voor twee variabelen die beiden een "string" zijn
(string = een rij karakters)
Oke top.
Ik heb het stukje script nu als volg:
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
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();
}
}
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
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.
Dit kan allemaal in 1 query als je het handig aanpakt.
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
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
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.
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.
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
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




