Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Problem mit Übergabe von Variablen mit 2 MySQL Tabellen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Problem mit Übergabe von Variablen mit 2 MySQL Tabellen


 
darksaber999
16-03-2005, 10:56 
 
Hallo alle,
erstmal ein Lob für eure tolle Seite, ich habe hier schon viele Tips gesehen, die mir geolfen haben, und auch Lösungen zu Problmen.

Leider habe ich jetzt Problem, was hier noch nicht besprochen wurde:

Ich habe 2 MySQL Tabellen (SCHTermine und SCHKursreihe).Ich möchte ein Formular schreiben, welches Daten zu der Tabelle SCHTermine hinzufügt. 2 Felder der beiden Tabellen haben den gleichen Inhalt(Zahlenwerte), und deshabl wäre es einfacher(und logischer) diese einfach per Formular mit zu Übergeben. Diese Felder sind "Nr" (Primärschlüssel von SCHKursreihe) und "Kurse". Also dachte ich, dass es das beste sei "Nr" per DropDown Leiste auszuwählen, und das Formular fügt im Hintergrund "Kurse" hinzu. Die DropDown Leiste habe ich schon hinbekommen, dass der andere Wert mit hinzugefügt wird nicht :) Jetzt aber genug gequasselt, hier ist der Code vom Formular :


function termine_anlegen(){

require_once ( "opendb.inc.php" ) ;
require_once ("class/classkursreihe.inc.php");
$kursreihe = new dbkursreihe( $GLOBALS["db"] ) ;

$arr = $kursreihe->listen_arr($auswahl);


echo "<form action = 'termine.php?id=8' method = 'post'>\n";


echo "<select name='kursreihe' size='1'>\n";
foreach($arr[0] as $value)
{
echo "<option value=".$value.">".$value."</option>\n";
}
echo "</select>Kursreihe<p>\n";

echo "Kurs: $kurs<p>\n";
}


Und das ist der Code der Class:

function neuerdatensatz( $kursreihe, $kurs, $von, $bis){

$kurs = " $this->get Kurs by Kursreihe ($kursreihe)";

$sqlab = " insert ".$this->tbname." ( Kursreihe, Kurs, Von, Bis ) ";
$sqlab .= " values ( '".$kursreihe."' , '".$kurs."' , '".$von."', '".$bis."')";
}


Ich hoffe ihr könnt mir helfen sitzte jetzt fast 10Stunden an diesem Problem :)

mfg darksaber999

 
vukodlac
16-03-2005, 11:19 
 
Habe das irgendwie nicht verstanden, wo bitte willst du den Wert hinzufügen? in der DropDown als value zu einem bestehenden oder als neues wertepaar in der dropdown

 
darksaber999
16-03-2005, 11:22 
 
Sorry, habe mich wohl etwas seltsam ausgedrückt :).
Also in der DrobDown Leiste steht der Primärschlüssel(Nr) als value, der wird auch korrekt übergeben. Aber Wert "Kurs" leider nicht.
Es gibt auch keine Fehlermeldung.

mfg
darky999

 
vukodlac
16-03-2005, 11:29 
 
woher soll er auch den wert haben du liest doch nur den key aus

foreach($arr[0] as $value)
{
echo "<option value=".$value.">".$value."</option>\n";
}

vielleicht sollte es so gehn damit auch das value ausgelesen wird

foreach($arr[0] as $key => $value)
{
echo "<option value=".$key.">".$value."</option>\n";
}

 
darksaber999
16-03-2005, 11:33 
 
Danke erstmal, aber leider klappt das so auch nicht.

Wie gesagt, ich möchte sowohl "Nr" als auch "Kurs" übergeben. Die "Nr" suche ich mit der DropDown Leiste aus, und im Hintergrund soll das formular den entsprechenden "Kurs" raussuchen und hinzufügen.

mfg
darky999

 
vukodlac
16-03-2005, 11:40 
 
mh dann mach das doch so

echo "<option value='".$key."|".$value."'>".$value."</option>\n"

musst es dann nur in deine function neuerdatensatz(...)

wieder trennen oder habe ich dich immernoch falsch verstanden

 
darksaber999
16-03-2005, 12:06 
 
Vielleicht eine etwas dumme Frage, aber was ist $key überhaupt für eine Variable? :D Und wie trenne ich die das dann wieder? Sorry, ich mach erst seit 2-3 Wochen was mit PHP und MySQL :)

SCHKursreihe sieht so aus:

Nr Kurse
1 101
2 102
3 103
4 120
5 105

Und wenn ich in der DropDown Leiste "4" auswähle, soll im Hintergrund die Variable für Kurse(also 120) mit übermittelt werden.

mfg
darksaber999

 
onemorenerd
16-03-2005, 13:44 
 
Wenn du dir sicher bist, dass es $arr[0] im foreach sein soll und nicht $arr, dann machst du das zum Beispiel so:

