[PHP]Funktion funzt nicht

Mastereye

Cadet 3rd Year
Registriert
Apr. 2003
Beiträge
58
Ich habe meinen alten Code mal zusammen mit nem Kumpel und überarbeitet alles jetzt mit Funktionen und Klassen gemacht. Jetzt habe ich ein Problem mit meiner functions.php.
Da steht als Funktion folgendes drin
PHP:
51  function fillin($anzahl,$klasse ,$stunde, $lehrer, $raum, $fach, $vlehrer, $vraum, $vfach, $bemerkung) {
52  	
53  global $db;
54  
55  for ($i=0; $i<$anzahl; i++) {
56  
57  $sql = "INSERT INTO Vertretung (klasse ,stunde, lehrer, raum, fach, vlehrer, vraum, vfach, bemerkung) 
58	values (echo "'$klasse".$i."'", echo "'$stunde".$i."'",echo "$lehrer".$i."'" , echo "'$raum".$i."'", echo "'$fach".$i."'", echo "'$vlehrer".$i."'", echo "'$vraum".$i."'", echo "'$vfach".$i"'", echo "'$bemerkung".$i"'")";
59	
60   $res = $db->query($sql);
61 }
62}
Wenn ich die Datei dann auf meinem Localhost aufrufe bekomme ich diese Fehlermeldung:

Parse error: parse error, unexpected T_INC, expecting ')' in ...\functions.php on line 55

Ich habe aber keine Ahnung warum und wo da noch ein ) stehen soll.
 
also der SQL-Query String sieht mir reichlich konfus aus und an dem liegt es auch, mach's mal so:

PHP:
<?php
function fillin($anzahl,$klasse ,$stunde, $lehrer, $raum, $fach, $vlehrer, $vraum, $vfach, $bemerkung) {
	global $db;
	for ($i=0; $i<$anzahl; i++) {
		$sql = "INSERT INTO Vertretung (klasse ,stunde, lehrer, raum, fach, vlehrer, vraum, vfach, bemerkung) ";
		$sql .= "values ('".$klasse."', '".$stunde."', '".$lehrer."', '".$raum."', '".$fach."', '".$vlehrer."', '".$vraum."', '".$vfach."', '".$bemerkung."')";
		$res = $db->query($sql);
	}
}
?>

ich habe die Variable $i im Query mal außer Acht gelassen, da mir deren Funktion nicht ganz klar ist :rolleyes:
 
Original erstellt von Loopo
also der SQL-Query String sieht mir reichlich konfus aus und an dem liegt es auch, mach's mal so:

PHP:
<?php
function fillin($anzahl,$klasse ,$stunde, $lehrer, $raum, $fach, $vlehrer, $vraum, $vfach, $bemerkung) {
	global $db;
	for ($i=0; $i<$anzahl; i++) {
		$sql = "INSERT INTO Vertretung (klasse ,stunde, lehrer, raum, fach, vlehrer, vraum, vfach, bemerkung) ";
		$sql .= "values ('".$klasse."', '".$stunde."', '".$lehrer."', '".$raum."', '".$fach."', '".$vlehrer."', '".$vraum."', '".$vfach."', '".$bemerkung."')";
		$res = $db->query($sql);
	}
}
?>

ich habe die Variable $i im Query mal außer Acht gelassen, da mir deren Funktion nicht ganz klar ist :rolleyes:

Werde es nachher mal so ausprobieren, da ich gerade in der Schule sitze.
Die Variable $i soll dafür sein das automatisch weitergezählt wird. Da es für $stunde, $lehrer usw. jeweils bis zu 30 Einträge geben soll
 
Original erstellt von spaceman
mmh fehlt da nicht ein $ vor dem i++ ?? ;-)

Cu Spaceman
ganz üb ersehen :rolleyes:

Original erstellt von Mastereye
Werde es nachher mal so ausprobieren, da ich gerade in der Schule sitze.
Die Variable $i soll dafür sein das automatisch weitergezählt wird. Da es für $stunde, $lehrer usw. jeweils bis zu 30 Einträge geben soll
naja momentan würde ja immer der gleiche Wert übergeben oder nur eine Array-Definition - das müsste dann also lauten $stunde[$i] zB.
 
