Posts by pekelterror

    Hallo,


    Ik was met een oud script bezig, welke bbtags heeft voor de gebruikers.
    Echter gebruikt die nog eregi_replace.
    Dit werkt nu dus niet meer, en begreep dat preg_replace de beste oplossing is.


    2 voorbeelden van de regels:

    PHP
    $text = eregi_replace("\\[quote=([^\\[]*)\]","<div id='quote'><strong>\\1</strong>:<br />",$text);
    
    
     $text = eregi_replace("\\[color=([^\\[]*)\]([^\\[]*)\\[/color\\]","<font color=\\1>\\2</font>",$text);


    Hoe kan ik dit omzetten in een preg_replace versie ?
    Of is er een andere manier om dit werkend te krijgen ?


    Ik begrijp eruit dat ik een regex moet maken, maar kom er niet uit.


    Met vriendelijke groet,
    Pekelterror

    Bedankt FangorN.


    In mijn geval is $ingame altijd geescaped, dit gebeurt al in de config file die overal word toegevoegd (En zonder die is er sowieso geen database connectie mogelijk).
    Ik snap dat op de locatie zelf escapen altijd zorgt dat het goed is en het is gelijk zichtbaar (Mochten er later anderen in de code kijken).
    Maar in dit geval word $ingame op slechts 1 locatie aangemaakt en is daar gelijk geescaped tegen injectie.


    Wanneer ik andere waardes gebruik in een query worden die wel in de query zelf geescaped, maar aangezien $ingame in elk scripts meerdere keren word gebruikt leek me escapen op 1 locatie makkelijker en kan het daardoor ook niet vergeten.
    Maar je uitleg is wel logisch kan het misschien beter op de plek zelf toepassen zodat het duidelijker is.

    Het is inderdaad escape on input.
    $ingame bevat een session waarde (Die gezet word bij het inloggen, dus zou ivm een match al veilig moeten zijn).


    Ondanks dat escape ik het toch liever voor het gebruik van de querys.

    PHP
    <?php
    $ingame = mysqli_real_escape_string($connectie, $_SESSION['user']);


    Deze $ingame word verder niet gebruikt om het te tonen, dat gaat eigenlijks via het $gebruikerinfo 'object' (een fetch_object van een query), en deze bevat dan een heleboel waardes die vaak worden gebruikt zoals ze in de database staan van de gebruiker.


    Ik ben in elk geval alvast overgestapt op InnoDB, maak gebruik van SQL_NO_CACHE in de select query voor $gebruikerinfo om te zorgen dat ik de meest recente versie heb, en heb enkele onnodige querys verwijderd uit de scripts in de hoop dat het daardoor minder zwaar is.
    Verder schrijf ik nu wel wat debug weg om te kijken of dit probleem zich nog voordoet.


    Het lijkt op dit moment goed te gaan.
    Mocht het toch nog weer gebeuren zal ik je advies over Locking en Transacties (aangezien we nu toch InnoDB gebruiken) beter bestuderen.


    Bedankt voor de hulp!

    @FangorN Bedankt voor je bericht.
    Het beste zou ik dus kunnen omschakelen van MyIsam naar InnoDB ?
    En dan transacties gebruiken ?


    Het betreft inderdaad een mafia game.


    $gebruikerinfo is een fetch_object van een X aantal velden die uit de gebruiker worden opgehaald van de user.
    Dit omdat we elke aanvraag een X aantal sowieso al nodig zijn.


    $ingame bevat de session user (escaped) zodat ik deze makkelijk overal kan gebruiken.
    Dit zou uiteindelijk dus $gebruikerinfo->user kunnen worden, maar die waarde staat toch gelijk aan $ingame aangezien $ingame (Oftewel de $_SESSION['user'] escaped) word gebruikt in de Select query die word gebruikt bij $gebruikerinfo.


    We zien door de logging dat er soms 5 aanvragen per seconde worden gedaan naar de pagina die dit probleem geeft.
    Er word niet in andere formulieren tegelijk gewerkt, maar de verwerking gaat vermoedelijk te langzaam voor de volgende aanvraag weer komt.


    Het bevat wel veel legacy code aangezien er op een eerder project is verder gewerkt dat ik jaren terug heb gemaakt.
    Had alleen niet nagedacht over de types engines van de database en locking, die was ik (in mijn ogen) nooit nodig, maar zal er toch eens naar kijken.
    Gelukkig kan ik die altijd nog aanpassen, zal alleen even moeten kijken of MyIsam naar InnoDB geen problemen oplevert (Maar verwacht ik niet).


    @Luc Bedankt voor het meedenken.
    Alleen zou dit het probleem erger maken.
    Nu gaat de gebruiker na een tijdje in de min, tot de database weer bij is, dit moeten ze dan weer aanvullen tot ze in de plus zitten.
    Met jou kleine fix zou juist de afschrijving misschien nog een keer minder gebeuren.


    TLDR; Ik zal me eens inlezen op het verschil van InnoDB/MyIsam, een locking mechanisme en transacties.
    Hebben jullie (Indien er meerdere soorten zijn), nog een locking mechanisme of transactie methode die jullie persoonlijk graag gebruiken, of zouden aanraden in deze situatie ?

    Hallo,


    Ik heb het volgende probleem:
    De records worden soms niet op tijd opgeslagen wanneer een gebruiker erg snel handelingen uitvoerd.


    Stel gebruiker Henk heeft 1.000 op zak, en klikt rustig op een bepaalde optie (Die bijvoorbeeld 100 kost) en gaat de gebruiker steeds 100 omlaag.
    Maar wanneer dit erg snel gebeurt is soms de check of je meer als 100 hebt geldig, terwijl de speler vervolgens op een negatief saldo komt.


    Hierboven even een kort voorbeeldje van de situatie.


    Er word gebruik gemaakt van een MyISAM tabel in MySQL.
    Het veld dat word aangepast betreft een INT veld.
    Er word gebruik gemaakt van een VPS, dus alle settings zijn aan te passen in de configs.


    Er is maar 1 persoon actief op een account, dus er zouden niet meerdere aanvragen tegelijk moeten komen.
    Echter als een speler erg snel de pagina gaat vernieuwen lijkt het erop dat deze soms tegelijk worden uitgevoerd.


    Zelf vermoed ik dat het het mogelijk aan locking (Of het gebrek aan) ligt, of dat het ophalen van de gebruikersgegevens word gecached.
    $gebruikerinfo is een verzameling van gegevens die uit de database word gehaald aan het begin van de pagina laden, is het mogelijk dat deze read opdracht word gecached omdat het in dezelfde seconde (Of erg korte periode) plaats vind als de vorige aanvraag ?


    Hoe zou ik het beste het probleem kunnen vinden ?
    En waarop zou ik kunnen zoeken om tot de juiste functie of instelling te komen om dit probleem op te lossen ?


    Alvast bedankt,
    Pekelterror

    Indien een Cloud Storage ook is toegestaan, Stack (Van TransIP, gebaseerd op OwnCloud) geeft gratis 1TB en kun je ook gewoon delen.
    En heeft ook gewoon webinterface, en clients voor Android, iOS, Mac, Windows.


    Is wel op invite basis, dus weet niet wanneer je dit wilt realiseren.


    Of je zou het zelf kunnen doen met iets als OwnCloud.
    Zou je zo op een VPS, Dedicated, of zelfs een Raspberry Pi kunnen zetten.

    Bedankt FangorN,


    Het lijkt er dus op dat ik de tijdzone moet zetten (Staat nu op Berlin, ga ik straks gelijk veranderen in Amsterdam, zou verder geen invloed moeten hebben maar wel zo netjes)
    Ik gebruik nu vaak time(), en in de database current_timestamp.


    De current timestamp kan ik zo overal vervangen door je voorbeeld van AmsterdamTime mee te geven in de query, inplaats MySQL dit te laten regelen via current_timestamp.
    En time() blijkt al UTC te zijn (http://php.net/manual/en/function.time.php#100220)


    Dan zou het opgelost moeten zijn ?
    Ik ga het binnenkort proberen, alleen ben ik ivm tentamens en eindopdrachten weinig met dit project bezig.



    Jordy

    Hallo,


    Ik ben bezig met een maffia game, en loop tegen een probleem met de tijdzones aan.
    Door het verzetten van de tijd ging er zojuist het èèn en ander verkeerd.


    Allereerst wat mijn instellingen zijn zover ik zie:
    Terminal zegt op dit moment met de command "date":

    Code
    Sun Oct 29 02:47:06 CET 2017


    PHP met de functie date_default_timezone_get() zegt:


    Code
    Europe/Berlin

    (Moet natuurlijk Amsterdam zijn, maar zou in principe niet moeten uitmaken? Maar zo aan te passen in php.ini


    MySQL met de volgende query "SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)" zegt:


    Code
    01:00:00


    En het probleem is dat als ze om 02:58 een misdaad doen, ze om 02:59 dit weer kunnen doen.
    Maar om 03:00 word de tijd weer 02:00, waardoor het systeem denkt dat er een uur gewacht moet worden.
    (Raar genoeg leek het tussen 01:00 en 02:00 te gebeuren op me spel)


    Nu is mijn vraag, hoe kan ik dit voorkomen? (Ik heb volledige beheer tot de server voor als dat belangrijk is)


    Alvast bedankt,
    Pekeltje

    http://blog.chapagain.com.np/u…-populate-selection-list/


    Nog een voorbeeld waarin een lijst met steden word weergeven op basis van het gekozen land.
    In het voorbeeld gebruiken ze een array, maar dit kan natuurlijk ook iets uit de dabase zijn.


    Verder kun je op in het idee van het voorbeeld te blijven, na het kiezen van een land de stad kiezen, die vervolgens weer een lijst kan tonen met wijken, gevolgd door straatnamen.


    Land > Stad > Wijk > Straatnaam.
    En dat kan natuurlijk ook zijn zoals je het nodig bent met:
    Merk > Model > Type & Jaartal > Dak

    Hallo,


    Is het mogelijk om te notificaties die ik op mijn telefoon ontvang, te sturen naar een API die ik zelf beheer?
    Het gaat (niet zo zeer) om te inhoud, maar gewoon of het een Whatsapp, Facebook of Outlook melding is.


    Ik heb weinig tot geen ervaring met Android.
    Is het kijken of er notificaties zijn, en deze dan via post/get sturen naar een server lastig?


    Ivm privacy hiervan zoek ik geen third-party apps, en wil het om deze reden graag zelf in beheer houden.
    De API is ook lokaal, en de data verlaat mijn netwerk dus niet.


    Jordy


    Je zou het ook zelf kunnen doen als je de kosten laag wilt houden voor zowel jezelf als voor de mensen die stemmen.


    Mocht je nog een oud android toestel hebben liggen, en een prepaid simkaart kun je bijvoorbeeld dit gebruiken.
    https://play.google.com/store/….android.smsgateway&hl=en


    Dan kun je alles zelf opslaan in een database, en kijken wie er de meeste stemmen heeft.
    En kun je eventueel (realtime) een overzicht tonen, of pas na een bepaald tijdstip als er niet meer gestemd kan worden.

    Je zou het via PHP kunnen doen.


    PHP
    <?php
    $oefeningen= glob('oefeningen/*.mp3'); // Alle MP3 bestanden uit de map in een array
    shuffle($oefeningen); // Gooi ze door elkaar zodat ze 'random' zijn.
    echo "<embed src= '".$oefeningen[0]."' hidden='true' type='audio/mpeg' autostart='true' loop='true'>"; // En voeg de eerste oefeningen van de array met random oefeningen toe
    ?>

    Je kan dan alles in de map 'oefeningen' zetten, en deze worden dan gelijk aan de website toegevoegd.
    Je kan ze hiermee ook duidelijkere namen geven, wat je probleem ook oplost met "Wat zit er achter oefening 45.mp3"


    Verder zou je de embed nog kunnen vervangen met de HTML5 tag 'audio'
    Zie: https://www.w3schools.com/tags/att_audio_autoplay.asp

    Nee, ik gebruik geen APP.
    Hij word zonder probleem gevonden op de Xiaomi Mi4, Huawei P8 en Samsung S7 Edge.


    Heb je toevallig ook een OTG kabeltje?
    Dan zou je de andere kant van de USB, of een andere USB kunnen aansluiten om uit te sluiten dat het aan de connector van de USB ligt.

    50ml voor 30 euro duur?
    Probeer dan eens Canon, laatst 15ml kleur en 15ml zwart gehaald en was 50€ kwijt.


    Online wel goedkoper natuurlijk (Nog zeker wel tegen de 40 aan), maar was ze snel nodig dus in de winkel gehaald.


    Vind het overigens wel slecht dat dit door een update niet meer kan.
    Maar als het software matig is word het wel weer opgelost dmv tooltjes.