Cron werkt niet goed

  • Beste ICTers,


    Ik heb een stukje in mijn cron wat niet werkt.
    Ik wil de top 3 leden elke week resetten, en hun kristallen geven.
    Ik heb standaard op het spel een top 10 staan, dit wordt dus een wedstrijd als ware.


    Maar als de cron week begint reset hij de top 10 niet en geeft hij geen kristallen.
    Wel heb ik al een beetje op google gezocht onder 'Top 10 resetten php'


    Maar ik kwam niet echt verder.


    Hier het stukje code:




    Met vriendelijke groeten,
    kevin

  • Beste,


    Het script wordt inderdaad gewoon uitgevoerd, want in de database wordt de tijd geüpdatet en de rest van de cron werkt gewoon uitstekend.
    Ik heb op google gezocht naar oplossingen maar hiermee kwam ik niet ver.
    Ik heb gekeken naar het script maar kan geen fouten vinden in het stukje script 'top 3'


    Hierbij mijn vraag of jullie het zien en eventueel kunnen helpen?




    Met vriendelijke groeten,
    kevin


  • Hallo,


    Drie dingen:
    Al eens gekeken bij je webmail om te zien ofje Cron foutmeldingen geeft?
    Gebruik je wel een goede programma? Want ik zie zo een fout welke een programma zo aangeeft.
    Zoals gezegd is gebruik je mysqli niet altijd als object.


    Mvg,
    Tim

  • Ik heb dit nu als script maar de prijzen doen het alleen nog niet het resetten naar 0 wel.
    iemand enig idee?


  • Kijk eens naar je query:

    PHP
    $mysqli->query("UPDATE `[users]` SET `actief`='0'");


    je UPDATE [users] en set actief naar 0. Nu vragen ik en de query zich af.. Bij welke persoon wil je dit gaan doen?


    Daarnaast moet je echt gaan werken met fout afhandeling, zoals hier ga je er vanuit dat de query gelukt is terwijl dat niet zo is. (tenzij dit in je $mysqli class zit verwerkt..).


    mvg,
    cakemasher


  • Dit is bij alle leden, want anders wordt alleen de top 3 gereset en ik moet iedereen hebben.


    met vriendelijke groeten,
    kevin

  • In dat geval gaat er iets fout in je query. Zoals ik al eerder vermelde, ga ik er van uit dat jij op foutmeldingen checkt in je class. Gebeurt dit niet, regel dit dan voordat je deze vragen gaat stellen.


    Een opmerk: Je voert de while 3x uit, daarin zet je de query om de hele tabel te veranderen ook in. Dit houd in dat jij de query nu 3x uit voert wat niet nodig is.


    PHP
    // Invoer 
    	$tel			= '0';
    	$prijzenkast	= Array ('0', '5', '10', '25', '0');
    	$input			= $mysqli->query ("SELECT `login` FROM `[users]` ORDER BY `actief` LIMIT 3");
    	
    	// Weergave / uitvoer  
    	while ( $output = mysqli_fetch_assoc ($input) )  
    		$mysqli->query ("UPDATE `[users]` SET `kristallen` + '" . $prijzenkast[$tel] . "' WHERE `login`='" . $output['login'] . "'");
    	
    	$mysqli->query ("UPDATE `[users]` SET `actief` = '0'");


    waarbij ik de { en } weg gehaald hebt, zodat alleen de lijn na de while bij de while hoort, en alles wat erna komt niet meer.
    Dit houd in dat de while alleen de update query voor de kristallen 3x uitvoert, en zodra hij daarmee klaar is, de laatste query uitvoert.


    Als het gehele systeem niet werkt, gaat er iets fout in je query. Zoals jij zelf al eerder aangegeven had, update je de hele tabel. Ik heb dit even getest (aangezien ik anders beweerde) en het werkte inderdaad. (ik werk hier nooit mee, dus wist dat niet ^^).


    Luc: hij had 't wel al veranderd in z'n script.

  • Nee hoor, bekijk mijn allerbovenste regel maar goed, dat is de oplossing voor de 'kristallen'


    Hij heeft alleen het 2e deel van mijn post toegepast


    Code
    $mysqli->query("UPDATE `[users]` SET `kristallen`=`kristallen`+'".$prijzenkast[$tel]."' WHERE `login`='".$input['login']."'");


    Nu zal de query moeten werken, je moet zorgen dat de kristallen omhoog gaan, dat doe je door eerst te vertellen dan het op de kolom kristallen gaat, vervolgens ga je het ophogen, je wil dat de huidige kristallen blijven staan dus roep je weer eerst kristallen aan en vervolgens + de kristallen uit de array.


    Let op, je array[0] beval 0 dingen maar wordt wel aangeroepen als eerste, dus degene die 3e staat krijgt nu geen extra kristallen.

  • Je hebt gelijk Luc, hoewel de $input['login'] niet zal werken.. Tenzij zijn $mysqli class bij een ->query de boel meteen om zet naar een array. Maar hier ga ik niet van uit.


    Het volgende zou dus moeten werken:


    Hierbij heb ik de '0' bij prijzenkast ook verwijderd, aangezien ik aan kan nemen dat de winnaar niet 0 kristallen wint.


  • Anders overal even or die(mysqli_error()) achterzetten om zo te fout te ontdekken.

  • :P Je pakt ook 3 users gebaseerd op het actief zijn, of is het veld actief een soort punten telling?


    En in het script van cakemasher zit ook een typo, $tell ipv $tel.
    Misschien zo?


    (cakemasher zijn code, klein beetje aangepast)

  • Ja klopt,


    Ik heb dit even getest en bekeken, en er zit een fout dat de 'login' van de 3 spelers niet gepakt kan worden.


    Dus dan moet de fout in deze code zitten:

    Code
    <?
    $input            = $mysqli->query ("SELECT `login` FROM `[users]` ORDER BY `actief` LIMIT 3");
    ?>


    Maar dit heb ik dus nog even op google gezocht, maar kom niet ver tussen de oude mysql en de nieuwe mysqli..


    Met vriendelijke groeten,
    kevin

Participate now!

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