ausgelagerter Query funktioniert nicht mehr

Kalito

Erfahrenes Mitglied
Hallo,

ich bin im begriff meine HP umzustrukturieren und hatte unter anderem vor die SQL Querys zu dynmaisieren.

ich habe eine index.php
PHP:
include('../DB_zugang.php');
include ('include/php/check.php');
include ('include/php/function.php');

if($connection = db_connect()){

include ('include/php/sql.php');
.
.
.
in der db_zugang sind die Datenbankverbindungen, chek.php ist für die Sessionverwaltung und function.php für sonstige Funktionen. In der sql.php will ich alle querys unterbringen. Kann ich dies auch außerhalb der IF schleife machen oder ist es sorum besser?

in die Index.php binde ich dann die Seite ein, die der User auswählt. Hier wäre es Profil:
PHP:
include('include/php/check.php');
if(!function_exists('db_connect'))
     header('Location: index.php');

$user  = $_SESSION['username'];
anzeige($user);
//Mitgliederdaten
.
.
.

wie gesagt die der Qery funktioniert nicht. Ich bekomme folgende Fehlermeldung: "mysql_query(): supplied argument is not a valid MySQL-Link resource in...". Das deutet ja darauf hin, das was fehlt.

Die sql.php
PHP:
    function anzeige($user){
        $query_m = mysql_query("SELECT * FROM ".DB_TABLE_M." WHERE MID='".$user."'", $verbindung);
        $profil = mysql_fetch_array($query_m);

        return $profil;
    }
Die Variable DB_TABLE_M und $verbindung werden in dem DB_zugang definiert und $user sollte eig übernommen werden. Als ich den Query, so wie er war noch in der profil.php hatte, hat er funktioniert. erst als ich Ihn in eine Funktion gepackt habe, meckert er rum.

Was mache ich hier falsch?

Danke und gruß
 
$verbindung ist vermutlich global definiert in sql.php? Dann solltest du das so lösen:

PHP:
function anzeige($user){
        global $verbindung; // Könnte aber laut deiner Beschreibung weiter oben auch $connection sein
        $query_m = mysql_query("SELECT * FROM ".DB_TABLE_M." WHERE MID='".$user."'", $verbindung); // hier ggf. $connection eintragen
        $profil = mysql_fetch_array($query_m);

        return $profil;
    }

Was ist das DB_TABLE_M eigentlich? Ein define()?
 
Jap ist eine define, die ich aber über die DB-Zugang includiere. Ich schaue mir mal deinen Vorschlag an. Danke
 
Wenn du den Fehler so nicht finden kannst, dann bau einfach ein mysql_error() ein und schau die Fehlermeldung an:

PHP:
$query_m = mysql_query("SELECT * FROM ".DB_TABLE_M." WHERE MID='".$user."'", $verbindung) or die(mysql_error());
 
$verbindung in der funktion global setzen hat geholfen. Danke nochmal.

Jetzt werden aber das Array nicht angezeigt.
Ich rufe die Funktin am anfang der Seite auf und weiter später möchte ich die Arrays wiefolgt anzeigen:
PHP:
echo $profil['geburtstag'];

Aber wird halt nicht angezeigt
 
mysql_fetch_array() gibt dir ein Assoziatives Array zurück, dieses müsstest du in einer Schleife durchlaufen und eventuell neu vergeben.
Wieviele Datensätze werden bei diesem Query denn zurückgegeben? Wenn es nur einer ist kannst du dir mysql_fetch_row() zu herzen führen, oder gleich mit Objekten arbeiten.
 
Naja, es ist ja nur ein Datensatz. Mein Problem ist, das dieser halt nicht angezeigt wird.
meine Funktion ist in einer sql.php
PHP:
<?php
    function anzeige($user){
        global $verbindung;
        $query_m = mysql_query("SELECT * FROM ".DB_TABLE_M." WHERE MID='patrick.kahle'", $verbindung);
        $profil = mysql_fetch_row($query_m);

        return $profil;
    }
 ?>

in meiner profil.php habe ich es wiefolgt gelöst
PHP:
$user  = $_SESSION['username'];
anzeige($user);
.
.
.
<td>Name</td>
<td><?php echo $profil['vorname'].' '.$profil['nachname'] ?></td>

Aber wie gesagt, die echos werden nicht angezeigt?`

Wie mache ich das mit Objekten? Es sind etwa 40 Datensätze in einer Tupel

Gruß
 
Müsste es in profil.php nicht so lauten:

PHP:
$user  = $_SESSION['username'];
$profil = anzeige($user);
.
.
.
<td>Name</td>
<td><?php echo $profil['vorname'].' '.$profil['nachname'] ?></td>
 
klappt aber leider nicht.
hab die return-anweisung mal um array erweitert:
PHP:
return array($profil);

Aber nach wie vor wird nichts angezeigt.

Wenn ich aber print_r($profil) eingebe und ausführe, bekomme ich das Array angezeigt. wenn ich echo $profil nehem, bekomme ich nur das Wort Array
 
Zuletzt bearbeitet:
Jetzt funktionierst. Durch das mysql_fetch_rows waren die zuweisungen numerisch und irgendwie hatte ich ein mehrdimensionales Array geschaffen. Nochmal Danke für die Hilfe
 
Zurück