Allerdings werden jetzt Sonderzeichen (ä,ü, ...) nur noch als Fragezeichen angezeigt - wie passe ich das noch an?
Du willst der Rückgabe einen passenden Content-header voranstellen. Das kann etwas sein wie
<?php
header ('Content-Type: text/html; charset=utf-8');
Es muss nicht UTF-8 sein...
Hatte das beim Meta-Refresh mit der Übergabe der aktuell aufgerufenen ID gemacht und dann die Abfrage so:
SELECT * FROM
tabelle
WHERE id != '".$_GET['idcheck']."' ORDER BY prioritaet*RAND() Limit 0,1Geht das auch einfacher?
Definiere 'einfacher'. Es gibt zahlreiche Möglichkeiten. Speichere die letzte ID in einem Cookie, einer Session oder übergib diese als get-Parameter
Hier mit Cookie:
Erst prüfst Du, ob das Cookie da ist und setzt es ggf. auf -1 (gibt es in der Datenbank nicht)
if (! isset($_COOKIE['lastSnipplet']) ) {
$_COOKIE['lastSnipplet']=-1;
}
...
// 'SELECT * FROM tabelle
WHERE id != ' . intval($_COOKIE['lastSnipplet']) .' ORDER BY prioritaet*RAND() Limit 0,1'
Warum SELECT *? Das ist "nicht so toll". Gib die Spaltennamen an, das macht das Proggen auch für dich übersichtlicher!
Dein Orginal hat ein erhebliches Sicherheitsproblem, weil Du die Daten aus $_GET ungeprüft übernommen hast. Damit hat ein Angreifer "hübsche" Möglichkeiten
Falls Du die Rückgaben aus der DB nach $row auflöst und das als assoziativen Array bauen lässt:
setcookie('lastSnipplet',row['id'])
Damit steht beim nächsten Aufruf in $_COOKIE['lastSnipplet'] die ID des letzten Datensatzes, der dem Client gesendet wurde.
Das gänge freilich auch mit GET-Parameter, Javascript und dem Beispiel mit json.
<?php #getTexteAsJSON.php
$ausg['titel']='Das ist ein toller Titel';
$ausg['text']='Das ist ein toller Text';
$ausg['quelle']='geklaut von <a href="http://bauer.ro/geschichte_vom_kuerbis.html">rumänischem Bauer</a>';
$ausg['lastSnipplet'] = $id; (aus der Datenbank)
header('Content-Type:text/html; charset=UTF-8');
print json_encode($ausg);
?>
<script type="text/javascript">
var wiederhole; // für das Anhalten
var lastSnipplet=-1; //Speicher für das letzte abgeholte Snipplet
function holeDaten() {
xmlHttp = new XMLHttpRequest;
if (xmlHttp) {
xmlHttp.open('GET', 'getTextAsJSON.php?lastSnipplet=' + lastSnipplet, true);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
//auswerten, erzeugt assoziativen Array
eval('data='+xmlHttp.responseText);
// schreiben:
document.getElementById('titel').innerHTML=data['titel'];
document.getElementById('text').innerHTML=data['text'];
document.getElementById('quelle').innerHTML=data['quelle'];
// letztes Sniplet speichern:
lastSnipplet=data['lastSnipplet'];
// wiederholen
wiederhole=window.setTimeout("holeDaten()", 25000);
}
};
xmlHttp.send(null);
}
</script>