Jörg Reinholz: DIV-Inhalt mit Datenbankeinträgen per Zufall

Beitrag lesen

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');

Achte darauf, dass die HTML-Seite, das PHP-Skript, die Datenbank und auch die Kommunikation zwischen PHP <-> Datenbank die gleiche Kodierung verwendet.

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,1

Geht 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>

Jörg Reinholz