foreach($arr[0] as $key => $value)
{
echo "<option value=".$key.$div.$value.">".$value."</option>\n";
}

wobei $div ein Trennzeichen ist, dass nie in Nr bzw. Kurs vorkommt und $key der Key das Arrayeintrags $value. RTFM(foreach); ;)

Mal was anderes: Du hast eine Tabelle SCHKursreihe mit

Nr Kurse Foo
1 101 bar
2 120 null
...

und der User soll über o.g. Formular Kurse zu seinen Terminen hinzufügen können. Dazu hast du eine Tabelle SCHTermine mit

Nr Kurse Blah
4 400 blub
1 101 blab
...

Brauchst du SCHTermine.Kurse unbedingt? Kannst du das nicht über einen JOIN mit SCHKursreihe bekommen? Dann brauchst du im Formular nämlich auch nur noch einen Wert übergeben.

 
darksaber999
16-03-2005, 14:01 
 
Danke erstmal an auch beide!
Aber ein kleine Frage habe ich da noch :rolleyes:

Als Value übergebe ich jetzt "$key" und "$value", wie kann ich die dann wieder trennen, so dass ich beide Werte nutzen kann :)

btw: $arr[0] ist für "Nr" und $arr[2] ist für "Kurs" :)

mfg
darksaber999

 
onemorenerd
16-03-2005, 14:44 
 
Dann bist du eh auf'm falschen Dampfer. Wenn $arr[0] die Nr und $arr[2] der Kurs ist, dann muß $arr selbst Element eines Arrays sein, damit hier was mit foreach geht.

Beispiel:

$super_arr = array(
array('1', 'foo', '101'),
array('2', 'bar', '120'),
...
);

foreach ($super_arr as $arr)
{
echo "<option value=".$arr[0].$div.$arr[2].">".$arr[2]."</option>\n";
}


Nach der Übergabe nimmst du es mit explode($div, $_POST['kursreihe']) auseinander.

Ich weise aber nochmals darauf hin, dass deine DB schlecht designed ist und du außerdem http://www.php.net/manual/en/control-structures.foreach.php lesen solltest.

 
darksaber999
16-03-2005, 14:51 
 
Das Array rufe ich auch aus einer Class auf. Ich poste einfach mal den Code dazu:

function listen_arr($auswahl){
if (!$auswahl)
$sql = "select * from ".$this->tbname. " order by " . Nr ." asc" ;
else
$sql = "select * from ".$this->tbname." where nr = $auswahl" ;

if ($this->debug)
echo $sql."<br>" ;

$this->result = mysql_query( $sql ) or
die ( "Fehler bei der Abfrage: ".mysql_error() );

while ($arr = $this->fetch_row()){
$res[0] = array_merge( $res[0], $arr[0] ) ;
$res[2] = array_merge( $res[2], $arr[2] );
}

return ( $res ) ;

}

 
onemorenerd
16-03-2005, 15:14 
 
Lass dir mal ausgeben, was listen_arr() zurückgibt.

 
darksaber999
16-03-2005, 15:25 
 
Der gibt nur folgendes aus:

echo "Liste: $kursreihe->listen_arr($auswahl)<p>\n";

Array

Das finde ich jetzt zumindest komisch :confused:

mfg
darksaber999

 
onemorenerd
16-03-2005, 15:37 
 
Arrays gibt man so auch nicht aus. Versuchs mit
echo "<pre>";
print_r($kursreihe->listen_arr($auswahl));
echo "</pre>";Wundern wirst du dich dann aber immernoch. ;)

 
darksaber999
16-03-2005, 15:43 
 
Oh, sorry bin halt dumm :D

jetzt gibt der mir folgendes aus:

Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)

[2] => Array
(
[0] => 101
[1] => 102
[2] => 103
[3] => 120
[4] => 105
)

)

:confused: Das sind die richtigen Angaben richtig.

 
onemorenerd
16-03-2005, 15:48 
 
Ähm ich wollte das gar nicht wissen - du sollst es DIR ausgeben lassen, um zu sehen wie die foreach-Schleife gebaut werden muß bzw. was in der listen_arr() falsch ist.

Wieso überdenkst du eigentlich nicht erstmal deine DB-Struktur?

 
darksaber999
17-03-2005, 09:23 
 
Hallo nochmal,
ich möchte mich erstmal dafür bedanken, dass ihr euch soviel Zeit für mich genommen habt, und auch den Kopf über meine Probleme zerbricht :)

Also ich sollte vielleicht noch sagen, dass ich mir selbst PHP angelesen habe durch das Buch von Galileo Computing "PHP 4 Webserver-Programmierung für Einsteiger". Da wird nur in einer Übersichttabelle der Befehl "join" erklärt.