Danke für die Hilfe, jetzt funtionierts.
Das mit dem $i funktioniert so wie es zur Zeit ist. Bei Interesse kann ich ja sonst nochmal den ganzen Code posten.

Aber nochmal eine andere Frage: Ich möchte das die Daten in der Datenbank erst geordnet und dann ausgegeben werden.

Ich habe die Datenbank zuerst mit dem Code hier geordnet
PHP:
$sql = 'SELECT * '
        . ' FROM `vertretung` '
        . ' ORDER BY `stunde` ASC LIMIT 0, 30';

Aber wenn das ganze nachher angezeigt werden soll, ist es wieder so angeordnet wie es eingetragen wurde.
 
Zuletzt bearbeitet:
Original erstellt von Mastereye
Danke für die Hilfe, jetzt funtionierts.
Das mit dem $i funktioniert so wie es zur Zeit ist. Bei Interesse kann ich ja sonst nochmal den ganzen Code posten.

Aber nochmal eine andere Frage: Ich möchte das die Daten in der Datenbank erst geordnet und dann ausgegeben werden.

Ich habe die Datenbank zuerst mit dem Code hier geordnet
PHP:
$sql = 'SELECT * '
        . ' FROM `vertretung` '
        . ' ORDER BY `stunde` ASC LIMIT 0, 30';

Aber wenn das ganze nachher angezeigt werden soll, ist es wieder so angeordnet wie es eingetragen wurde.

???

wie meinst du das, du hast die datenbank mit dem befehl geordnet? erkläre mal genauer, meinst du damit du hast die datenbank selbst neugeordnet, oder meinst du damit du lässt dir die ausgabe sortiert anzeigen? ich nehme mal an du meinst letzters, weil das erst weder so möglich ist noch sinnvoll (für sowas gibt es ja datenbanken) und das die ausgabe dann unsortiert ist kann ich mir nicht vorstellen, wie wärs wenn du mal den kompletten code postetst.
 
Wenn ich die Daten ganz normal abrufe werden sie so angezeigt wie sie eingetragen wurden. Ich möchte aber, dass wenn man neue Daten einträgt die Tabelle in der Datenbank geordnet wird. Wie in dem Beispiel nach der Stunde.
Und dazu wollte ich diesen Code benutzen:
PHP:
$order = 'SELECT * '
           . ' FROM `vertretung` '
           . ' ORDER BY `stunde` ASC LIMIT 0, 30';
mysql_query($order);
Hier mal der ganze Code:
zuerst die functions.php
PHP:
<?
function deleteall($tabledelete) {
	
global $db;

$res = $db->query("DELETE $tabledelete");

$out = "Tabelle ".$tabledelete." erfolgreich gelöscht.";
return $out; 

}

function showtable() {
	
global $db;

   $res = $db->query("test", "select * from vertretung");
   $num = $db->num_rows($res);

   echo "<table border>";

   // Überschrift
   echo "<tr> <th>Stunde</th>";
   echo "<th>Raum</th> <th>Fach</th>";
   echo "<th>vLehrer</th> <th>vRaum</th>";
   echo "<th>vFach</th> <th>Bemerkung</th> </tr>";

   for ($i=0; $i<$num; $i++)
   {
      $stunde    = mysql_result($res, $i, "stunde");   
      $klasse    = mysql_result($res, $i, "klasse");	
      $raum      = mysql_result($res, $i, "raum");
      $fach      = mysql_result($res, $i, "fach");
      $vlehrer   = mysql_result($res, $i, "vlehrer");
      $vraum     = mysql_result($res, $i, "vraum");
      $vfach     = mysql_result($res, $i, "vfach");
      $bemerkung = mysql_result($res, $i, "bemerkung");
      $lf = $i + 1;

      echo "<tr> <td>$stunde</td> <td>$klasse</td> <td>$raum</td>";
      echo "<td>$fach </td> <td>$vlehrer</td> <td>$vraum</td>";
      echo "<td>$vfach</td> <td>$bemerkung</td> <td>$lf</td> </tr>";
   }

// Tabellenende
echo "</table>";

}

