Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Einen Datensatz mit mehreren Artikeln vernüpfen? Antworten
Einen Datensatz mit mehreren Artikeln vernüpfen?

brali
Feiertags-Poster


Beiträge: 37


Guten morgen zusammen..

ich befürchte ich habe mal wieder was neues.

Ich lege mir einen Dienstleistung an und möchte gleichzeit durch ein Multiform einzelne Mitarbeiter mit dieser Dienstleistung verknüfpen.

Mein Code bisher:
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10:
if($_REQUEST[add]=='true' and $_REQUEST[insert]=='true') { 
if (count($REQUEST[mitarbeiter])>0) 
      $kategorienstr = implode($REQUEST[mitarbeiter],"&Mitarbeiter[]="); 
$db->query("insert into vb_dienste (mid, beschreibung, artikel) values ('$_REQUEST[mitarbeiter]','$_REQUEST[beschreibung]','$_REQUEST[artikel]')"); 
$id = mysql_insert_id(); 
for ($i=0; $i<count($_REQUEST[mitarbeiter]); $i++) { 
$db->query("insert into vb_verweis (mitarbeiterid, dienstleistungid) values ('$_REQUEST[mitarbeiter][$i]','$id')"); 
} 
echo "<div class='text'>Die Dienstleistung wurde angelegt.<br><br>\n"; 
}


Leider schreibt er immer nur einen Datensatz in die DB, so das auch immer nur ein Mitarbeiter mit dieser Dienstleistung verknüpft ist.

Und hier eine Änderung -> wenn ich es so ändere (ich weiß nciht sehr glücklich das ganze), dann wirft er mir allen 4 mal in die Datenbank:

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15:
// Datensatz in DB speichern 
if($_REQUEST[add]=='true' and $_REQUEST[insert]=='true') { 
if (count($mitarbeiter)>0) 
$mitarbeiter = implode($mitarbeiter,"&mitarbeiter[]="); 

$db->query("insert into vb_dienste (beschreibung, artikel) values ('$_REQUEST[beschreibung]','$_REQUEST[artikel]')"); 
$id = mysql_insert_id(); 

for ($i=0; $i<count($_REQUEST['mitarbeiter']); $i++) { 
foreach ($_REQUEST['mitarbeiter'] as $mitarbeiter) { 
$db->query("insert IGNORE into vb_verweis (mitarbeiterid, dienstleistungid) values ('$mitarbeiter','$id')"); 
} 
} 
} 
echo "<div class='text'>Die Dienstleistung wurde angelegt.<br><br>\n"; 


Habt Ihr nen brauchbaren Rat!?



---
-= Das Menschliche an Computern ist ihre Gewissenlosigkeit =-

  Profil   Editieren   Zitieren

brali
Feiertags-Poster


Beiträge: 37


Wenn ich aus dem zweiten beispiel den eintrag in die DB so ändere:



