Yadgar: MySQL: Primärschlüsselwert wird nicht gefunden

Beitrag lesen

Hi(gh)!

Ich versuche mal wieder, eine Datenbank mitsamt PHP-Eingabemaske zum Laufen zu bringen... nichts Großes, gerade mal sieben Tabellen, klappte bis jetzt auf meinem Windows-Laptop ganz gut (bis auf einen 1054er, aber das ist ein anderes Thema), aber dann exportierte ich die Datenbank nach Linux - und jetzt stelle ich fest, dass der Primärschlüsselwert in einer der Tabellen nicht korrekt gefunden wird, obwohl die Suchkriterien stimmen, kommt immer nur 0 raus... am besten, ich gebe euch mal den ganzen Code, angefangen mit dem MySQL-Dump:


-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 09. August 2013 um 13:32
-- Server Version: 5.0.27
-- PHP-Version: 5.2.0
--
-- Datenbank: `schwingungen`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `interpret`
--

CREATE TABLE `interpret` (
  `ID` smallint(5) unsigned NOT NULL auto_increment,
  `Name` varchar(80) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Name` (`Name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=13 ;

--
-- Daten für Tabelle `interpret`
--

INSERT INTO `interpret` VALUES (1, 'Raukes, Dorothea');
INSERT INTO `interpret` VALUES (2, 'The League Unlimited Orchestra');
INSERT INTO `interpret` VALUES (3, 'Tietchens, Asmus');
INSERT INTO `interpret` VALUES (4, 'McCann, Les');
INSERT INTO `interpret` VALUES (5, 'Großkopf, Harald');
INSERT INTO `interpret` VALUES (6, 'Tangerine Dream');
INSERT INTO `interpret` VALUES (7, 'Scholl, Bernd');
INSERT INTO `interpret` VALUES (8, 'Earthstar');
INSERT INTO `interpret` VALUES (9, 'Blenner, Serge');
INSERT INTO `interpret` VALUES (10, 'Pluta, Jürgen');
INSERT INTO `interpret` VALUES (11, 'von Deyen, Adelbert');
INSERT INTO `interpret` VALUES (12, 'Schulze, Klaus');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `sendung`
--

CREATE TABLE `sendung` (
  `ID` smallint(5) unsigned NOT NULL auto_increment,
  `Datum` date NOT NULL,
  `Status` tinyint(1) NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Datum` (`Datum`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=9 ;

--
-- Daten für Tabelle `sendung`
--

INSERT INTO `sendung` VALUES (2, '1984-01-05', 2);
INSERT INTO `sendung` VALUES (3, '1984-01-19', 2);
INSERT INTO `sendung` VALUES (8, '1984-02-02', 2);
INSERT INTO `sendung` VALUES (5, '1984-01-26', 3);
INSERT INTO `sendung` VALUES (7, '1981-12-24', 1);

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `sendung_titel`
--

CREATE TABLE `sendung_titel` (
  `ID` smallint(5) unsigned NOT NULL auto_increment,
  `Sendung` smallint(5) unsigned NOT NULL,
  `Titel` smallint(5) unsigned NOT NULL,
  `Position` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

--
-- Daten für Tabelle `sendung_titel`
--


-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `status`
--

CREATE TABLE `status` (
  `ID` tinyint(3) unsigned NOT NULL auto_increment,
  `Bezeichnung` varchar(20) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Bezeichnung` (`Bezeichnung`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Daten für Tabelle `status`
--

INSERT INTO `status` VALUES (1, 'Pilotsendung');
INSERT INTO `status` VALUES (2, 'Regulär');
INSERT INTO `status` VALUES (3, 'Irregulär');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `titel`
--

CREATE TABLE `titel` (
  `ID` smallint(6) unsigned NOT NULL auto_increment,
  `Name` varchar(80) collate utf8_unicode_ci NOT NULL,
  `Interpret` smallint(5) unsigned NOT NULL,
  `Veroeffentlichung` smallint(5) unsigned NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Name` (`Name`,`Interpret`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

--
-- Daten für Tabelle `titel`
--


-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `typ`
--

CREATE TABLE `typ` (
  `ID` tinyint(3) unsigned NOT NULL auto_increment,
  `Bezeichnung` varchar(20) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Bezeichnung` (`Bezeichnung`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

--
-- Daten für Tabelle `typ`
--

INSERT INTO `typ` VALUES (1, 'Album');
INSERT INTO `typ` VALUES (2, 'Compilation');
INSERT INTO `typ` VALUES (3, 'Sampler');
INSERT INTO `typ` VALUES (4, 'EP');
INSERT INTO `typ` VALUES (5, 'Single');
INSERT INTO `typ` VALUES (6, 'Maxi-Single');

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `veroeffentlichung`
--

CREATE TABLE `veroeffentlichung` (
  `ID` smallint(5) unsigned NOT NULL auto_increment,
  `Name` varchar(80) collate utf8_unicode_ci NOT NULL,
  `Typ` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `Name` (`Name`,`Typ`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=13 ;

--
-- Daten für Tabelle `veroeffentlichung`

-- 

INSERT INTO `veroeffentlichung` VALUES (1, 'Deutsche Wertarbeit', 1);
INSERT INTO `veroeffentlichung` VALUES (2, 'Love And Dancing', 1);
INSERT INTO `veroeffentlichung` VALUES (3, 'In die Nacht', 1);
INSERT INTO `veroeffentlichung` VALUES (4, 'Layers', 1);
INSERT INTO `veroeffentlichung` VALUES (5, 'Synthesist', 1);
INSERT INTO `veroeffentlichung` VALUES (6, 'Logos Live', 1);
INSERT INTO `veroeffentlichung` VALUES (7, 'Tales Of Fantasy', 1);
INSERT INTO `veroeffentlichung` VALUES (8, 'Humans Only', 1);
INSERT INTO `veroeffentlichung` VALUES (9, 'Magazin Frivole', 1);
INSERT INTO `veroeffentlichung` VALUES (10, 'Communication', 1);
INSERT INTO `veroeffentlichung` VALUES (11, 'Planetary', 1);
INSERT INTO `veroeffentlichung` VALUES (12, 'X', 1);

und das PHP-Skript mit dem oben genannten Problem:


<?php
  require("head_schwingungen.php");
	head("Schwingungen - Dateneingabe: titel");
?>
  <body>
<?
  require("navbar_schwingungen.php");
?>
  <div style="position:absolute; width:74%; top:0px; left:26%; padding-left:5px">
    <h2>Schwingungen: Dateneingabe</h2>
    <h3>Datentabelle: titel</h3>
    <form method="post" action="titel.php">
      <table>
        <tr>
          <td>
            <b>Name: </b>
          </td>
          <td>
            <input type="text" name="Name">
	  </td>
        </tr>
	<tr>
	  <td>
	    <b>Interpret: </b>
	  </td>
	  <td>
	    <select name="Interpret">
	    <option value="">Interpret auswählen</option>
	    <?
	      dbcall();
	      $query = "SELECT Name FROM interpret ORDER BY Name";
	      $result = mysql_query($query);
	      dberror();
	      while ($row = mysql_fetch_row($result))
              {
	        dberror();
  	        ?><option value="<? echo $row[0]; ?>"><? echo $row[0]; ?>
	        </option><?
	      }
   	    ?>
	    </select>
          </td>
        </tr>
	<tr>
	  <td>
	    <b>Veröffentlichung: </b>
	  </td>
	  <td>
	    <select name="Veroeffentlichung">
	    <option value="">Veroeffentlichung auswählen</option>
	    <?
	      dbcall();
	      $query = "SELECT veroeffentlichung.Name, typ.Bezeichnung FROM veroeffentlichung, typ WHERE veroeffentlichung.Typ = typ.ID ORDER BY Name";
	      $result = mysql_query($query);
	      dberror();
	      while ($row = mysql_fetch_row($result))
	      {
		dberror();
		$opstring = $row[0]." [".$row[1]."]";
  		?><option value="<? echo $opstring; ?>"><? echo $opstring; ?>
		</option><?
	      }
	    ?>
	    </select>
	  </td>
        </tr>				
      </table>
      <p>
	<input type="submit" value="Daten absenden">
      </p>
    </form>		
  <?
		$Name = $_POST['Name'];
		$Interpret = $_POST['Interpret'];
		$Veroeffentlichung = $_POST['Veroeffentlichung'];
    if (!$Name || !$Interpret || !$Veroeffentlichung)
		  echo "Bitte geben Sie einen Titel, einen Interpreten und eine Veröffentlichung ein!<br>";
		else
		{
			dbcall();
			$query = "SELECT ID FROM interpret WHERE Name = '".mysql_real_escape_string($Interpret)."'";
			$result = mysql_query($query);
			dberror();
			$row = mysql_fetch_row($result); // interpret.ID
			$ids[0] = $row[0];
			// echo $ids[0]."<br>";
			dbcall();
			
      $Veroeff = explode(" [", $Veroeffentlichung);
			$Veroeffentlichung = $Veroeff[0];
			$Typ = str_replace("]", "", $Veroeff[1]);
			
			$query = "SELECT ID FROM typ WHERE Bezeichnung = '".mysql_real_escape_string($Typ)."'";
			$result = mysql_query($query);
			dberror();
			$row = mysql_fetch_row($result);
			echo $Typ."<br>";
			$query = "SELECT ID FROM veroeffentlichung WHERE Name = '".mysql_real_escape_string($Veroeffentlichung)."' AND Typ = '".mysql_real_escape_string($row[0])."'";
			$result = mysql_query($result);
			dberror();
			$row = mysql_fetch_row($result);
			echo $Veroeffentlichung."<br>";
			echo $row[0]."<br>";
			$ids[1] = $row[0];
			
			$query = "INSERT INTO titel (Name, Interpret, Veroeffentlichung) VALUES ('".mysql_real_escape_string($Name)."','".mysql_real_escape_string($ids[0])."','".mysql_real_escape_string($ids[1])."')";
			$result = mysql_query($query);
			dberror();
			echo "Ihre Eingabe war korrekt und wurde in die Datenbank eingetragen!";
			$db = mysql_close();
			dberror();
		}
	?>
  </div>
							<p style="text-align:center; position:absolute; left:26%; width:74%; top:500px">
	   <a href="titel_kontrolle.php" target="_blank">Kontrollansicht der Tabelle (in neuem Fenster)</a>
  </body>
</html>	

und noch die inkludierte Datei mit den Funktionen:


<?php
  function head($title)
	{
    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"';
	  echo '  "http://www.w3.org/TR/html4/loose.dtd">';
    echo '<html>';
    echo '  <head>';
		echo '    <title>'.$title.'</title>';		
	  echo '    <meta http-equiv="Content-Type" content="text/html; charset=utf8">';
		echo '    <style>';
		echo '      p { font-size:12px }';
		echo '    </style>';
		echo '  </head>';
	}
	
	function dberror()
	{
	  if (mysql_errno())
		{
      switch(mysql_errno())
			{
			  case 1062:
				  die ("Ein Eintrag mit diesen Daten existiert bereits! Bitte korrigieren Sie Ihre Eingabe!<br>");
				break;
				default:
				  die (mysql_errno().": ".mysql_error()."<br>");
				break;
			}
  	}
	}

	function dbcall()
	{
		$db = mysql_connect("localhost", "root", "Menkalinan");
		dberror();
		$db = mysql_select_db("schwingungen");
		dberror();
	}		
?>	

Ich blicke mal wieder nicht mehr durch! Bin ich zu dumm zum Programmieren?!?

Bis bald im Khyberspace!

Yadgar