• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] PHP 5.1 vs PHP 5.5

reinhhardp

New member
Hallo,

Ich habe mein BS von XP 32 bit auf Win 10 64 bit upgeraded. Unter XP verwendete ich LAMP für Win mit PHP 5.1. Nun verwende ich XAMPP mit PHP 5.5.

Das Problem ist das einige PHP Scripte nicht mehr funktionieren, d.h. es wird nichts mehr zurück gegeben.

Hier kommt nichts mehr zurück:
Code:
<?php
$lang = $_GET['filter'];

$link = mysql_connect("localhost", "root", "")
    or die("Keine Verbindung möglich: " . mysql_error());
	mysql_select_db("collection") or die("Auswahl der Datenbank fehlgeschlagen");
	
	$query = "SELECT name,$lang FROM translationcollection";
	$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
	$count = count($result);
	while($info = mysql_fetch_array($result))
            {
            $content[] = $info;
            }
	$count = count($content);
	$output = array();
    for($i=0;$i<$count;$i++) {
		$arr = array('name'=>$content[$i]['name'], 'value'=>$content[$i][$lang]);	
		array_push($output,$arr);

    }
	echo json_encode($output);
?>

Hier aber schon:

Code:
<?php
	$lang = $_GET['filter'];
	$link = mysql_connect("localhost", "root", "")
    or die("Keine Verbindung möglich: " . mysql_error());
	mysql_select_db("collection") or die("Auswahl der Datenbank fehlgeschlagen");
	
	$query = "SELECT id, name, link,image FROM aplicationcollection";
	$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
	$count = count($result);
	while($info = mysql_fetch_array($result))
            {
            $content[] = $info;
            }

	$count = count($content);
	$output = Array();
    for($i=0;$i<$count;$i++){
        $arr = array('id'=>$content[$i]['id'], 'name'=>$content[$i]['name'], 'link'=>$content[$i]['link'], 'image'=>$content[$i]['image']);
		array_push($output,$arr);

    }	
	echo json_encode($output);
?>

Hat jemand von Euch eine Ahnung woran das liegt?

Danke,
Reinhard
 
Sofern es sich hier nicht um ein Suchwort-Spiel handelt, gibt es für mich lediglich die Ergebnismenge als Unterschied:
Code:
$arr = array('name'=>$content[$i]['name'], 'value'=>$content[$i][$lang]);

Darin fällt mir $lang auf. Kommt $_GET['filter'] im Script denn korrekt an?

Kurios finde ich übrigens auch

Code:
$count = count($result);

$result ist lediglich eine Referenz und kein Array
 
Ich habe das Problem eingrenzen können: Es liegt an der Funktion json_encode(). Wenn ich nämlich mit echo count($output); Dann wird der Wert 33, die Anzahl stimmt mit phpmyadmin überein, ausgegeben.
 
Für json_encode() müssen alle Strings UTF-8 kodiert sein. Überprüfe mal, ob du auch durchgängig mit UTF-8 arbeitest.

Dann: Die mysql_* Erweiterung ist veraltet und sollte nicht mehr benutzt werden. Nimm PDO oder MySQLi.
 
Zuletzt bearbeitet:
Sollten die Strings nicht bereits UTF-8 kodiert in mysql sein wenn die DB UTF-8 ist und auch die Spalten in der Tabell UTF-8 sind?
 
Zum Überprüfen ob durchgängig mit UTF-8 gearbeitet wird gehört etwas mehr.
Hiermal eine kurze Checkliste zu UTF-8 und Umlautproblemen:

  • PHP und HTML/Template Dateien im Editor als "UTF-8 ohne BOM" speichern
  • HTTP Header Content-Type mit UTF-8 [ header('Content-Type: text/html; charset=UTF-8'); ]
  • in HTML-Seiten <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <!-- HTML 4.x --> oder <meta charset="utf-8"><!-- HTML5 -->
  • Formulardaten in UTF-8 übergeben (ggf. mit accept-charset="utf-8" sicherstellen)
  • Datenbank Zeichensatz UTF-8, Tabellenkollationen utf8_general_ci o.Ä.
  • Datenbankverbindung von PHP zu MySQL auf UTF-8 stellen
  • Daten aus Fremdquellen müssen in UTF-8 überführt werden, wenn sie nicht als UTF-8 vorliegen
    utf8_encode: ISO-8859-1-Zeichenkette -> UTF-8
  • htmlentities codierung mitgeben, Beispiel: htmlentities($info,ENT_NOQUOTES,'UTF-8');
  • für deutsche Monatsnamen wie März ist u.U. setlocale(LC_TIME, "de_DE.utf8") notwendig


Das "es nicht funktioniert" kann ein Zeichensatzproblem sein, muss aber nicht. Da hilft nur Debuggen.
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben