PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : nach php Update gehen viele php seiten nicht mehr!?



meinereinerseiner
19-11-2002, 19:15
Halo,

hab heute meinen rechner auf einen neue mysql und php version gebracht.
vorher: php 4.1.2 und mysql 3.23.49
jetzt: php 4.2.3 und mysql 3.23.53.

einige scripts laufen, aber bei vielen bekomme ich Errors die so aussehen:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/tom/public_html/frame-alben-detail.php on line 11
die Datei die er anmeckert fängt so an:

<?php

include("/home/tom/public_html/config.php");
include("/home/tom/public_html/common-header.php");

$query = "select * from Alben ";
$query .= "where ID=";
$query .= "$ID order by ID";
$res = mysql_query($query, $link);

$d = mysql_fetch_object($res);
$DIR = $d->Linkinfo;
.
.
.
.
.


hab ich bei der installation was falsch gemacht?
fehlende DB Unterstützung kanns irgendwie nicht sein, da einige DB geschichten gehen.

der tom

Xerxes
19-11-2002, 20:38
welchen apache hast du denn drauf? beim 2er macht php immer mal mucken.
würd dann also mal php4.3.0rc1 installieren. hab die pre2 und die läuft eigentlich recht schön.

meinereinerseiner
19-11-2002, 20:39
den 1.3.27

php compiler options:
CFLAGS='-O2 -I/usr/local/openssl/include' \
./configure \
--with-apache=/home/SOFTWARE/_INSTALL_/lamp/apache_1.3.27 \
--with-mysql=/usr/local/mysql/3.23.53 \
--with-zlib-dir=/usr/local/lib \
--with-ftp \
--with-gd-dir=/usr/local/lib \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/local/lib
--enable-ftp=yes \
--enable-versioning \
--enable-track-vars=yes \
--enable-url-includes \
--enable-sysvshm=yes \
--enable-sysvsem=yes \
--enable-sockets \
--with-pdflib=/usr/local/lib \
--with-mm=/usr/local/mm-1.2.1 \
--with-gettext \
--with-openssl=/usr/local/openssl \
--with-config-file-path=/etc



und der apache:
EAPI_MM="/usr/local/mm-1.2.1" SSL_BASE=/usr/local/openssl/0.9.6g \
./configure \
--prefix=/usr/local/apache/1.3.27 \
--datadir=/var/www \
--enable-module=ssl \
--activate-module=src/modules/php4/libphp4.a \
--enable-module=php4 \
--add-module=src/modules/extra/mod_bandwidth.c \
--permute-module=BEGIN:bandwidth \
--add-module=../mod_throttle-3.1.2/mod_throttle.c \
--disable-shared=throttle \
--enable-module=unique_id \
--enable-module=rewrite \
--enable-module=speling \
--enable-module=expires \
--enable-module=info \
--enable-module=log_agent \
--enable-module=log_referer \
--enable-module=usertrack \
--enable-module=proxy \
--enable-module=userdir \
--enable-module=so \
--enable-module=unique_id \
--enable-shared=unique_id \
--activate-module=src/modules/perl/libperl.a \
--enable-module=perl \
--add-module=src/modules/extra/mod_gzip.c

das ganze unter redhat 7.3

Xerxes
19-11-2002, 20:48
hab nen fehler in deinem sql-syntax entdeckt:
bei ...where ID = '$ID'... müssen ' um das $ID rum. Dann sollte es gehen. :)

meinereinerseiner
19-11-2002, 20:52
hey, das scheints gewesen zu sein - nun hab ich noch:

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/tom/public_html/secrets/frame-alben-detail.php on line 53