Aber ich sollte vielleicht meine Tabellen weiter erklären.
SCHTermine hat 5 Felder:
Nr -> Autoinc
Kurs -> Kurs aus SCHKursreihe
Kursreihe -> Nr aus SCHKursreihe
Von
Bis

SCHKursreihe hat 4 Felder
Nr -> Autoinc -> Für Kursreihe in SCHTermine
Kursreihe
Kurs -> Für Kurs in SCHTermine
Bezeichnung

Hab ich euch jetzt richtig verstanden? Mit "join" ist das möglich? Ok ich probiere das jetzt mal aus, dann melde ich mich nochmal.

mfg
darksaber999

 
darksaber999
18-03-2005, 09:52 
 
Also mit Join haut das überhaupt nicht hin, und ich bin wieder auf meinen alten kurs zurück gegangen.


echo "<select name='kursreihe' size='1'>\n";
$anzahl = sizeof( $arr[0]);
for ($i=0;$i<$anzahl; $i++){
echo "<option value='".$arr[0][$i]."'>".$arr[2][$i]."</option>\n";
}
echo "</select>Kursreihe<p>\n";


Im Quelltext steht jetzt auch das Richtige als Value, und im Auswahl-Bereich:


<select name='kursreihe' size='1'>
<option value='101'>1</option>
<option value='102'>2</option>
<option value='103'>3</option>
<option value='120'>4</option>
<option value='105'>5</option>
</select>Kursreihe<p>


Jetzt möchte sowohl das Value, als auch die "Auswahl-Nr" übergeben, also wenn ich in der DropDown-Leiste "4" auswähle, soll sowohl "4" als auch "120" übergeben werden.

Ich dachte, es würde folgender Maßen gehen:

$termin->neuerdatensatz( $GLOBALS[$arr[0][$i]], $GLOBALS[$arr[1][$i]],
$GLOBALS["von"], $GLOBALS["bis"]);


Dann soll in der Class folgendes ankommen:

function neuerdatensatz( $kursreihe, $kurs, $von, $bis){

$sqlab = " insert ".$this->tbname." ( Kursreihe, Kurs, Von, Bis ) ";
$sqlab .= " values ( '".$kursreihe."' , '".$kurs."' , '".$von."', '".$bis."')";



if ($this->debug)
echo $sqlab."<br>";
$this->result = mysql_query( $sqlab )


Leider bleiben im Moment die beiden Felder 'Kursreihe' und 'Kurs' leer.

Seid ihr nochmal so lieb und helft mir?

mfg
darksaber999

 
asp2php
18-03-2005, 10:06 
 
Original geschrieben von darksaber999

Jetzt möchte sowohl das Value, als auch die "Auswahl-Nr" übergeben, also wenn ich in der DropDown-Leiste "4" auswähle, soll sowohl "4" als auch "120" übergeben werden.

Nein, bei select-Tag wird value gesendet, wenn value-Angabe aber nicht existiert, dann den Text. Beides nicht. Es sei denn du nimmst JS, liest die Werte in Value und Text aus und schreibst sie in hidden-Felder, dann werden sie über die hidden-Felder gesendet. Aber was soll denn der Unfug. Eine Relation zwischen value und Text hast du doch irgendwo, denn sonst kann du die Liste ja nicht aufbereiten. Also überlege nochmals was du machst.

 
darksaber999
18-03-2005, 10:42 
 
OK, aber was sind "JS" ? Ich kenn mich mit den "Insider"-Abkürzungen noch nicht aus ;)

 
mrhappiness
18-03-2005, 10:47 
 
JavaScript

 
darksaber999
21-03-2005, 16:29 
 
Hallo, ich bins nochmal :)
Jetzt habe ich den Code einwenig abgeändert(aber ohne JS, denn das kann ich nicht ;) ):

