[PHP] Array abarbeiten
#92
Geschrieben 31. Aug. 2007 - 09:06 Uhr
foreach ($_POST['thema'] as $key => $thema) {
$writedb = sprintf("INSERT INTO meetings (thema, aktion, bearbeitung, termin, startzeit, endzeit, author, erstellung) VALUES ('%s', '%s', '%s', '%s', '$_POST[startzeit]',
'$_POST[endzeit]', '$author', curdate())",
$thema,
$_POST['aktion'][$key],
$_POST['bearbeitung'][$key],
$_POST['termin'][$key]
);
$meetingId = ("SELECT max(id) FROM meetings");
foreach ($_POST['teilnehmer'] as $teilnehmer => $teilnehmerId) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer);
}
mysql_query($writedb);
printf("<tr><td>%s</td><td align=\"center\">%s</td><td align=\"center\">%s</td><td align=\"center\">%s</td></tr>\n",
$thema,
$_POST['aktion'][$key],
$_POST['bearbeitung'][$key],
$_POST['termin'][$key]);
}
#93
Geschrieben 31. Aug. 2007 - 10:06 Uhr
$meetingId = ("SELECT max(id) FROM meetings");glaub, da hast du was vergessen
So machts mehr Sinn:
mysql_query("SELECT max(id) FROM meetings");
$meetingId = ... // Ergebnis fetchenAber eigentlich solltest du nen Fehler bekommen, denn immerhin versuchst du hier
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer);einen String in eine INT-Spalte zu schreiben.
Sicher, dass mysql_error() nix sagt?
[korinthenkack]
Im übrigen find ich's recht gewöhnungsbedürftig, wie du die Query-Variablen benennst.
Ich würde sie konsistenterweise als $query nennen und nicht einmal $writedb und ein anderes Mal $addteilnehmer
Denglisch ist sowieso scheisse beim Entwickeln... Entweder komplett in Englisch oder komplett in Deutsch
[/korinthenkack]
Dieser Beitrag wurde von P. Stylez bearbeitet: 31. Aug. 2007 - 10:08 Uhr
#94
Geschrieben 02. Sep. 2007 - 16:31 Uhr
$meetingId = ("SELECT max(id) FROM meetings");$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
sowas funktioniert?
ich mache immer $xyz = "select * from blablubb";
wundert mich das php nich wegen der klammern vor und nach den anführungszeichen meckert...
[korinthenkack]
Im übrigen find ich's recht gewöhnungsbedürftig, wie du die Query-Variablen benennst.
Ich würde sie konsistenterweise als $query nennen und nicht einmal $writedb und ein anderes Mal $addteilnehmer
Denglisch ist sowieso scheisse beim Entwickeln... Entweder komplett in Englisch oder komplett in Deutsch /public/style_emoticons/default/p.gif...
[/korinthenkack]
stimmt schon, aber wenn du es ganz auf deutsch machen willst kannste dir ne eigene sprache mit deutscher syntax entwickeln
Dieser Beitrag wurde von Synthor bearbeitet: 02. Sep. 2007 - 16:32 Uhr
$P_UMFALLWAGEN=1003;
#95
Geschrieben 03. Sep. 2007 - 09:56 Uhr
sowas funktioniert? /public/style_emoticons/default/o.gif...
ich mache immer $xyz = "select * from blablubb";
Die Klammerung ist optional, hat (in diesem Fall) keine wirkliche Auswirkung.
SELECT * ist unperformant und sollte nicht benutzt werden. Lieber alle Spalten, die man fuer diese Selektion benoetigt einzeln angeben. Spart Resourcen, geht schneller und man hat mehr Ueberblick.
"Die Leute haben damals getanzt die die Bekloppten. Sie waren glücklich - auch und gerade weil es keine Star-DJs gab. Und was passierte? Kurze Zeit später simulierten sie das Rock'n'Roll-Modell mit Stars auf der Bühne und passivem Publikum davor. Nach nur fünf Jahren der Freiheit wurden DJs zum Band-Ersatz, es wurde einem neuem Götzen gehuldigt. In Wirklichkeit geht es doch um uns, die Tänzer! Wir sollten das ganze Genießen und all unsere Energie geben"
Tony Andrews, Groove #114 Interview
#96
Geschrieben 03. Sep. 2007 - 09:57 Uhr
was passt denn jetz wieder nich?
foreach ($_POST['thema'] as $key => $thema) {
$writedb = sprintf("INSERT INTO meetings (thema, aktion, bearbeitung, termin, startzeit, endzeit, author, erstellung) VALUES ('%s', '%s', '%s', '%s', '$_POST[startzeit]',
'$_POST[endzeit]', '$author', curdate())",
$thema,
$_POST['aktion'][$key],
$_POST['bearbeitung'][$key],
$_POST['termin'][$key]
);
mysql_query($writedb);
$meetingId = mysql_query("SELECT max(id) FROM meetings");
foreach ($_POST['teilnehmer'] as $teilnehmer => $teilnehmerId) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer);
}
printf("<tr><td>%s</td><td align=\"center\">%s</td><td align=\"center\">%s</td><td align=\"center\">%s</td></tr>\n",
$thema,
$_POST['aktion'][$key],
$_POST['bearbeitung'][$key],
$_POST['termin'][$key]);
}keine errors, aber auch keine einträge zum teilnehmer, db sieht in etwa so aus:
create database teammeeting; use teammeeting; create table meetings ( ID INT AUTO_INCREMENT PRIMARY KEY, `author` VARCHAR(64), `startzeit` VARCHAR(64), `endzeit` VARCHAR(64), `thema` TEXT, `aktion` VARCHAR(1), `bearbeitung` VARCHAR(64), `termin` VARCHAR(64), `erstellung` VARCHAR(10) ); CREATE TABLE `teilnehmer` ( `id` int(11) AUTO_INCREMENT NOT NULL, `vorname` varchar(50) NULL, `nachname` varchar(50) NULL, PRIMARY KEY(`id`) ); CREATE TABLE `meeting_teilnehmer` ( `meeting_id` int(11) NOT NULL, `teilnehmer_id` int(11) NOT NULL ); ALTER TABLE `meeting_teilnehmer` ADD CONSTRAINT `recipient_id` FOREIGN KEY(`meeting_id`, `teilnehmer_id`) REFERENCES `teilnehmer`(`id`, `id`); ALTER TABLE `meeting_teilnehmer` ADD CONSTRAINT `meeting_id` FOREIGN KEY(`meeting_id`, `teilnehmer_id`) REFERENCES `meetings`(`id`, `id`);
ich würd so langsam gern ma mit der darstellung der berichte anfangen
#97
Geschrieben 03. Sep. 2007 - 10:30 Uhr
sowas funktioniert? /public/style_emoticons/default/o.gif...
ich mache immer $xyz = "select * from blablubb";
Die Klammerung ist optional, hat (in diesem Fall) keine wirkliche Auswirkung.
SELECT * ist unperformant und sollte nicht benutzt werden. Lieber alle Spalten, die man fuer diese Selektion benoetigt einzeln angeben. Spart Resourcen, geht schneller und man hat mehr Ueberblick.
das mit den klammern wusste ich bisher nich.
es ging nur um die php syntax und nicht um das sql statement. mir ist schon klar das select * nicht besonders gut ist.
@flo:
mach doch mal:
mysql_query($addteilnehmer) or die (mysql_error());
so bekommste wenigstens ne fehlermeldung zurück und siehst evtl woran es liegt.
alternativ mal gucken ob deine variablen überhaupt daten enthalten?!
$P_UMFALLWAGEN=1003;
#98
Geschrieben 03. Sep. 2007 - 10:41 Uhr
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #3, M.Schroeder)' at line 1
löst das hier vieleicht den fehler aus?
if ("2" == $_POST['Author']) {
$author = "H. Billion";
} else if ("3" == $_POST['Author']) {
$author = "T. Koch";
} else if ("4" == $_POST['Author']) {
$author = "J. Ketabchy";
} else if ("5" == $_POST['Author']) {
$author = "I. Praum";
} else if ("6" == $_POST['Author']) {
$author = "M. Schroeder";
} else if ("7" == $_POST['Author']) {
$author = "F. Luettgens";
} else { echo "Panik!"; }
#99
Geschrieben 03. Sep. 2007 - 10:46 Uhr
mach mal den hier:
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $writedb);
und poste hier nochmal die komplette fehlermeldung.
$P_UMFALLWAGEN=1003;
#100
Geschrieben 03. Sep. 2007 - 10:50 Uhr
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #3, M.Schroeder)' at line 1
INSERT INTO meetings (thema, aktion, bearbeitung, termin, startzeit, endzeit, author, erstellung) VALUES ('test', 'A', 'tes1', 'test22', '09:47', '14:30', 'I. Praum', curdate())
hmm
#101
Geschrieben 03. Sep. 2007 - 10:53 Uhr
die sql syntax sieht korrekt aus...
aber der meckert ja wegen id#3.
haste mal versucht einfach irgendeinen festen wert da zu übergeben und nich den eigentlichen namen? z.B. 'test' ...
$P_UMFALLWAGEN=1003;
#102
Geschrieben 03. Sep. 2007 - 10:56 Uhr
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $addteilnehmer);
$addteilnehmer statt $writedb oder?
da kommt dann
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #3, M.Schroeder)' at line 1
INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES (Resource id #3, M.Schroeder)
und ich glaub meeting_id = Ressource id #3 ist falsch wa?
#103
Geschrieben 03. Sep. 2007 - 11:04 Uhr
#104
Geschrieben 03. Sep. 2007 - 11:06 Uhr
bin ja eben erst aufgestanden.
CREATE TABLE `teilnehmer` ( `id` int(11) AUTO_INCREMENT NOT NULL, `vorname` varchar(50) NULL, `nachname` varchar(50) NULL, PRIMARY KEY(`id`) ); CREATE TABLE `meeting_teilnehmer` ( `meeting_id` int(11) NOT NULL, `teilnehmer_id` int(11) NOT NULL );
du hast in der tabelle "teilnehmer" die namen als text stehen mit einer eindeutigen ID, die du einfach nur in die tabelle "meeting_teilnehmer" einfügst. also wenn du (F. Lüttgens) ID#1 bist kommt in "meeting_teilnehmer" die meeting_id von dem meeting das du gerade einfügen willst und deine 1. genau so verfährst du mit allen anderen teilnehmern.
um jetzt ein meeting hinzuzufügen gehst du so vor:
1. "meeting" hinzufügen
2. die meeting_id abfragen und in "meeting_teilnehmer" mit sämtlichen teilnehmer_ids einfügen (können ja mehrere teilnehmer sein, also immer die selbe id vom meeting mit den verschiedenen ids der teilnehmer. sind dann mehrere tupel (zeilen) in "meeting_teilnehmer"!)
3. das ganze nennt sich verknüpfung um redundanzen zu verhindern.
les dich am besten mal in datenbanken ein, ich denke das ist sehr hilfreich. du wolltest zuerst die leichte variante mit mehr oder weniger gewollten redundanzen machen, aber der palle hat dich jetzt auf die "richtige" redundanzfreie getrimmt.
meeting_id und teilnehmer_id sollten beide eigentlich INT sein.
ich glaub er hat den sinn deiner variante nich ganz verstanden...
aber fehlen da nich noch die foreign keys?
Dieser Beitrag wurde von Synthor bearbeitet: 03. Sep. 2007 - 11:07 Uhr
$P_UMFALLWAGEN=1003;
#106
Geschrieben 03. Sep. 2007 - 11:22 Uhr
Um es mal in der Sprache des Admins zu sagen:
Stell dir die meeting_id und die teilnehmer_id als Softlinks auf die Meeting- bzw. die Teilnehmer-Tabelle (besser gesagt auf jeweils einen Datensatz daraus).
#108
Geschrieben 03. Sep. 2007 - 11:33 Uhr
Dabei machen die Schlampen doch schon seit Tagen die Beine für ihn breit *stichel*
#109
Geschrieben 03. Sep. 2007 - 11:59 Uhr
nehmt mich ein letztes mal anne hand
aaalso
auf der eingabemaske habe ich mehrere checkboxen die alle in das array teilnehmer speichern:
<br><br><strong>Teilnehmer:</strong><br> <input type="checkbox" name="teilnehmer[]" value="2"> H.Billion\t <input type="checkbox" name="teilnehmer[]" value="3"> T.Koch\t <input type="checkbox" name="teilnehmer[]" value="4"> J.Ketabchy\t <input type="checkbox" name="teilnehmer[]" value="7"> I.Praum\t <input type="checkbox" name="teilnehmer[]" value="5"> M.Schroeder\t <input type="checkbox" name="teilnehmer[]" value="6"> U.Bergefeld\t <input type="checkbox" name="teilnehmer[]" value="1"> F.Luettgens\t
in der datenbank habe ich in den table teilnehmer folgende datensätze hinzugefügt:
mysql> select * from teilnehmer; +----+---------+-----------+ | id | vorname | nachname | +----+---------+-----------+ | 1 | Florian | Luettgens | | 2 | Horst | Billion | | 3 | Thomas | Koch | | 4 | Jahan | Ketabchy | | 5 | Michael | Schroeder | | 6 | Uwe | Bergefeld | | 7 | Ingo | Praum | +----+---------+-----------+ 7 rows in set (0.00 sec)
auf der post-page habe ich
$meetingId = mysql_query("SELECT max(id) FROM meetings");
foreach ($_POST['teilnehmer'] as $teilnehmer => $teilnehmerId) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $addteilnehmer);
}fehlermeldung:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #3, 4)' at line 1
INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES (Resource id #3, 4)
könnt ihr mir bitte explizit sagen was ich falsch mache? und thorsten was meinst du mit "aber fehlen da nich noch die foreign keys?
bin mal gespannt ob das auswerten nachher genauso ein trip wird ^^
Der große Admin versagt an einer einfachen Join-Table /public/style_emoticons/default/p.gif...
Dabei machen die Schlampen doch schon seit Tagen die Beine für ihn breit *stichel*
lol, jaja stichelt nur rum, is halt nich mein fachgebiet, und ich erheb ja auch garkeinen anspruch drauf die weisheit mit löffeln gefressen zu haben
wenn ich das alles schon könnt würd mein gehalt sicher noch 1-2 stufen besser ausfallen ^^
#110
Geschrieben 03. Sep. 2007 - 12:14 Uhr
REDUNDANZEN VERMEIDEN !!!
Wofür machst du ne Teilnehmer-Tabelle, wenn du die Namen eh als HTML hardcodest - pfui! aus!
Hol dir die schön aus der Tabelle:
// Eintraege holen ...
$query = "SELECT id, vorname, nachname FROM teilnemer";
$res = mysql_query($query)
if (!$res) {
// Fehlerbehandlung
} else {
$teilnehmerArray = array();
while($row = mysql_fetch_assoc()) {
$teilnehmerArray[] = $row;
}
}
// Anzeige
<strong>Teilnehmer:</strong>
<?php foreach($teilnehmerArray as $teilnehmer) : ?>
<br><input type="checkbox" name="teilnehmer[]" value="<?= $teilnehmer['id'] ?>"> <?= $teilnehmer['nachname'] ?>
<?php endforeach ?>Wenn du jetzt was an der Tabelle änderst, Teilnehmer hinzufügst oder entfernst, dann bleibt auch deine Anzeige up-to-date
und zweitens:
$meetingId = mysql_query("SELECT max(id) FROM meetings");
foreach ($_POST['teilnehmer'] as $teilnehmer => $teilnehmerId) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $addteilnehmer);
}das geht so net...
die foreach-Syntax ist:
foreach(<array> as <key> => <value>) ...
versuch's mal so:
$meetingId = mysql_query("SELECT max(id) FROM meetings");
foreach ($_POST['teilnehmer'] as $teilnehmerId => $teilnehmer) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $addteilnehmer);
}
Dieser Beitrag wurde von P. Stylez bearbeitet: 03. Sep. 2007 - 12:15 Uhr
#111
Geschrieben 03. Sep. 2007 - 12:18 Uhr
aber ein primary key ist ja zur eindeutigen identifikation da. z.B. in teilnehmer wäre das 1 | Florian | Luettgens oder jede andere zeile darin. es darf jede zahl nur einmal vorkommen, denn wenn es z.B. jetzt noch 666 | Florian | Luettgens geben würde wäre die datenbank redundant, also fehlerbehaftet und nicht der realität entsprechend (zitat meines datenbankdozenten
der foreign key dient eigentlich nur dazu das keine redundanzen auftreten.
ein beispiel:
in einem meeting gibt es eine teilnehmer_id, die es gar nicht in der tabelle teilnehmer gibt.
sowas kommt leicht zustande wenn der teilnehmer gelöscht wurde, seine id aber noch in der meeting irgendwo auftaucht. damit sowas beim delete, insert oder update entdeckt wird gibt es die foreign keys. die sorgen dafür das die beziehungen zwischen den tabellen (s.o.) mit hilfe der referenziellen integrität des dbms (databasemanagementsystem) gültig sind.
ich hoffe das konnte dir jetzt irgendwie helfen.
$P_UMFALLWAGEN=1003;
#113
Geschrieben 03. Sep. 2007 - 12:38 Uhr
OT:zitat meines datenbankdozenten
Wen hatteste? Hatte Krieps oder Krebs ... ka schon was länger her!
Aber fähiger Mann!
jaaaa den kriebs
kann man das nachvollziehen?
du kennst ihn sogar...unglaublich
$P_UMFALLWAGEN=1003;
#114
Geschrieben 03. Sep. 2007 - 13:24 Uhr
fehler:
http://de.php.net/mysql_fetch_assoc hat mir da gerad auch nich weiter geholfenWarning: Wrong parameter count for mysql_fetch_assoc() in /usr/local/apache2/htdocs/meeting.php on line 142
code:
$query = "SELECT id, vorname, nachname FROM teilnehmer";
$res = mysql_query($query);
if (!$res) {
echo ("Panik");
} else {
$teilnehmerArray = array();
while($row = mysql_fetch_assoc()) {
$teilnehmerArray[] = $row;
}
}
echo ("<br><br><strong>Teilnehmer:</strong>");
foreach($teilnehmerArray as $teilnehmer) {
echo("<br><input type=\"checkbox\" name=\"teilnehmer[]\" value=\"$teilnehmer[id]\">$teilnehmer[nachname]");
}zeile 142:
while($row = mysql_fetch_assoc()) {
$teilnehmerArray[] = $row;
}naja wie gesagt, hab gerad ma die php.net site angesehn, aber so von der syntax her seh ich keinen fehler, bitte um aufklärung (oder.. erlösung ^^)
#115
Geschrieben 03. Sep. 2007 - 13:28 Uhr
muss heissen:
while($row = mysql_fetch_assoc($res)) {(Zu meiner Verteidigung: wir verwenden dazu ne eigene Datenbank-Klasse, welche die einzelnen Aufrufe kapselt. Bin also nicht so vertraut mit den "rohen" MySQL-Befehlen von PHP)
#116
Geschrieben 03. Sep. 2007 - 13:37 Uhr
er zieht nun korrekterweise die teilnehmer aus der db und gibt die checkboxen aus, so weit so gut, nun beim absenden kommt fogender fehler:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id #3, 0)' at line 1
INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES (Resource id #3, 0)
ich verstehe die aber nicht wirklich, meckert es jetzt weil die teilnehmer_id == 0 ist?
code:
$meetingId = mysql_query("SELECT max(id) FROM meetings");
foreach ($_POST['teilnehmer'] as $teilnehmerId => $teilnehmer) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $addteilnehmer);
}
#117
Geschrieben 03. Sep. 2007 - 13:45 Uhr
mysql_query liefert so ne Datenbank-Ressource zurück, von der du dann das eigentliche Ergebnis fetchen kannst.
Try this:
$res = mysql_query("SELECT max(id) AS id FROM meetings");
$row = mysql_fetch_assoc($res);
$meetingId = $row['id'];
#118
Geschrieben 03. Sep. 2007 - 13:45 Uhr
hier msust du erst ein Ergebnis holen
$meetingId = mysql_result(mysql_query("SELECT max(id) FROM meetings"), 0);
foreach ($_POST['teilnehmer'] as $teilnehmerId => $teilnehmer) {
$addteilnehmer = ("INSERT INTO meeting_teilnehmer (meeting_id, teilnehmer_id) VALUES ($meetingId, $teilnehmerId)");
mysql_query($addteilnehmer) or die (mysql_error() . "<br />" . $addteilnehmer);
}Steht aber eigentlich alles im PHP Manual
"Die Leute haben damals getanzt die die Bekloppten. Sie waren glücklich - auch und gerade weil es keine Star-DJs gab. Und was passierte? Kurze Zeit später simulierten sie das Rock'n'Roll-Modell mit Stars auf der Bühne und passivem Publikum davor. Nach nur fünf Jahren der Freiheit wurden DJs zum Band-Ersatz, es wurde einem neuem Götzen gehuldigt. In Wirklichkeit geht es doch um uns, die Tänzer! Wir sollten das ganze Genießen und all unsere Energie geben"
Tony Andrews, Groove #114 Interview
#119
Geschrieben 03. Sep. 2007 - 13:55 Uhr
Steht aber eigentlich alles im PHP Manual
geb ich dir vollkommen recht, aber, da steht leider noch ne ganze menge mehr mit der ich rein garnichts anfangen kann
ich wollte doch nur ein kleines script um das meetings-protokoll zu vereinfachen, das da so ein rattenschwanz draus gewachsen iss konnte ich nich vorhersehn, das eure lösungen mich überfordern, war jedoch vorhersehbar
Et funzt!
palle nimm dich in acht, beim nächsten wiedersehn hagelt es jägertee & sportzigaretten
#120
Geschrieben 03. Sep. 2007 - 14:01 Uhr
Ich nehm den Jägertee und der Synthor übernimmt den anderen Part. Isn Deal, oder?
0 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 0, unsichtbare Mitglieder: 0



Anmelden
Registrieren
Nach oben