function fillin($anzahl, $stunde,$klasse, $raum, $fach, $vlehrer, $vraum, $vfach, $bemerkung) {
    global $db;
    for ($i=0; $i<$anzahl; $i++) {
        $sql = "INSERT INTO Vertretung (stunde, klasse, raum, fach, vlehrer, vraum, vfach, bemerkung) ";
        $sql .= "values ('".$stunde."', '".$klasse."', '".$raum."', '".$fach."', '".$vlehrer."', '".$vraum."', '".$vfach."', '".$bemerkung."')";
        $res = $db->query($sql);
    }
}


function show_form($anzahl) {
	
for ($i=0; $i<$anzahl; $i++) {
	
?>
		
<form Action=\"PHP_SELF\" method=POST>

<select name= <? echo "\"stunde".$i."\">"; ?>
<option></option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>

<select name= <? echo "\"klasse".$i."\">"; ?>
<option></option>
<option>klasse 1</option>
<option>klasse 2</option>
</select>

<select name=<? echo "\"raum".$i."\">"; ?>
<option></option>
<option>101</option>
<option>215</option>
<option>109</option>
<option>122</option>
<option>220</option>
</select>

<select name=<? echo "\"fach".$i."\">"; ?>
<option></option>
<option>deutsch</option>
<option>mathe</option>
<option>biologie</option>
<option>informatik</option>
<option>englisch</option>
</select>


<select name=<? echo "\"vlehrer".$i."\">"; ?>
<option></option>
<option>lehrer1</option>
<option>lehrer2</option>
<option>lehrer3</option>
<option>lehrer4</option>
<option>lehrer5</option>
</select>


<select name=<? echo "\"vraum".$i."\">"; ?>
<option></option>
<option>101</option>
<option>215</option>
<option>109</option>
<option>122</option>
<option>220</option>
</select>


<select name=<? echo "\"vfach".$i."\">"; ?>
<option></option>
<option>deutsch</option>
<option>mathe</option>
<option>biologie</option>
<option>informatik</option>
<option>englisch</option>
</select>


<select name=<? echo "\"bemerkung".$i."\">"; ?>
<option></option>
<option>FREI</option>
<option>Aufgaben</option>
</select>
<p>

<?
  }
}
?>
Die class_db.php
PHP:
<?
class db {
    // integer
    var $a_rows      = 0; 		// beinhaltet den wert, der betroffenen zeilen bei benutzung von zB UPDATE
    var $link_id     = 0; 		// id der aktuellen verbindung
    var $query_id    = 0; 		// id des aktuellen querys
    var $errno       = 0; 		// mysql errorid
    var $show_error  = 1; 		// fehler anzeigen ? (1/0)
    var $mail_error  = 0; 		// fehler mailen ? (1/0)
    var $query_c     = 0; 		// anzahl der ausgeführten querys
    var $row		 = 0;
    // string
    var $errdesc     = "";		// mysql fehlerbeschreibung
    var $hostname    = "localhost";		// mySQL-Hostname
    var $username    = "root";		// mySQL-Username
    var $password    = "";		// mySQL-Passwort
    var $database    = "test";		// mySQL-Datenbank
    var $techmail    = "";		// eMail des users, nur nötig wenn $mail_error 1 ist
    // array
    var $record      = array();	// resultierende datensätze aus mysql_fetch_array etc.

    function connect() {
        if ($this->link_id == 0) {
            $this->link_id = @mysql_connect($this->hostname,$this->username,$this->password);
            if ( !$this->link_id ) {
                $this->error("can't connect to ".$this->username."@".$this->hostname);
            }
            if ($this->database != "test") {
                $this->select_db($this->database);
            }
        }
    }

    function select_db( $database = "test" ) {
        if ($database != "test") {
            $this->database = $database;
        }
        if( !@mysql_select_db($this->database, $this->link_id) ) {
            $this->error("cannot use database ".$this->database);
        }
      }

    function query( $query ) {
        $this->query_id = @mysql_query( $query, $this->link_id );
        $this->query_c++;
        if ( !$this->query_id ) {
            $this->error("Invalid SQL: \"<i>$query</i>\"");
        }
        $this->a_rows = @mysql_affected_rows($this->query_id);
        return $this->query_id;
      }

