Undefined offset bei explode()

BadKiss

Mitglied
Hallo,

ich hoffe, hier kann mir jmd helfen, da ich an dem Problem schon ewig lang rumprobiere.
Ich bin dabei eine kleine "Bibliothek" zu coden und wollte nun das "Ausleihen" codieren.
Ich poste am Besten auch einmal ein paar Screenshots dazu, damit es hoffentlich verständlicher ist.

--> Screenshot <--

Schritt 1: Hier wähle ich einen Buchtitel aus
Schritt 2: ID und Buchtitel sind richtig; Nun wähle ich eine Person aus, die das Buch ausleihen will und für wie lange
Schritt 3: Buchtitel wird plötzlich zur ID und Eintrag in ID verschwindet und erzeugt 'Undefinded offset: 1'

Hier noch der Codeausschnitt:
PHP:
if(isset($_GET['lend'])) {
	if($_GET['lend'] == 'booktitle') {
		$sql = "SELECT * 
			FROM user 
			ORDER BY name ASC;";
		$result = mysql_query($sql) OR die(mysql_error());
		$anzahl = mysql_num_rows($result);
			
		$parts_bt = explode(":", $_POST['booktitle']);
		echo 'ID: '.$book_id = $parts_bt[0];
		echo '<br />Buchtitel: '.$booktitle = $parts_bt[1];
		$date = date('d.m.Y');
		$days = array('7','14','28');
						
		if(mysql_num_rows($result)) {
			if(isset($_GET['do'])) {
				if($_GET['do'] == 'order') {
					$parts = explode(":", $_POST['lender']);
					$lid = $parts[0];
					$ln = $parts[1];
					$lvn = $parts[2];
									
					echo 'Folgende Daten wurden erfolgreich gespeichert:<br /><br />
					<div class="lend_left" style="line-height:14px;">
						Buch: <br />
						Ausleiher: <br />
						Ausleihdatum: <br />
						Ausleihdauer:
					</div>
					'.$_POST['booktitle'].'<br />
					'.$ln.' '.$lvn.'<br />
					'.$_POST['lenddate'].'<br />
					'.$_POST['duration'].' Tage
					 ';
				}
			} else {
				echo '<br />Bitte Felder ausf&uuml;llen:<br /><br />';
				echo '<form method="post" action="http://'.$_SERVER['SERVER_NAME'].'/bapothek/lend.php?what=book&lend=booktitle&do=order">
				<div class="lend_left">
					Buch: <br />
					Ausleiher: <br />
					Ausleihdatum: <br />
					Ausleihdauer: <br />
				</div>
				<input class="noneinput" type="text" name="booktitle" value="'.$booktitle.'" readonly="readonly" /><br />
				<select name="lender" size="1">';
				while($row = mysql_fetch_assoc($result)) {
					echo $lenderid = $row['ID'];
					echo '<option value="'.$lenderid.':'.$row['name'].':'.$row['vorname'].'">'.$row['name'].' '.$row['vorname'].'</option>';
				}
				echo '</select><br />
				<input class="noneinput" type="text" name="lenddate" value="'.$date.'" /><br />';
				echo '<input class="smallinput" type="int" name="duration" value="" /> Tage<br />
				<input type="submit" name="order" value="Ausleihen" />
				</form>
				 ';
			}
		}
	}
} else {
	$sql = "SELECT * 
		FROM medien, buecher 
		WHERE medien.art = 1 AND medien.id = buecher.medien_id 
		GROUP BY title
		ORDER BY title ASC;";
	$result = mysql_query($sql) OR die(mysql_error());
	$anzahl = mysql_num_rows($result);
					
	echo 'Welches Buch m&ouml;chten Sie ausleihen?<br /><br />';
				
	if(mysql_num_rows($result)) {
		echo '<form method="post" action="http://'.$_SERVER['SERVER_NAME'].'/bapothek/lend.php?what=book&lend=booktitle">
			<select name="booktitle" size="1">';
			while($row = mysql_fetch_assoc($result)) {		
				$book_id = $row['medien_id'];
				echo '<option value="'.$book_id.':'.$row['title'].'">'.$row['title'].'</option>';
			}
			echo '</select>
			<input type="submit" name="send" value="Ausleihen" />
			</form>';
	} else {
		echo 'Es wurden noch keine B&uuml;cher eingetragen.';
						
		echo '<br /><a href="book_administration.php">Zur&uuml;ck zur &Uuml;bersicht</a>';
	}
	echo '
	  <br /><a href="lend.php">Zur&uuml;ck zur &Uuml;bersicht</a>';
}

Ich hoffe, der Code ist verständlich.
$lender ist die Person, die das Buch ausleihen will

PHP:
<select name="booktitle" size="1">';
		while($row = mysql_fetch_assoc($result)) {		
			$book_id = $row['medien_id'];
			echo '<option value="'.$book_id.':'.$row['title'].'">'.$row['title'].'</option>';
		}
		echo '</select>

Hier wähle ich das Buch aus und speichere in die value die ID und den Titel und trenne sie mit : ab.

