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