Ik ben bezig met een systeem waarin meerdere gebruikers aan een draaiboek met daarin onderwerpen kunnen werken.
Nu is het niet de bedoeling dat als iemand in een onderwerp aan het werken is, iemand anders het onderwerp tegelijkertijd bewerkt.
Dan zou informatie verloren kunnen gaan.

Hoe kan ik ervoor zorgen dat maar een iemand tegelijkertijd een pagina (met daarin het formulier) kan bezoeken?
Ja, ik zie ook in de broncode dat 'ie erbij komt te staan met het juiste ID.
Ik zou ook even foutafhandeling toevoegen. En eventueel een waarde teruggeven als het mislukt is.
Zodat je die alsnog in je gegenereerde HTML kan plaatsen ter verduidelijking.
Ik ben echt een leek in javascript... Hoe voeg ik die hieronder toe?


<script>
$(document).ready(function(){
function loadData(itemID) {
    $.ajax({
        url: "shared/blocktime.php",
        type: "POST",
        data: "{'itemID':'" + itemID+ "'}",
        cache: false,
        success: function(html){
            $(".result").empty().html(html);
                setTimeout(function () { 
                    loadData(username, time); 
                }, 30000);
            },
        error:function (xhr, ajaxOptions, thrownError){
            $(".result").empty().html('Error:'+ xhr.status + ' '+ thrownError);
        }    
    });
}
});

loadData(<?php echo $_GET['itemID']; ?>);

</script>
Ik raad aan om de loadData(...)-aanroep boven je loadData-functie te plaatsen, en dus binnen de ready-statement van jQuery.

Nog mooier is als je het item-ID enkel in je HTML-document defineert in een nieuwe variabele. En deze variabele overneemt in je functie die je in een js-bestand zet, die je dan inlaadt.

Dan hoef je niet steeds deze hele code bij elk bezoek op te halen.
Zo dus:

<script type="text/javascript">var itemID= '<?php echo $_GET['itemID']; ?>';</script>
<script type="text/javascript" src="script.js"></script>


En dan in je script.js:

<script>
$(document).ready(function(){
loadData(itemID);

function loadData(id) {
    // De rest van het script!
    // Let op: Gebruik dan wel id i.p.v. itemID binnen de functie.
}
});

</script> 

Ik heb nu letterlijk het volgende, maar de database wordt niet ge-update, ondanks er wel connectie is.
Ook krijg ik op test.php geen foutmelding in beeld...

test.php

<? 
$itemID= '17';

echo $itemID;
?>


<script type="text/javascript">var itemID= '<?php echo $itemID; ?>';</script>
<script>
$(document).ready(function(){
loadData(itemID);

function loadData(id) {
    $.ajax({
        url: "shared/blocktime.php",
        type: "POST",
        data: "{'itemID':'" + id+ "'}",
        cache: false,
        success: function(html){
            $(".result").empty().html(html);
                setTimeout(function () { 
                    loadData(id); 
                }, 3000);
            },
        error:function (xhr, ajaxOptions, thrownError){
            $(".result").empty().html('Error:'+ xhr.status + ' '+ thrownError);
        }    
    });
}
});

</script>


shared/blocktime.php

<?
include("includes/globals.php");

$itemID = $_POST['itemID'];
$blocktime = time();
$update_item = mysql_query("UPDATE items SET blocktime = '".$blocktime."' WHERE itemID ='".$itemID."'");

?>
En wat gebeurt er als je je PHP-script handmatig uitvoert via een POST-request.
(Maak anders een tijdelijk formuliertje, of download een browser-addon zoals Poster voor Firefox))

PS: Gebruik van de shorttag <? raad ik af. Deze kan op sommige servers uitstaan met gevolg dat je PHP-source niet geparsed wordt en direct bij de client zichtbaar is(!!)
Dan update 'ie wel...
Dus het lijkt in het script op test.php fout te gaan... Maar waar?
test.php?
Wordt de AJAX-request zelf wel uitgevoerd? Zet anders eens op diverse plekken een alert() met een logische tekst op wat strategische plekken in je JavaScript. Dan heb je een idee hoe je script wordt doorlopen.
Ben je serieus nieuwe code aan het schrijven met mysql_ functies?

Daarbij:
- zet het melden + weergeven van fouten in PHP eens aan
- krijg je javascript foutmeldingen?
- dump je query eens in shared/blocktime.php

Je vraagt je keer op keer hardop af waar je informatie vandaan kunt halen maar je laat ook nergens informatie tot je komen...

GOKJE:
De include in shared/blocktime.php werkt niet omdat dit een verkeerd pad is, include zal hier verder geen biet om geven, gebruik voor kritieke bestanden altijd een require, dan krijg je tenminste een foutmelding...
@Thomas: Ook include() geeft foutmeldingen als het pas niet klopt.

Reageren