MySQL Fehler bei der Ausgabe eines Arrays

TMG

Mitglied
Hi,

ich möchte mehrere Checkboxes anzeigen lassen und die Werte und Namen der Checkboxes aus der Datenbank holen.
Die Rubriken auszulesen funktioniert einzeln, aber in Verbindung mit den Checkboxes klappt das irgendwie nicht. Ich bekomme dabei folgende Fehlermeldungen:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in F:\minixampp\htdocs\anzeige_aufgeben.php on line 208

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in F:\minixampp\htdocs\anzeige_aufgeben.php on line 214

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in F:\minixampp\htdocs\anzeige_aufgeben.php on line 220#


Die hängen sicherlich zusammen und haben mit einem Problem zu tun, was mit Sicherheit weiter oben in der Datei liegt. Aber ich konnte ihn nach mehrmaligem Prüfen nicht finden. Hier die betreffenden Stellen im Quellcode:


PHP:
Inhalt der Anzeige:
<input type="text" name="anzeigentext" size=40 maxlength=255>
<?php
$i=0;
for ($i < count($p_rubriknummer))
{$i++;
?><input type="checkbox" name="rubrik[]"
value="<?php
echo $p_rubriknummer[$i]?>"><?php
echo $p_rubrikbezeichnung[$i]."<br>";
}
?>
<br>
<input type="submit" name="ausführen" value="registrieren">
</form>
<?php
}

function gib_rubriken()
{
//alle rubriknummern und -bezeichnungen auslesen
$query="select rubriknummer,rubrikbezeichnung from rubrik order by rubrikbezeichnung";
$ergebnis=mysql_query($query,$verbindung);
if (!$ergebnis)
	echo mysql_error();

//array in $rubrik schreiben
$rubrik=array();
while($zeile=mysql_fetch_array($ergebnis))
{
$rubbez=$zeile['rubrikbezeichnung'];
$rubnr=$zeile['rubriknummer'];
$rubrik['$rubbez']=$rubnr;
}
mysql_free_result($ergebnis);
}



?>

Und hier der gesamte Quellcode der Datei.


PHP:
<HTML>
<title>Anzeigen aufgeben</title>
<BODY bgcolor="oofbff">
<P>
<?php

//Beginn
echo "Anzeige aufgeben <br><br>";
echo"<a href=\"./index.php\">Zurueck</a><br><br>";
if(isset($_get["ausführen"]))
anzeige_eintragen();
formular();



/**
*von hier werden die Funktionen datenbank_verbinden(),
*gib_rubriken() und formular_aufbauen() aufgerufen
*/
function formular()
{
$verbindungskennung=datenbank_verbinden();
gib_rubriken($rubriknummer,$rubrikbezeichnung,$verbindungskennung);
formular_aufbauen($rubriknummer,$rubrikbezeichnung);
}



/**
*von hier werden die Funktionen Datenbank_verbinden(),
*check_nickname(),check_email(),check_eintraege() u.
*schreib_inserat() aufgerufen
*/

function anzeige_eintragen()
{
$verbindungskennung=datenbank_verbinden();
if(check_nickname($verbindungskennung)
	&&check_email($verbindungskennung)
	&&check_eintraege())
schreib_inserat($verbindungskennung);
}

/**
*baut Verbindung zur Datenbank auf
*Verbindungskennung an die aufgerufene Funktion zurück
*@return resource Verbindungskennung
*/
function datenbank_verbinden()
{
$db_server="localhost";
$db_user="root";
$db_passwort="";
$datenbank="projekt";

//mit der Datenbank verbinden
$verbindung=mysql_connect($db_server,$db_user,$db_passwort,$datenbank);
if(!$verbindung)
die("Der Server kann nicht erreicht werden.");
	if(!mysql_select_db($datenbank,$verbindung))
	die("Die Datenbank kann nicht angesprochen werden.");
echo "$datenbank verbunden";
return $db_verbindung;
}







/**
*überprüft ob nickname schon in tabelle inserent
*vorhanden ist und gleichzeitig die vom benutzer eingegebene 
*email nicht passend ist
*@param resource $p_verbindungskennung DB Verbindung
*qreturn bool ist false, falls nickname schon vorhanden
*/
function check_nickname($p_verbindungskennung)
{
$query=sprintf("select nickname from inserent
	where nickname='%s',
	and email!='%s'",
	$_get["nickname"],
	$_get["email"]);
$ergebnis=mysql_query($query,$p_verbindungskennung);
if(mysql_num_rows($ergebnis)!=0)
{
echo "Fehler! Der Name ist leider schon vergeben.
Waehlen sie bitte einen anderen Namen oder die passende email-Adresse <br><br>";
Return false;
}
return true;
}


/**
*überprüft ob alle formularfelder ausgefüllt wurden
*und ob zw ein und drei rubriken vom benutzer
*ausgewaehlt wurden
*@return bool ist false, falls fehlende oder falsche Eingabe
*/

function check_eintraege()
{
if (empty($_get["nickname"]))
{
	echo "Fehler! Sie haben keinen Namen angegeben <br><br>";
	return false;
}
if (empty($_get["email"]))
{
	echo "Fehler! Sie haben keine email angegeben <br><br>";
	return false;
}
if (empty($_get["anzeigentext"]))
{
	echo "Fehler! Sie haben keinen Anzeigentext angegeben <br><br>";
	return false;
} 
if (!isset($_get["rubrik"]))
{
	echo "Fehler! Sie haben keine Rubrik gewählt<br><br>";
	return false;
}
if(count($_get["rubrik"])>3)
{echo "Sie können nur maximal 3 Rubriken wählen <br><br>";
return false;
}return true;
}

