Is het mogelijk om JS-scripts in PHP-bestand te plaatsen?

<?php

mysql_connect('localhost','root','');
mysql_select_db('ditwhales');

$studno=$_POST['studno'];

$command=mysql_query("SELECT * FROM chat WHERE studno= 

'$studno'");
$numrs=mysql_num_rows($command);

if ($numrs==0){
print 'Sorry but you are not one of the Whales. Please contact the web 

master and ask for registration of your Student No. Thank you!';
}

else{
$all=mysql_query("SELECT * FROM msgs");

while ($row=mysql_fetch_array($all)){

echo $row['message'] . "
"; }; } ?>

Ik heb deze code. Maar het punt is dat ik wil dat het anders elke seconde wordt vernieuwd. Is dat zelfs mogelijk? Ik denk dat de terugkeer-functie zou werken, maar ik weet niet hoe ik het moet gebruiken. Kan iemand me helpen alstublieft?

0
elke 1 seconde? moet echt elke 1 seconde vernieuwd worden, stel je 10000 gebruikers voor x 1seconde = 10000 aanvragen x 60sec = 60000 verzoeken per minuut, dat is spammen voor mij, beter om elke 30 seconden te vernieuwen of gebruik websockets om updates naar klanten te pushen.
toegevoegd de auteur Gntem, de bron

3 antwoord

Zoals Mohammad suggereert, kunt u client side scripting voor dit probleem gebruiken om php-bestanden te lokaliseren op de server en een antwoord terug te sturen, bijvoorbeeld:

<script type="text/javascript">
function callphp(){
    setTimeout('callphp()', 1000);
    xmlhttp = null;
    count = 0;
    var d = new Date();
    if (window.XMLHttpRequest){
       //code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else{
       //IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
RndString = d.getFullYear() + "" + d.getMonth() + "" + d.getDate() + ""  + d.getHours() + "" + d.getMinutes() + "" + d.getSeconds() + "" + count++;
    xmlhttp.open("GET",'file.php?C=' + RndString,false);
    xmlhttp.send(null);
    if(xmlhttp.responseText != ""){
        document.getElementById("div").innerHTML = xmlhttp.responseText;
        }
}
</script>

Bekijk het alsjeblieft en laat ons weten wat er gebeurt.

1
toegevoegd

je kan het php-bestand met JavaScript ajax elke 1sec laden, ook kun je een onbeperkte lus gebruiken en de slaapstand (1); daar voor elke 1 seconde verversen

1
toegevoegd

Je bent een soort van verwarrende rollen: PHP draait serverside, het retourneert de gegevens die je aan de client toont, meestal volwaardige HTML die de browser direct laat zien, maar het kan ook alleen gegevens in verschillende formaten retourneren, zoals json of xml wanneer je het gebruikt als een provider voor RPC , wat een mooie manier is om een ​​functie aan te roepen door middel van het php-bestandseindpunt en met het retourneren van de gegevens.

Als u wilt manipuleren hoe de client-side (meestal een webbrowser) samenwerkt met de gebruiker, moet u code schrijven die in die specifieke context wordt gebruikt. De uniforme manier om dit voor browsers te doen is door JavaScript .

Met JavaScript kun je je pagina (inter) actief maken op verschillende manieren, zoals elke X seconden een routine aanroepen, door setInterval .

var cMR;

function callMyResults(){
}

window.onload = function(){
    cMR = setInterval('callMyResults',5000);
}
;

om uw code automatisch te laten oproepen wanneer de pagina is geladen, voegen we een functie toe aan de onLoad event handler, dit zal alles uitvoeren in de functie die eraan is toegewezen, in ons geval zal het een interval van 5000 milliseconden instellen waarop het de CallMyResults() functie elke keer zal uitvoeren. Het resultaat van setInterval wordt globaal in de cMR opgeslagen, zodat het later kan worden gebruikt om de code die op het interval wordt uitgevoerd, indien nodig te stoppen.

Dus op dit moment doet deze code niets. Javascript kan andere pagina's oproepen en zo gegevens ophalen met iets dat nu uniform wordt aangeduid als AJAX Oorspronkelijk was dit bedoeld om XML-documenten op te halen waarop u vervolgens hebt gereageerd (of gewoon schreef in het momenteel weergegeven document). Later is dit geëvolueerd naar het gebruik van json omdat dit een JavaScript-native element retourneert, waardoor het gemakkelijker te gebruiken is en over het algemeen kleiner in omvang is om via de netwerkverbinding over te dragen, wat de pagina's overzichtelijker maakt.

Er zijn veel bibliotheken om dit eenvoudig te doen, een van de meest populaire is jQuery , maar je kunt ook gewoon je eigen oproepen schrijven met het XMLHttpRequest -object (de basis van AJAX). U vindt hier tal van voorbeelden van op het web, zoals deze voor json-gegevens ophalen .

Over het algemeen wordt aanbevolen om een ​​gevestigde bibliotheek te gebruiken, voor gebruiksgemak, uw eigen verstand en gewoon veel leukere en gemakkelijk toegankelijke codering.

Eindelijk aan de PHP-kant verzamel je gewoon je gegevens zoals gewoonlijk, maar je print het een beetje anders, ofwel als xml in je eigen gespecificeerde formaat of door het als json te retourneren met json_encode . Dat kan zo simpel zijn als het volgende:

<?php
$pdo = new PDO('mysql:dbname=testdb;host=127.0.0.1',$user,$password);
$result = $pdo->query('SELECT * FROM msgs');
print json_encode($result->fetchAll());

Merk op dat ik PHP Data Objects (gewoonlijk aangeduid als BOB, heb gebruikt ) om toegang te krijgen tot de database, biedt dit een uniforme manier om databases te benaderen, voor het geval u ooit naar een ander RDBMS dan degene die je momenteel gebruikt (mysql). Het ding dat je in dat geval zou moeten aanpassen, zou de DSN-string zijn die je aan je PDO -object wanneer u het instantieert. Het andere grote voordeel van PDO is dat het u beschermt tegen SQL-injectie door methoden aan te bieden waarmee u eenvoudig kunt maken een voorbereide verklaring waarop u parameters die automatisch worden geciteerd (en dus beschermd); de mysql_ * functiefamilie wordt niet langer aanbevolen voor gebruik: gebruik PDO of gebruik mysqli.

Dus, om u een werkend voorbeeld te geven:

we hebben 1 clientpagina: display.html en 2 server side-pagina's voor het genereren en retourneren van de gegevens (fillList.php en retrieveList.php)

fillList.php

<?php
   //we work with the following table
// create table list_data (`when` DATETIME NOT NULL);

   //make sure to adapt these settings to yours, including username and password
$pdo = new PDO('mysql:dbname=scratch;host=localhost','username','password');
$pdo->exec('INSERT INTO list_data VALUES (NOW())');

hierdoor wordt een nieuwe waarde ingevoegd in de kolom when van de tabel list_data

retrieveList.php

<?php
   //make sure to adapt these settings to yours, including username and password
    $pdo = new PDO('mysql:dbname=scratch;host=localhost','scratch','scratch');
    print json_encode($pdo->query('SELECT `when` FROM list_data 
                                   ORDER BY `when` DESC'
                                  )->fetchAll(PDO::FETCH_ASSOC)
                      );

haalt alle gevonden waarden in de tabel list_data geordend op in aflopende volgorde en retourneert de resulterende associatieve array als een json-object.

Ik heb besloten om u een voorbeeld van een clientpagina te laten zien met jQuery, zorg ervoor dat u de nieuwste jQuery-1.7 downloadt .2.js en plaats het in dezelfde map als dit bestand.

display.html

<html><head><title>Refreshing List</title>
<script src="http://localhost/jquery-1.7.2.js" />
</head>
<body>

this list refreshes every 5 seconds, a new value is inserted every 2 seconds

  • base
<script> function fillList(){ //we insert a new value in the database by calling fillList.php $.get("http://localhost/fillList.php"); } function refreshList(){ /* we retrieve the json encoded data returned by retrieveList.php and process it in our anonymous function */ $.getJSON("http://localhost/retrieveList.php",function (data){ var items = []; // loop through the returned array $.each(data,function(key,val){ //we passed an associative array so we can use the columnname: 'when' items.push("
  • when: " + val['when'] + "
  • "); }); //clear the list and append the data to it $("#toRefresh").empty(); $("#toRefresh").append(items.join('')); }); } // jQuery uses .ready() instead of window.onload = function(){} $(document).ready(function (){ //retrieve the data every 5 seconds setInterval(function(){refreshList();},5000); //insert additional new data every 2 seconds setInterval(function(){fillList();},2000); //we fill the list with its initial values refreshList(); }); </script> </body> </html>

    Zoals u kunt zien, biedt jQuery u een eenvoudige manier om deze bewerkingen uit te voeren. Voer de pagina display.html uit en u ziet een altijd groeiende en opfrissende lijst van MySQL-datum/tijd-waarden.

    0
    toegevoegd