    function fetch_row( $query_id = -1 ) {
        if ( $query_id != -1) {
            $this->query_id = $query_id;
        }
        $this->record = @mysql_fetch_row( $this->query_id );
        return $this->record;
      }

    function fetch_array( $query_id = -1 ) {
        if ( $query_id != -1) {
            $this->query_id = $query_id;
        }
        $this->record = @mysql_fetch_array( $this->query_id );
        return $this->record;
      }

     function fetch_assoc( $query_id = -1 ) {
        if ( $query_id != -1) {
            $this->query_id = $query_id;
        }
        $this->record = @mysql_fetch_assoc( $this->query_id );
        return $this->record;
      }

    function fetch_object( $query_id = -1 ) {
        if ( $query_id != -1) {
            $this->query_id = $query_id;
        }
        $this->record = @mysql_fetch_object( $this->query_id );
        return $this->record;
      }

    function quote($value) {
        return "'". preg_replace("/'/", "''", $value) ."'";
    }

    function free_result ($query_id = -1) {
        if ($query_id != -1) {
            $this->query_id = $query_id;
        }
        return mysql_free_result ($this->query_id);
      }

    function num_rows($query_id = -1) {
        if ($query_id != -1) {
              $this->query_id = $query_id;
        }
        return mysql_num_rows ($this->query_id);
      }
      
    function num_fields($query_id = -1) {
        if ($query_id != -1) {
              $this->query_id = $query_id;
        }
        return mysql_num_fields ($this->query_id);
      }
      
    function insert_id() {
        return mysql_insert_id ($this->link_id);
      }

    function stats($print = 0) {
        if ($print == 0) {
            return $this->query_c;
        } else {
            print ($this->query_c);
        }
    }