function termine_anlegen(){

require_once ( "opendb.inc.php" ) ;
require_once ("class/classkursreihe.inc.php");
$kursreihe = new dbkursreihe( $GLOBALS["db"] ) ;

$arr = $kursreihe->listen_arr($auswahl);

error_reporting(E_ALL);
echo "<p>Fehler:".error_reporting(E_ALL)."<p>";


echo "\n<p>Geben Sie einen vollständigen Datensatz ein und senden Sie das Formular ab:\n";


echo "<form method='post' action=termine.php?show=".$arr[0][$i].">";

echo "<select name='kursreihe' size='1'>\n";
$anzahl = sizeof( $arr[0]);
for ($i=0;$i<$anzahl; $i++){
echo "<option value='".$arr[0][$i]."'>".$arr[2][$i]."</option>\n";
}
echo "</select>Kursreihe<p>\n";


echo "</form>\n";


echo "<form action = 'termine.php?id=8' method = 'post'>\n";

echo "<input name='von'>Von (Form: JJJJ-MM-TT SS:MM)<p>\n";
echo "<input name='bis'>Bis (Form: JJJJ-MM-TT SS:MM)<p>\n";

echo "<input type='Submit' name='gesendet'\n";
echo "<input type='reset'>\n";

echo "</form>\n";


Aber jetzt bekomme ich folgenden Fehler:

Notice: Undefined variable: i in /srv/www/praktikant/schulung/termine.php on line 221

Notice: Undefined index: in /srv/www/praktikant/schulung/termine.php on line 221

Das ist beim ersten <form>. Aber versteh nicht warum die undefiniert ist, es wird doch das Array aufgerufen am Anfang.

mfg
darksaber999

 
wahsaga
21-03-2005, 16:48 
 
Original geschrieben von darksaber999
Aber versteh nicht warum die undefiniert ist, es wird doch das Array aufgerufen am Anfang.
*seufz*

wo bitte ist zu dem zeitpunkt, wo du
echo "<form method='post' action=termine.php?show=".$arr[0][$i].">";
stehen hast, $i definiert ...?

 
darksaber999
21-03-2005, 16:58 
 
...OK, gutes Argument :D
Aber wie bekomme ich 2 forms sonst unter, wenn nicht nacheinander? Ineinander geht nicht, schon probiert.

Falls das eine dumme Anfängerfrage sein sollte, tut es mir Leid, aber ich habe PHP nur aus Büchern gelernt, namentlich:

PHP4 Webserver-Programmierung für Einsteiger von Galileo Computing

und zum zusätzlichen nachschlagen habe ich:

php 4 dynamische webauftritte professionell realisieren von Markt & Technik


mfg
darksaber999


edit: Das ist jetzt auch einwenig anders von mir gedacht. In der DropDown-Leiste suche ich noch immer die Nr aus, dann soll aber die Seite neugeladen werden, und die das Value soll schon mal zwischengespeichert, damit es später als Variable verarbeitet werden kann.

 
onemorenerd
22-03-2005, 07:04 
 
Entweder eine Datei, um die Select-Box auszugeben und eine zweite, an die die Daten gesendet werden oder beides in einem Script mit
if (!isset($_POST['kursreihe'])) {
// Form 1 ausgeben
} else {
// Form 2 ausgeben
}

 
darksaber999
23-03-2005, 11:51 
 
Hallo, ich bins schon wieder :)

Ich habe mal im PHP-Handuch nachgesehen, was if(!isset..) bewirkt. Wenn das richtig verstanden habe, dann überprüft das, ob eine Variable gesetzt ist, und setzte diese dann auf 'true'. Aber was brinkt mir das bei meinem Problem? Das die zweite Variable nicht ist, weiß ich auch so ;)

Naja, gestern kam der Chefprogrammierer (bin ja nur Praktikant und arbeite an diesem Programm, was nicht(!) kommerziel genutzt wird, da es nur eine Übung ist :) ) ausnahmsweise mal rein... und sagt mir, dass es auch Blödsinn sei, was ich da mach. (Kursreihe)Nr soll doch gar nicht auf (Termine)Kursreihe verweisen, sondern (Kursreihe)Kursreihe auf (Termine)Kursreihe. Dabei hat er extra auf einen Zettel dass (Termine)Kursreihe die Nr der (Kursreihe) ist,...aber egal :)

Also hat sich die Tablle folgend verändert:

SCHTermine hat 5 Felder:
Nr -> Autoinc
Kurs -> Kurs aus SCHKursreihe
Kursreihe -> Kursreihe aus SCHKursreihe
Von
Bis

SCHKursreihe hat 4 Felder
Nr -> Autoinc
Kursreihe -> Für Kursreihe in SCHTermine
Kurs -> Für Kurs in SCHTermine
Bezeichnung

In Kursreihe steht drin, ob der Kurs im Frühjahr, Sommer, usw. stattfindet. Denn der Kurs 105 im Frühjahr ist auch der Kurs 105 im Sommer. Somit hat ganze jetzt auch endlich mehr Sinn erhalten ;)

mfg
darksaber999

 
darksaber999
23-03-2005, 15:15 
 
Ich habe mich eurem Rat angeschlossen, und dem Chef mal gesagt, dass die Tabellenstruktur nicht gut gewählt ist. Er war zuerst beleidigt(war schließlich seine Idee), dann hat er aber eingesehen, dass die Tabellen schlecht designed sind.

Jetzt habe ich hier eine (beinah) ganz andere Bedingungen, die sogar für mich Lösbar erscheinen :D

Ich möchte mich bei allen bedanken, die mir geholfen haben :beer:

mfg
darksaber999

PS: Wenn ich wieder mal Hilfe brauche, werde ich mich wieder an euch wenden, und wenn ich sehen, dass jemand ein Problem hat und ich dazu die Lösung erkenne, dann werde ich diesem jemand auch helfen ;)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:12 Uhr.