FilmDB mit Checkbox und auswahlmenue

Gody1989

Grünschnabel
Hallo ich habe angefangen eine Film Datenbank zu schreiben leider kommt es jetzt immer zu einer zeitüberschreitung

Code:
Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\film\eintragen.php on line 54

wär aba nett wenn jem auch allgemein mal über das script guckt wenn er Zeit hat =) danke schonmal

PHP:
<?php

	include ("functions.inc.php");

	//Zum Eintragen neuer Datensätze in das Gästebuch
	
	// Prüfen, ob sich die Seite selbst Aufgerufen hat
	if ( isset($_REQUEST["do"]) && $_REQUEST["do"] == "insert")
	{
		// Die Seite hat sich selbst aufgerufen
		
		// Pflichtfeldkontrole
		
		$error_msg	=	"";
		
		if( $_REQUEST["Titel"]=="")
		{
			$error_msg	= "Bitte geben Sie einen Titel an<br>";
		}
		
		if($error_msg == "")
		{
			// Alles Okay
			
			// Zugriff auf Datenbank
			
			mysqlconnect();
			
			// INSERT
			
			//Film eintragen
			$query	=	"INSERT INTO film_tb (Titel, Handlung, Laenge, FSK) VALUES( ";
			$query	.=	" '" . $_REQUEST["Titel"] . "', ";
			$query	.=	" '" . $_REQUEST["Handlung"] . "', ";
			$query	.=	" '" . $_REQUEST["Laenge"] . "', ";
			$query	.=	" '" . $_REQUEST["FSK"] . "' ";
			$query	.=	" ) " ;
			
			mysql_query($query);
			
			$Film = mysql_insert_id();

			// Genre eintragen
						
			if(isset($_REQUEST['genre']))
			{			
			$genre = $_REQUEST['genre'];
			$i = count($genre, COUNT_RECURSIVE);

			$sql = "INSERT INTO film_genre (ID_Film, ID_Genre) VALUES( ";

			do {
			$sql.= " '{$Film}', {$genre[$i]}";
			}while ($i >= 0);
			$sql .=	" ) " ;
			echo $query;			
			echo $sql;

			} 
		}

			//------------------------------------------------------------------------------------
			
			// In die Datenbank eintragen
			
			$result = mysql_query($query);
			
			if( ! $result )
			{
				die("Konnte den Datensatz nicht eintragen: " . mysql_error() );
			}
			
			$result = mysql_query($sql);
			
			if( ! $result )
			{
				die("Konnte den Datensatz nicht eintragen: " . mysql_error() );
			}
			
			
			// wechsel auf index
			
			
			die;
			
	}
		
	

?>
	
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="de">

<head>
	<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
	<meta name="language" content="de"/>
	
	<title>Filmdatenbank</title>
	<link rel="stylesheet" type="text/css" href="css/alles.css" media="screen, projection" />