    function error() {
        $this->errdesc = mysql_error();
        $this->errno = mysql_errno();
        $message = "Error&nbsp;&nbsp;&nbsp;: $this->errdesc (#$this->errno)<br />\n";
        $message.= "Date&nbsp;&nbsp;&nbsp;&nbsp;: ".date("D, F j, Y H:i:s")."<br />\n";
        $message.= "Script&nbsp;&nbsp;: ".$_SERVER["REQUEST_URI"]."<br />\n";
        $message.= "IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: ".$_SERVER["REMOTE_ADDR"]."<br />\n";
        $message.= "Host&nbsp;&nbsp;&nbsp;&nbsp;: ".gethostbyaddr($_SERVER["REMOTE_ADDR"])."<br />\n";
        $message.= "Querys&nbsp;&nbsp;: ".$this->query_c."<br />\n";
        if ($this->show_error == 1) {
            print("
            <table width=\"700\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">
             <tr>
              <td width=\"700\" style=\"font-family:Tahoma;font-size:8pt;letter-spacing:1px;background:#ffffff;\">$message</td>
             </tr>
            </table>");
        }
        if ($this->mail_error == 1) {
            @mail($this->techmail,"mySQL::error",$message,"From: X-Mailer");
        }
    }
}

?>
formular.php
PHP:
<html>
<title>Formular</title>
<body>
<?
include ("db_class.php");
include ("functions.php");

$db = new db; // klasse initialisieren
$db->connect(); // verbinden.

$anzahl = 30;

show_form($anzahl);
//fillin($anzahl,$klasse ,$stunde, $lehrer, $raum, $fach, $vlehrer, $vraum, $vfach, $bemerkung);

?>

<input type="submit" value=" Absenden ">
<input type="reset" value=" Abbrechen">
</form>

</body>
</html>
und zuletzt die show_all.php in der die Dateien geordnet angezeigt werden sollen
PHP:
<html>
<title>Formular</title>
<body>
<?
include "functions.php";

showtable();

?>

</body>
</html>

Es funktioniert noch nicht komplett. Das Abschicken des Formulars geht noch nicht und das Anzeigen dann natürlich auch nicht. In der PHP Manual steht ein <form...>
Befehl mit PHP_SELF so drin
PHP:
<form ACTION=\"$PHP_SELF\" METHOD=POST>
Aber da gibts dann auch immer eine fehlermeldung, dass ich keine Berechtigung für Zugriff auf \"$PHP_SELF\" habe.
 
PHP:
function showtable()
{
	global $db;
	
	//$res = $db->query("test", "select * from vertretung");
	//nach deiner Klasse wird nur 1!!! Variable übergeben
	
	$result = $db->query('SELECT * FROM vertretung ORDER BY stunde ASC'); //Das LIMIT 0,30 lass ich mal bewusst weg
	
	//echo "<table border>"; //???
	echo "<table border=\"1\">";
	
	// Überschrift
	echo "<tr> <th>Stunde</th>";
	echo "<th>Raum</th> <th>Fach</th>";
	echo "<th>vLehrer</th> <th>vRaum</th>";
	echo "<th>vFach</th> <th>Bemerkung</th> </tr>";
	
	/*
	//Das wird nicht gebraucht, du hast das ganze doch bereits sortiert!!! aufgerufen
	for ($i=0; $i<$num; $i++)
	{
		$stunde    = mysql_result($res, $i, "stunde");   
		$klasse    = mysql_result($res, $i, "klasse");    
		$raum      = mysql_result($res, $i, "raum");
		$fach      = mysql_result($res, $i, "fach");
		$vlehrer   = mysql_result($res, $i, "vlehrer");
		$vraum     = mysql_result($res, $i, "vraum");
		$vfach     = mysql_result($res, $i, "vfach");
		$bemerkung = mysql_result($res, $i, "bemerkung");
		$lf = $i + 1;
		
		echo "<tr> <td>$stunde</td> <td>$klasse</td> <td>$raum</td>";
		echo "<td>$fach </td> <td>$vlehrer</td> <td>$vraum</td>";
		echo "<td>$vfach</td> <td>$bemerkung</td> <td>$lf</td> </tr>";
	}
	*/
	
	$counter = 0;
	while($row = $db->fetch_row($result))
	{
		$counter++;
		echo "<tr> <td>".$row['stunde']."</td> <td>".$row['klasse']."</td> <td>".$row['raum']."</td>";
		echo "<td>".$row['fach']."</td> <td>".$row['vlehrer']."</td> <td>".$row['vraum']."</td>";
		echo "<td>".$row['vfach']."</td> <td>".$row['bemerkung']."</td> <td>".$counter."</td> </tr>";
	}
	
	// Tabellenende
	echo "</table>";
}

so sollte es gehen.

mal im Vertrauen, die Datenbank-Klasse hat verdächtige Ähnlichkeiten mit der des vB-Boards, die ich im übrigen (die Klasse) nicht sonderlich gut finde, da halte ich die datenbak-klasse vom phpbb2 für bedeutend besser, das aber ist jetzt nur meine persönliche Meinung. ich empfehle dir aber mal SQL zu lernen (an der for-schleife zu erkennen ;)) und nicht nach dem CnP Prinzip zu arbeiten, denn warum solltest DU die Einträge sortieren, genau das ist eigentlich der sinn einer Datenbank, dass die Einträge so geliefert werden wie du sie brauchst, sonst könnte man auch gleich mit Textdateien arbeiten und selbst alles machen.

Sind alles nur Tipps, schließlich hat jeder mal irgendwann bei 0 angefangen.
 
Zuletzt bearbeitet:
Danke für den Code, werds gleich mal ausprobieren.
Die Klasse habe ich von Tutorials.de, da ich mich damit ja noch nicht richtig auskenne ;).
Die Klassen und Funktionen habe ich benutzt da der alte Code fast 100 kb hatte und ich das alles kürzen wollte.
Mein Vertretungsplan ist das erste Projekt mit PHP&MYSQL. Habe deshalb nicht soviele Grundlagen darüber.

Und nochmal zum Sortieren:

Wenn ich etwas zusätzlich in die Datenbank eintrage wird es doch nur hinten ran geschrieben. Wenn ich die Daten dann abrufe, sind sie in der Reihenfolge wie ich sie eingetragen habe. Beispiel:
Wenn ich erst Daten für Stunde 1,3,4,5 eintrage und nachträglich noch welche für Stunde 2 dann steht das doch hinter den anderen einträgen.
Bei der Ausgabe soll es denn aber sortiert sein: 1, 2, 3, 4, 5.
 
um die Ausgabe zu sortieren brauchst du ja nur im SELECT-Query hinten "ORDER BY " anhängen :)
 
Zurück
Oben