die Zeile 53 ist:
while($d = mysql_fetch_object($res)) {

ist da auch wieder sowas drinn?


der tom

meinereinerseiner
19-11-2002, 20:56
komando zurück - jetzt kommt zwar kein fehler mehr - aber ich bekomme kein
ergebnis, wenn ich die hochkommas setze - ich denke mal der ersetzt jetzt das
$ID nicht mehr durch den wert der variable. *brösel*

meinereinerseiner
19-11-2002, 20:58
mein Burning Board 1.1.1 geht auch nicht mehr,
bekomme die main.php richtig angezeigt, aber egal welchen link ich anklicke
passiert nix, selbst öffnen in neuen fenster bringt immer nur die main.php.


...das macht doch alles keinen spass mehr ...


der tom

Gaert
19-11-2002, 20:59
Hallo!

Mach mal bitte ein echo von $query ... vielleicht is da immer noch ein Fehler drinne!

Und ruf auch mal "echo mysql_error();" auf und poste das mal (nach mysql_query(...) )...

Ach ja... könnte es sein, dass $link leer und / oder keine gültige Server ID ist?

meinereinerseiner
19-11-2002, 21:07
also, die query sieht so aus:
select * from Alben where ID= order by ID

das ID ist leer - so kanns ja auch nicht gehen *grrr*

mysql_error(); -> You have an error in your SQL syntax near 'order by ID' at line

logisch *grr*

die id übergebe ich mit der url -> Bsp:
http://devil/~tom/secrets/frame-alben-detail.php?ID=1056&DC=1

in dem frame-alben-detail.php, greife ich dan eigentlich per $ID drauf zu:

$query = "select * from Alben ";
$query .= "where ID=";
$query .= "$ID order by ID";

was $link angeht - ein echo zeigt nur:
Resource id #1

muss ich nicht verstehen, weil hab ich doch im Kopf per include eingebunden?
das file sieht so aus:
<?php
// MySQL-DB Einstellungen
// ======================
$database = "mp3"; //MySQL Datenbankname
$sqlhost = "192.168.100.1"; //MySQL Hostname
$sqluser = "mp3"; //MySQL Username
$sqlpass = "******"; //MySQL Passwort

$link = mysql_connect($sqlhost, $sqluser, $sqlpass);
if (!$link) {
echo mysql_errno().": ".mysql_error()."<BR>";
echo "Keine Verbindung möglich!\n";
exit;
}
$query = "use $database ";
if ( !mysql_query($query, $link)) {
echo mysql_errno().": ".mysql_error()."<BR>";
echo "Datenbank mp3 existiert nicht.<BR>\n";
exit;
}
?>







so gings im alten system wunderbar.
warum jetzt nicht mehr?

Gaert
19-11-2002, 21:33
Schau mal ob in deiner php.ini register_globals an ist...
In den neuen Versionen ist es standardmässig aus, deshalb kannst du nur noch über die Superglobalen Arrays $_GET $_POST und $_REQUEST auf die Übergebenen Werte zugreifen... das ist besser, weil deine Skripte dann schlechter manipuliert werden können!
Du solltest in diesem Fall in $_GET['ID'] und in $_REQUEST['ID'] den Wert für $ID haben.

meinereinerseiner
19-11-2002, 21:37
register_globals hab ich auf on gesetzt - brachte nix,

$query = "select * from Alben ";
$query .= "where ID=";
$query .= "$_GET['ID'] order by ID";


bringt:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /home/tom/public_html/secrets/frame-alben-detail.php on line 8

meinereinerseiner
19-11-2002, 21:42
sorry - hab vergessen das vorher einer variable zuzuordnen, mit

$plepps=$_REQUEST['ID'];

$query = "select * from Alben ";
$query .= "where ID=";
$query .= "$plepps order by ID";
$res = mysql_query($query, $link);

geht.


super - vielen DANK!

Xerxes
20-11-2002, 11:46
warum zerstückelst du deine queries eigentlich so doll? kann man doch total schlecht lesen...
wenn du ganz sauber programmieren willst, sollte die sache so aussehen:

<?php
//
// Import request variables
//
$id = ( isset( $_REQUEST['id'] ) && !isempty( $_REQUEST['id'] ) ) ? $_REQUEST['id'] : 0;

$sql = "SELECT spalte_a, spalte_b
FROM tabelle
WHERE id = '$id'
ORDER BY spalte_a
DESC";
$res = mysql_query( $sql );
?>
Zur Erkärung:
Falls $_REQUEST['id'] nicht existiert oder leer ist, wird $id mit 0 initialisiert, ansonsten bekommt es den entsprechenden Wert.
Bei "...WHERE id = '$id'..." müssen die tüddelchen (') hin, wenn du statt $id einen array nimmst, musst du den ganzen kram mit . aneinander reihen ("...WHERE id = " . $array['id'] . "....").
Außerdem sollte man bei SELECT NIE ein * nehmen, da man meistens zu viele Spalten damit kriegt. Auch wenn man vielleicht gerade alle Spalten braucht, kann es doch passieren, dass später noch ne große text-spalte dazu kommt, die dann in diesem query überflüssig ist, aber mysql runter reißt. ;)
Bei mysql_query braucht man den link nicht unbedingt angeben. Wenn nur eine Verbindung offen ist (was meistens der Fall ist), findet php den link auch alleine. :)