/**
*ermittelt, ob Kombination Nickname & 
*Email schon in Tabelle inserent vorhanden
*,falls ja dann Anzeige eintragen
*Inserenten zugeordnet, falls nein: Anzeige wird in Datenbank geschrieben
*ein neuer Inserent wird angelegt und diesem wird Anzeige zugeordnet
*@param resource $p_verbindungskennung
*/

Function schreib_inserat($p_verbindungskennung)
{
$query=sprintf("Select inserentennummer From inserent
		Where nickname='%s',	
		And email='%s'",
		$_get['nickname'],
		$_get['email'] );
$ergebnis=mysql_query($query,$p_verbindungskennung);
If (mysql_num_rows($ergebnis)!=0)
{
//Inserent ist schon in Datenbank
$zeile=mysql_fetch_array($ergebnis);
$inserentennummer=$zeile['inserentennummer'];
}
Else
{
//neuen Inserenten aufnehmen
$query=sprintf("insert into inserent
		Set nickname='%s',
		email='%s'",
		$_get['nickname'],
		$_get['email']);
$ergebnis=mysql_query($query,$p_verbindungskennung);
$inserentennummer=mysql_insert_id();
}
//Anzeige abspeichern, Anzeigennummer merken
$query=sprintf("insert into anzeige
		Set anzeigentext='%s',
		      anzeigendatum=CURDATE(),
		      inserentennummer=$inserentennummer",
		$_get['anzeigentext']);
$ergebnis=mysql_query($query,$p_verbindungskennung);
$anzeigennummer=mysql_insert_id();

//zugeordnete Rubriken abspeichern
$rubrikarray=array();
$rubrikarray=$_get['rubrik'];
$i=0;
While ($i<count($rubrikarray))
{
	$query="insert into veroeffentlichen
	Set rubriknummer=$rubrikarray[$i],
	Anzeigennummer=$anzeigennummer";
$ergebnis=mysql_query($query,$p_verbindungskennung);
$i++;
}
Echo "Ihre Anzeige wurde eingetragen. <br><br>";
Mysql_close($p_verbindungskennung);
}

function formular_aufbauen ($p_rubriknummer,$p_rubrikbezeichnung)
{
?>
<form action="<? $_server['PHP_SELF'] ?>" method="get">
<H4 align=center> <font color="646464"><small><marquee behaviour=alternate>Eintragung der Anzeige...
</h4></small></font color></marquee>
<hr width=80%>

Nickname:<input type="text" name="nickname"> 
E-mail<input type="text" name="email">
<br>
Inhalt der Anzeige:
<input type="text" name="anzeigentext" size=40 maxlength=255>
<?php
$i=0;
for ($i < count($p_rubriknummer))
{$i++;
?><input type="checkbox" name="rubrik[]"
value="<?php
echo $p_rubriknummer[$i]?>"><?php
echo $p_rubrikbezeichnung[$i]."<br>";
}
?>
<br>
<input type="submit" name="ausführen" value="registrieren">
</form>
<?php
}

function gib_rubriken()
{
//alle rubriknummern und -bezeichnungen auslesen
$query="select rubriknummer,rubrikbezeichnung from rubrik order by rubrikbezeichnung";
$ergebnis=mysql_query($query,$verbindung);
if (!$ergebnis)
	echo mysql_error();

//array in $rubrik schreiben
$rubrik=array();
while($zeile=mysql_fetch_array($ergebnis))
{
$rubbez=$zeile['rubrikbezeichnung'];
$rubnr=$zeile['rubriknummer'];
$rubrik['$rubbez']=$rubnr;
}
mysql_free_result($ergebnis);
}



?>
</body>
</html>


Ich hoffe mir kann jemand helfen.
Vielen Dank im Voraus.

LG,
TMG
 
Hi!

Ich hab jetzt nicht genau nach deinem Fehler gesucht, aber ich würds so machen:

- Funktion zum Auslesen der Daten aus der DB -
In $line wird das Ergebnis-Array gespeichert. Mit den beiden Schleifen werden Zeilen und Spalten ausgegeben.
PHP:
<?php
 include_once("db.ini.php"); 

// Funktion zum Auslesen der Daten / in der db.ini.php stehen die Verbindungsdaten
function forumfrage($a)
{
    	global $dbhost, $dbuser, $dbpass, $db;

    if ($connect = mysqli_connect($dbhost, $dbuser, $dbpass, $db)){
         $querysql = $a;

    	 $result = mysqli_query($connect, $querysql);
         $col = mysqli_num_fields($result);
         $line = mysqli_fetch_array($result);

    while ($line = mysqli_fetch_array($result)){

    for ($i=1; $i < $col; $i++){
       echo  "<input type='checkbox' name='rubrik[]' value='".$line[$i]."'>".$line[$i]."<br>";
       }
     }

mysqli_close($connect);

    }else{
           echo "Datenbankverbindung gescheitert!";
    }
}
?>

Übergabe des Querys und Ausführung der Funktion (Ausgabe der Checkboxen)
PHP:
<?php
         $sql= "SELECT rubriknummer, rubrikbezeichnung ".
                  "FROM rubrik ".
                  "ORDER BY rubrikbezeichnung";

        forumfrage($sql);
?>

Hab das mal mit ein paar Daten aus meiner DB probiert und das geht!
Hoffe ich konnte dir helfen!
Grüße,
Jacka
 
Zuletzt bearbeitet:
Allgemein lässt die Fehlermeldung darauf schließen, dass eine vorhergehende Datenbankabfrage fehl schlug. Anhand der Zeilennummern sollte die fehlerhafte Abfragedeklaration schnell gefunden sein.
 
Zurück