1: 
2: 
3:
for ($i=0; $i<count($_REQUEST['mitarbeiter']); $i++) { 
foreach ($_REQUEST['mitarbeiter'] as $mitarbeiter) { 
$db->query("insert IGNORE into vb_verweis (mitarbeiterid, dienstleistungid) values ('$mitarbeiter[$i]','$id')"); 


$mitarbeiter[$i] einfüge, schreibt er mir zwar meine makierten datensätze in die DB aber auch 2 leere, weil ich 4 mögliche Auswahlkriterien habe.

ich blicke nichtmehr durch

---
-= Das Menschliche an Computern ist ihre Gewissenlosigkeit =-

  Profil   Editieren   Zitieren

Austin Powers
Mausakrobat


Beiträge: 170


brali schrieb am 03.05.2006 08:46
Guten morgen zusammen..

Danke, Dir auch.

..
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10:
if($_REQUEST[add]=='true' and $_REQUEST[insert]=='true') { 
if (count($REQUEST[mitarbeiter])>0) 
      $kategorienstr = implode($REQUEST[mitarbeiter],"&Mitarbeiter[]="); 
$db->query("insert into vb_dienste (mid, beschreibung, artikel) values ('$_REQUEST[mitarbeiter]','$_REQUEST[beschreibung]','$_REQUEST[artikel]')"); 
$id = mysql_insert_id(); 
for ($i=0; $i<count($_REQUEST[mitarbeiter]); $i++) { 
$db->query("insert into vb_verweis (mitarbeiterid, dienstleistungid) values ('$_REQUEST[mitarbeiter][$i]','$id')"); 
} 
echo "<div class='text'>Die Dienstleistung wurde angelegt.<br><br>\n"; 
}

Leider schreibt er immer nur einen Datensatz in die DB, so das auch immer nur ein Mitarbeiter mit dieser Dienstleistung verknüpft ist.

Ich würde mal schätzen da ist nur ein Mitarbeiterdatensatz übertragen.
Fehler im formular?
P.S.: Nacfolgend schreibe ich in das Zitat

Und hier eine Änderung -> wenn ich es so ändere (ich weiß nciht sehr glücklich das ganze), dann wirft er mir allen 4 mal in die Datenbank:

1: 
2: 
3: 
4: 
5: 
6: 
7:
// Datensatz in DB speichern 
for ($i=0; $i<count($_REQUEST['mitarbeiter']); $i++) { //macht etwas mit allen gesendeten Datensätzen
      foreach ($_REQUEST['mitarbeiter'] as $mitarbeiter) { // und nocheinmal, also sinnlos
            $db->query("insert IGNORE into vb_verweis (mitarbeiterid, dienstleistungid) values ('$mitarbeiter','$id')"); 
      } 
} 


Da hast Du doppelt gemoppelt. Nimm die for () schleife raus und lass foreach.
Schau dir den HTML Quelltext deines formulares an der ist wahrscheinlich falsch. (da ist bestimmt ein </form> wo es nicht hingehört)
Aber ohne mehr quelltext kann ich nichts sagen


---
MfG:Austin Power (Saturn Realm)
OMW! Zumindest sobald ich herausgefunden hab wo ich JETZT gerade bin.
<---------->
"Wenn Liebe die Antwort ist, könnst Du bitte die Frage neu formulieren?" ... Lily Tomlin
<---------->
code hier http://www.pastebin.com

  Profil   Website   Editieren   Zitieren

brali
Feiertags-Poster


Beiträge: 37


Hi Austin, THX für deine Mühe.

Hier der ganze Quelltext und die änderungen die ich gemacht habe damit es nun funktioniert.

Das <form> war im übrigen schon okay, ich habe nur einen very doofen denkfehler innegehabt.

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 
89: 
90: 
91: 
92: 
93: 
94: 
95: 
96: 
97: 
98: 
99: 
100: 
101: 
102: 
103: 
104: 
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: 
115: 
116: 
117: 
118: 
119: 
120: 
121: 
122: 
123: 
124: 
125: 
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
140: 
141: 
142: 
143: 
144: 
145: 
146: 
147: 
148: 
149: 
150: 
151: 
152: 
153: 
154: 
155: 
156:
<?
include_once  "includes/meta.php";


		
// Datensatz updaten in der DB
if($_REQUEST[edit]=='true' and $_REQUEST[update]=='true') {
  $db->query("update vb_dienste set beschreibung='$_REQUEST[beschreibung]', artikel='$_REQUEST[artikel]' where did='$_REQUEST[did]'");
  
  echo "<div class='text'>Dienstleistung wurde editiert<br><br>";
}


// Datensätze löschen
if($_REQUEST[edit]=='true' and $_REQUEST['delete']=='true') { 
    $db->query("delete from vb_dienste where did='$_REQUEST[did]'");
  echo "<div class='text'>Die Dienstleistung wurde gelöscht.<br><br>\n";
}
// Datensatz in DB speichern
if($_REQUEST[add]=='true' and $_REQUEST[insert]=='true') {
$db->query("insert into vb_dienste (mid, beschreibung, artikel) values ('$mitarbeiter','$_REQUEST[beschreibung]','$_REQUEST[artikel]')");
$id = mysql_insert_id();

if (count($_POST['mitarbeiter'])>0)
		$mitarbeiterer = implode($_POST['mitarbeiter'],"&mitarbeiter[]=");
		
for ($i=0; $i<count($_POST['mitarbeiter']); $i++) { 
$mitarbeiter = $_POST['mitarbeiter'][$i];
$db->query("insert IGNORE into vb_verweis (mitarbeiterid, dienstleistungid) values ('$mitarbeiter','$id')"); 
 
}
}
echo "<div class='text'>Die Dienstleistung wurde angelegt.<br><br>\n";


//Datensatz anlegen
if($_REQUEST[add]=='true' and $_REQUEST[insert]=='false') {
?>
<form name="formular" action="dansehen.php?add=true&insert=true" method="post">
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#cccccc">
<td>

<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr bgcolor="#9FB1D4">
  <td colspan="2"><b>Dienstleistung einfügen</b></td>
</tr>
     <tr bgcolor="#ffffff">
		<td class="fieldname">Mitarbeiterzugehörigkeit</td>
		<td><select name="mitarbeiter[]" size="6" multiple>
<?
$result = mysql_query("SELECT * FROM vb_mitarbeiter order by mid ASC ");
echo mysql_error();
while ($ausgabe = mysql_fetch_array($result)) { ?>
	<option value="<?echo $ausgabe["mid"]?>"<?if (is_array($mitarbeiter) AND in_array($ausgabe["mid"],$mitarbeiter)) {echo " SELECTED";}?>><?echo $ausgabe['vorname'].' '.$ausgabe['nachname'] ?></option>
<?
}
?>
</select>
</td>
	</tr>
	<tr bgcolor="#ffffff">
		<td class="fieldname">Dienstleistungsbeschreibung (max 255 zeichen)</td>
		<td><input type="text" name="beschreibung" size="35" value="" class="textfield"></td>
	</tr>
	<tr bgcolor="#ffffff">
		<td class="fieldname">Beschreibung</td>
		<td><textarea name="artikel" rows="10" cols="45" class="textfield"></textarea></td>
	</tr>
	 <tr bgcolor="#ffffff">
		<td class="fieldname"></td>
		<td><input type="submit" value="Mitarbeiter speichern" class="button_submit"></td>
	</tr>
</table>

</td>
</tr>
</table>
</form>
<?
}

// Alle Datensätze ausgeben
if($_REQUEST[edit]=='true' and $_REQUEST[editform]=='true') {
$res = $db->query("select * from vb_dienste where did='$_REQUEST[did]'");
$row = $db->fetch_array($res);
?>
<form name="formular" action="dansehen.php?edit=true&update=true&did=<?=$_REQUEST[did]?>" enctype="multipart/form-data" method="post">
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#cccccc">
<td>

<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr bgcolor="#9FB1D4">
  <td colspan="2"><b>Dienstleistung editieren</b></td>
</tr>
  	<tr bgcolor="#ffffff">
		<td class="fieldname">Dienstleistungsbeschreibung (255zeichen)</td>
		<td><input type="text" name="beschreibung" size="35" value="<?=$row[beschreibung]?>" class="textfield"></td>
	</tr>
	<tr bgcolor="#ffffff">
		<td class="fieldname">Beschreibung (HTML erlaubt)</td>
		<td><textarea rows="10" cols="45" class="textfield"><?=$row[artikel]?></textarea></td>
	</tr>
	 <tr bgcolor="#ffffff">
		<td class="fieldname"></td>
		<td><input type="submit" value="speichern" class="button_submit"></td>
	</tr>
       
	</tr>
</table>
</td>
</tr>
</table>
</form>
<?
}
?>
&raquo;  <a href="dansehen.php?add=true&insert=false">Neue Dienstleistung erfassen</a><br>
<br>
<br>
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#cccccc">
<td>

<table width="100%" border="0" cellspacing="1" cellpadding="3">
<tr bgcolor="#9FB1D4">
  <td><b>Dienste</b></td>
  <td align="center" colspan="2" width="30"><b>Optionen</b></td>
  </tr>
  
  

<?
// alle Datensätze auslesen  
	$res = $db->query("select * from vb_dienste order by beschreibung asc");
	while($row=$db->fetch_array($res)) {
    
    
  
    echo "<tr bgcolor=\"#ffffff\">\n";
	echo "<td>$row[beschreibung]</td>\n";
	echo "<td align=\"center\"><a href=\"dansehen.php?edit=true&editform=true&did=$row[did]\"><img alt='Bearbeiten' src='img/edit.gif' border='0'></a></td><td align=\"center\"><a href=\"javascript:sicher('dansehen.php?edit=true&delete=true&did=$row[did]')\"><img alt='Löschen' src='img/trash.gif' border='0'></a></td>\n";
	echo "</tr>\n";
}
?>
</table>
</td>
</tr>
</table>

<?
include_once "includes/footer.php";

?>


---
-= Das Menschliche an Computern ist ihre Gewissenlosigkeit =-

  Profil   Editieren   Zitieren

Austin Powers
Mausakrobat


Beiträge: 170


ich fummel mich grad durch deinen Quelltext. noch viel Baustelle häe.
versuchs anstelle von Zeile 23 bis 31 mal mit
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9:
unset (query);
foreach ( $_POST['mitarbeiter'] as $mitarbeiter) {
   query=. "insert into vb_verweis (mitarbeiterid, dienstleistungid) values ('$mitarbeiter','$id');";
   }
$result = mysql_query($query);
mysql_free_result($result);
unset ($query);

P.S.: was macht mid in vb_dienste?
vb_verweis verknüpft doch mitarbeiter und dienste.
Da ist ziemlich der Wurm drinn

---
MfG:Austin Power (Saturn Realm)
OMW! Zumindest sobald ich herausgefunden hab wo ich JETZT gerade bin.
<---------->
"Wenn Liebe die Antwort ist, könnst Du bitte die Frage neu formulieren?" ... Lily Tomlin
<---------->
code hier http://www.pastebin.com

Diese Nachricht wurde geändert von: Austin Powers
  Profil   Website   Editieren   Zitieren

brali
Feiertags-Poster


Beiträge: 37


Bitte?

nix Baustelle! funzt wunderbar!
bis auf die eine Stelle die aber, wie ich bereits sagte nun funktioniert.

Grüße und danke!

---
-= Das Menschliche an Computern ist ihre Gewissenlosigkeit =-

  Profil   Editieren   Zitieren
 

Antworten
Nach oben