PHP:
$parts_bt = explode(":", $_POST['booktitle']);
echo 'ID: '.$book_id = $parts_bt[0];
echo '<br />Buchtitel: '.$booktitle = $parts_bt[1];

Hier übergebe ich die ID und den Buchtitel an eine Variable. Bis zu Schritt 2 sind diese auch korrekt, allerdings springt im Schritt 3 dann irgendwie der Buchtitel auf den Index 0 und der aktuelle Index 0 (die ID) wird 'gekickt' und verschwindet, somit entsteht das offset bei Index 1.


Ich tüfftle schon sehr lange an dem Problem und komm einfach nicht drauf, woran es liegen könnte :(
Ich hoffe, jmd kann mir helfen, da mich der Error schon etwas auf die Senkel geht ;)


Lg,
BadKiss~
 
PHP:
$parts_bt = explode(":", $_POST['booktitle']);
echo 'ID: '.$book_id = $parts_bt[0];
echo '<br />Buchtitel: '.$booktitle = $parts_bt[1];

Grobe Vermutung ist, das es an diesem Teil liegt. Die Variablenzuordnugn ist einfach nicht sauber.

Wenn ich das hier mal teste:

PHP:
<?php
$foo = '12';

echo 'Es ist '.$time = $foo.' Uhr';

echo '<br>'.$time;
?>

Dann ist $time NICHT 12, sondern 12 Uhr.

Ansonsten gib doch mal testweise $_POST['booktitle'] genau vor dem explode aus, damit du siehst, welche Daten da drin sind.
 
Kannst du bitte mal den Source auf die Zeilen 430-450 eingrenzen?
Wenn das in eine Schleife fällt, dann bitte die Schleife komplett ^^

PHP:
if(isset($_GET['lend'])) {
	if($_GET['lend'] == 'booktitle') {
		$sql = "SELECT * 
			FROM user 
			ORDER BY name ASC;";
		$result = mysql_query($sql) OR die(mysql_error());
		$anzahl = mysql_num_rows($result);
						
		$parts_bt = explode(":", $_POST['booktitle']);
		echo 'ID: '.$book_id = $parts_bt[0];
		echo '<br />Buchtitel: '.$booktitle = $parts_bt[1];
		$date = date('d.m.Y');
		$days = array('7','14','28');
						
		if(mysql_num_rows($result)) {
			if(isset($_GET['do'])) {
				if($_GET['do'] == 'order') {
					$parts = explode(":", $_POST['lender']);
					$lid = $parts[0];
					$ln = $parts[1];
					$lvn = $parts[2];
Zeile 430-450


Ansonsten gib doch mal testweise $_POST['booktitle'] genau vor dem explode aus, damit du siehst, welche Daten da drin sind.

PHP:
echo $_POST['booktitle'].'<br />';
$parts_bt = explode(":", $_POST['booktitle']);
echo 'ID: '.$book_id = $parts_bt[0];
echo '<br />Buchtitel: '.$booktitle = $parts_bt[1];
Kommt folgendes bei Schritt 2 raus:
PHP:
7:Harry Potter
ID: 7
Buchtitel: Harry Potter
Und bei Schritt 3:
PHP:
Harry Potter
ID: Harry Potter
Notice: Undefined offset: 1 in C:\Programme\xampp\htdocs\bapothek\administration.inc.php on line 441

Buchtitel:

Also löscht er den Wert der ID aus irgendeinem Grund raus, sobald ich das Formular abschicke..
 
Warum über haupt so:
PHP:
$parts_bt = explode(":", $_POST['booktitle']);
echo 'ID: '.$book_id = $parts_bt[0];
echo '<br />Buchtitel: '.$booktitle = $parts_bt[1];

Und nich einfach:
PHP:
$parts_bt = explode(":", $_POST['booktitle']);
echo 'ID: '.$parts_bt[0];
echo '<br />Buchtitel: '.$parts_bt[1];

Falls du die Daten in den Variablen bracuhst so:
PHP:
$parts_bt = explode(":", $_POST['booktitle']);
$book_id = $parts_bt[0];
$booktitle = $parts_bt[1]; 
echo 'ID: '.$book_id;
echo '<br />Buchtitel: '.$booktitle;

[EDIT]
Nimmst du beim 3ten mal $_POST['booktitle'] KOMPLETT mit!?
So wie es aussieht fehlt da ja nen Eintrag...

Mögliche Lösung:
PHP:
echo '<input type="hidden" name="booktitle" value="'.$_POST['booktitle'].'" />';
 
Zuletzt bearbeitet:
Weil ich die Variablen dann in die DB speichern will und das eig komfortabler war.
Oder könnte es daran liegen? Wobei ich nicht glaube, dass das der Fehler ist :(

EDIT: Habs eben ausprobiert, Folge ist: Es wird nun nichts als ein Leerstring ausgegeben

EDIT 2: Super, so klappts nun, danke für die Hilfe. Wieder mal ein kleiner doofer Denkfehler von mir.
Danke nochmal für die Hilfe :)
 
Zuletzt bearbeitet:
Zurück