mysqli probleem

  • Beste ,
    Ik ben er een tijdje uit geweest en niet echt veel van php 7 weet, maar ik ben bezig nu met mijn rpg game maar krijg allemaal foutmeldingen wegens mysqli.
    Ik snap niet wat er fout aan in want deze script heeft altijd gedraag maar nu niet meer.


    Dit zijn de foutmeldingen.


    Notice: Undefined index: login in C:\xampp\htdocs\testtt\_config.php on line 200
    Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\testtt\_config.php on line 200
    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\testtt\_config.php on line 200
    Notice: Undefined variable: data in C:\xampp\htdocs\testtt\_config.php on line 155
    Notice: Trying to get property 'login' of non-object in C:\xampp\htdocs\testtt\_config.php on line 155
    Warning: mysqli_query() expects at least 2 parameters, 1 given in C:\xampp\htdocs\testtt\_config.php on line 155
    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\testtt\_config.php on line 156
    Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\testtt\_config.php on line 157


    En nog wel veel meer.


    Dit staat onderander op nummer: 155 tot 157

    Code
    $dbre = mysqli_query("SELECT *, UNIX_TIMESTAMP(`time`) AS `getime` FROM `jail` WHERE `login`='{$data->login}'");
    $jisin = mysqli_num_rows($dbre);
    $jail = mysqli_fetch_object($dbre);
  • Citaat

    mysqli_query() expects at least 2 parameters, 1 given

    Je geeft aan mysqli_query één parameter met de SQL-opdracht, maar er mist een tweede parameter. na een blik op de mysqli_query() op PHP.net zien bij bij de procedurele syntax van die functie dat de eerste parameter een verwijzing is naar je connectie, en de tweede de SQL-opdracht is.


    Als je dit al aanpast bij al je queries, ben je al een flink stap verder dan enkel een 'i' toe te voegen, wat niet niet meteen het succes van de hervorming van oude MySQL-functies naar MySQLi-functies.


    Verder zou ik uit oogpunt van efficientie liever mysqli_fetch_assoc gebruiken i.p.v. mysqli_fetch_object()


    Verder ben ik benieuwd waar $data->login vandaan komt, hier zie ik ook een error in.
    Misschien ben je vergeten de class te initialiseren?


    Om een horde aan errors te voorkomen indien je query mislukt, raad ik met klem aan om goede foutafhandeling in te bouwen waarbij je kijkt of je query false is of anders een resource teruggeeft (en dat is geen true ;) ).


    Als je de OO-variant van MySQLi gebruikt, wat ik tevens kan aanraden, dan kan je foutafhandeling makkelijker realiseren de interne classe zelfs uitbreiden met een hoop nuttigs :-).

  • Ik zal daar eens naar kijken, moet er even weer inkomen :D
    De data wat jij bedoelde komt hier vandaan. waarschijnlijk bij de data->login want die staat op 155

    Code
    $dbre = mysqli_query("SELECT *,
     UNIX_TIMESTAMP(`time`) AS `getime` FROM `jail` WHERE 
    `login`='{$data->login}'");
    $jisin = mysqli_num_rows($dbre);
    $jail = mysqli_fetch_object($dbre);
  • Als ik deze code zie krijg ik opeens een flinke trek in spaghetti als avondeten. :P


    Met een brij aan deze code kan je gewoon niet meer werken. Ik zou liever zeggen:
    Gooi het in de vuilnisbak en ga terug naar de tekentafel. Ik zie zelfs al een hoop vage beveiligingen die nergens op slaan, onduidelijk geformuleerde SQL-queries en een shitload aan niet duidelijk ingesprongen statements. (99 t/m 102 is al een waar drama om te zien)


    Zo te zien is dit een criminele Criminalz-game uit de jaren 2009 ofzo. Die wil je niet eens meer draaien, laat staan debuggen.


    Ik vraag me eigenlijk af wat mensen nog bezielt om aan zulke oer-oude slecht geschreven en ongedocumenteerde scripts te willen sleutelen.


  • Ziet er meer uit als een spatieloze code weergave vanuit deze website....

  • Opzich is het vrij logisch, want waarom zou iemand op een oude code willen voortborduren, wat teveel tijd kost, en wat de hulpgever teveel tijd kost.


    Vroeger zat iedereen een beetje te rommelen met Criminals, maar tegenwoordig is dat behoorlijk uit. De tijd verandert nou eenmaal.


    En bovendien valt mijn post ook onder hulp. Ik help hem om hem een hoop ellende te besparen. Dus ik vraag me af of die hulp en mentaliteit echt verdwenen is?

  • Je helpt hem totaal niet, je kraakt alles wat hij doet/probeert af en zegt "gooi in de prullenbak" .
    Komt het niet bij je op dat je beter kan aangeven wat er mis mee is in fatsoenlijk geschreven tekst?


    Voorbeeld:
    Ik zou je afraden deze programmering te gebruiken/lezen, het is verouderd met veel fouten in de beveiliging.
    Je kan xx doorlezen of een standaard programmering van xx kunnen bekijken/proberen, deze is meer van huidige tijd.


    Hier een paar handige links:

    1. a
    2. b
    3. c


    Via je manier van 'helpen' demotiveer je mensen juist om het vak/hobby te leren al is dat niet je intentie misschien maar komt wel zo over..
    Ook ik ben begonnen met slechte vullis-code die aan alle kanten slecht was, maar was wel gemotiveerd om dit te verbeteren om het zo te leren.
    Uiteindelijk gooide ik de slechte code weg en ging het zelf verbeteren op bestaande onderdelen, nalezen wat beter/korter kon.


    Ooit was "criminalspoint" (ja ik ga verder terug dan jij denkt) een plek waar je elkaar kon helpen als je het even niet meer wist of hulp nodig had.

  • Ik kraak hem niet af. Ik zeg dat die code niet meer van deze tijd is. En dat hij beter een terug kan gaan nar de tekentafel. Maar een alternatief kan ook ;)


    Wat zou jij als garagehandelaar zeggen als iemand met een inelkaar gereden oude auto aankomt.
    Repareren waar veel tijd in zit? Of een nieuwe auto aanbevelen?


    Ik durf te wedden dan ikzelf en veel anderen hun vingers hier niet meer aan deze code willen gaan branden.


    En criminalspoint is echt al weer lange tijd geleden, toen je koelkast nog met een 'ck' schreef ;-).


    Tijden veranderen eenmaal.....


    En als iemand terug gaat naar de tekentafel dan lijkt mij dat diegene ook meteen gaat kijken en onderzoeken hoe het goed moet. Dus als hij daar advies in nodig hebt, dan wil ik die wel geven als hij daarom vraagt. Daar hoef je mij niet de les voor te lezen ;)

  • @freek
    Vermoedelijk is je "$data->login" niet gevuld, het beter opvangen van dit soort foutmeldingen is wellicht handig voor je om dit in de toekomst te voorkomen. De mooiste manier persoonlijk vind ik via Exceptions, maar iedereen heeft ze eigen manier hiervoor dus het is maar net wat je gewend bent, een overzicht hiervan kan je hier vinden hoe je dit het beste kan opvangen/verwerken.


    Mijn advies, als Exceptions iets teveel informatie is, trigger_error() zo kan je de bezoeker een vriendelijke melding geven zonder allemaal foutmeldingen op het scherm te laten weergeven. Uiteraard op een productie omgeving altijd de foutmeldingen uitzetten, alleen in je development omgeving foutmeldingen weergeven om ze te verwerken is aangeraden.


    Extra:
    Een handige tip is even door te lezen wat SQL Injections doet en hoe je de programmering erop kan beschermen. Vanuit je geplaatste reactie #209461 zie ik dat je hier geen rekening mee houd binnen je programmering.

  • Dan is het nog de vraag wat verstandiger is: Voorborduren op de oude code, of gewoon van grond aan opnieuw beginnen.


    Dan kan je meteen een flinke opruiming houden in de code, en de code scheiden van HTML en PHP.


    Nogmaals: Het is zeker niet afkrakend bedoeld, maar een motivatie om je op het goede pad te brengen.


    Met de gegeven adviezen moet je al op pad komen om een betere code te bouwen.

  • Komt het niet bij je op dat je beter kan aangeven wat er mis mee is in fatsoenlijk geschreven tekst?

    Tot op zekere hoogte. Maar kijk eens naar het codefragment op de eerste pagina. Serieus, wtf is dit? Ik denk dat het mij minder tijd kost om iets nieuws te schrijven dan om uit te leggen wat hier allemaal aan mankeert.


    Er zijn situaties waarin nog recht te buigen valt wat krom is, en in sommige situaties is het gewoon beter om hier niet meer aan te beginnen. Dit project lijkt mij toch een beetje een gevalletje uit de laatstgenoemde categorie.


    Neemt niet weg dat dit een leerzame (doch redelijk nutteloze) exercitie kan zijn, maar daarbij moet je je wel goed realiseren dat ondanks het feit dat straks alles mogelijk "werkt" als je alles hebt omgeschreven naar de moderne uitvoering van verouderde functies en/of constructies, dat de algehele structuur van dit ding waarschijnlijk een complete incoherente gribus was, is en blijft.


    Je helpt hem totaal niet, je kraakt alles wat hij doet/probeert af en zegt "gooi in de prullenbak" .

    Dit zou ook mijn advies zijn. Van slechte code leer je meestal alleen hoe iets niet moet. Het hangt er ook maar net vanaf hoe je denkt een vragensteller te "helpen". Op het moment dat je een antwoord geeft heb je ook een zekere verantwoordelijkheid om te adviseren en niet alleen maar het kortste pad te tonen wat naar een directe oplossing voor het directe probleem leidt. Dat laatste is meestal wat gebeurt op forums. En daarmee help je mensen op weg op een verkeerd pad.


    Stel dat jij een huizenbeheerder bent en je staat op het punt om een of andere bouwval van de hand te doen. Zou je dan mensen adviseren om de muren maar een keer over te sauzen om het wat beter te laten ogen, of zou je ze toch beter kunnen adviseren om het pand maar om te trekken omdat er eigenlijk een direct en permanent instortingsgevaar dreigt?

  • Ik neem aan dat je dus je code wilt omzetten van MySQL naar MySQLi?


    Als je niet echt veel ervaring hebt met code schrijven kun je een converter gebruiken.


    Nee ik zeg niet dat dit geheel veilig is, omdat deze gebruik maken van $GLOBALS maar, je kunt hiermee wel je code weer werkend krijgen op nieuwere versies van PHP :-)!


    https://github.com/philip/MySQLConverterTool


    Deze ergens uploaden (kan ook lokaal).
    Je maakt een map aan, plaatst daar je code in en via de converter kun je de gehele map laten converten (alle PHP bestanden).


    Maak wel een backup natuurlijk ;)



    Daar komt wel bij dat ik het met de rest eens ben. Als je de tijd en kennis hebt, raad ik je aan om het van de grond af opnieuw te bouwen, hiervoor kun je een framework gebruiken, maar dat hoeft niet.

    Scripts te koop:
    Affiliate script (te koop): Klikje


    Scripts in ontwikkeling voor de verkoop:
    Startpagina script (in ontwikkeling): Klikje


    Bij interesse in 1 van de scripts die wij aanbieden, kun je altijd een berichtje sturen! :thumbup:


Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!