</head>

	<body>
	<div id="alles">
	
	<div id="header">
	<!-- header --></div>
	
	<div id="körper">
			
				<div id="nav">
			
				<?php 
					include "nav.php";
				?>
				
				<!-- nav --></div>
				
					<div id="inhalt">
					
					<h1 class="mitte"> | Film Eintragen | </h1>
					
					<form action="<?php echo $_REQUEST["PHP_SELF"]; ?>" method="POST">
					<p>
							<p>
							<h3>Titel</h3>
							
							<p>Titel:&nbsp;<input name="Titel" maxlength="255" size="40"></p>
							</p>

							<p>	
								<h3>Genre</h3>
									
									<?php
									
										// DB-Verbindung
										mysqlconnect();
										
										// SQL-Abfrage Ausführen
										$res = mysql_query("select * from genre_tb");
										
										// Anzahl der Datensätze bestimmen
										$num = mysql_num_rows($res);
										
										// Datensätze ermitteln, im Array speichern und ausgeben
										while ($dsatz = mysql_fetch_assoc($res))
										{
											echo '<p><input type="checkbox" name="genre[ ' . $dsatz["Genre_ID"] . ' ]" value=" ' . $dsatz["Genre_ID"] . ' " /> ' . $dsatz["genre"] . ' </p>';
										}  
										
									?>  
									
							</p>
	
							<p>
								<h3>Handlung</h3>
						
								<p><textarea name="Handlung" cols="70" rows="20"></textarea></p>
							</p>
	
							<p>
								<h3>L&auml;nge</h3>
				
								<p>L&auml;nge&nbsp;<input name="Laenge" size="4" maxlength="3" />&nbsp;in Minuten</p>
							</p>
	
							<p>
								<h3>Altersfreigabe</h3>
		
								<p><select name="FSK">
									<option value="0">
									0 </option>
									<option value="6">
									6 </option>
									<option value="12">
									12 </option>
									<option value="16">
									16 </option>
									<option value="18">
									18 </option>
									</select>&nbsp;FSK</p>
							</p>
							<input type="hidden" name="do" value="insert">
							<input type="submit" value="Senden" /><input type="reset" />
					</p>
					
					<p></p>
					
					</form>
					
					
					<!-- inhalt --></div>
						
					<p class="boden">&copy; 2010 - Patrick Grygier | Filmdatenbank</p>
						
	<!-- körper --></div>
						
	<!-- alles --></div>
	</body>
</html>
 

Anhänge

Zuletzt bearbeitet:
Grüße,

also soweit ich das beurteilen kann, liegt das Problem an dieser Zeile:

PHP:
<?php
            do {
            $sql.= " '{$Film}', {$genre[$i]}";
            }while ($i >= 0); 
?>

:eek: grad gesehen, dass die Fehlermeldung gleicher Meinung ist :D

Das Problem ist das diese "Schleife" immer ausgeführt wird, wenn etwas in die DB geschrieben wird und da ist $i durch deine obige Zeile:

PHP:
<?php
$i = count($genre, COUNT_RECURSIVE); 
?>

count() ergibt bei optionalem Parameter meines Wissens nach trotzdem nur eine Zahl.
Demzufolge wird $i nicht kleiner und du erzeugst eine Endlosschleife.
 
Aber count liefert den die anzahl der arrays zurück also kann man diese Zahl z.B. bei drei gesetzden doch auch abzählen

weiß jem ne andere lösung= habe es mit na for schleife probiert funktioniert aba net so ganz
 
Grüße nochmal,

die for-Schleife ist schon der richtige Ansatz, denn dadurch wird die Variable $i verändert und du erzeugst keine Endlosschleife (ich hab hier allerdings mal mit $x gearbeitet und mit $i als Bedingung).
Hab da schon mal was vorbereitet:

PHP:
<?php
$genre = $_REQUEST['genre']; 
$i = count($genre);

$sql = "INSERT INTO film_genre (ID_Film, ID_Genre) VALUES ";
for($x=0;$x<=$i-1;$x++) {
	
	
	if($i=="1" || $x==$i) {
		$sql.= "('".$Film."', '".$genre[$x]."')";
	} else {
		$sql.= "('".$Film."', '".$genre[$x]."'),";
	}
	
}

//Query Ausführen
$Einfügen = mysqli_query($db, $sql);
?>

Ich hab jetzt absichtlich nicht auf den Fall hin geprüft, dass $i auch "0" sein kann, da du das Ganze ja schon in deinem Code per "isset" getan hast.
 
$db steht für deine Datenbank Resource bzw. Verbindung, welche du per mysqli_connect() bekommen hast.

PHP:
<?php
$db = mysqli_connect("localhost", "username", "password");
?>
 
Grüße,
bei normalem Gebrauch sollte man das Ganze als präventive Maßnahme ansehen.
Sollte dein Vorhaben etwas komplexer werden, könnte es ja auch sein, dass mehrere Datenbankverbindungen aufgebaut werden und du musst der "Funktion" dann auch übermitteln bezüglich welcher Verbindung was ausgeführt werden soll.

Zusammenfassend könnte man sagen, dass man es sich so angewöhnen sollte, da sich das Skript dann später beliebig erweitern lässt, ohne große Teile des Codes zu verändern.
 
Zurück