PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

13-05-2007, 03:41
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
CheckBoxen Auswerten
Ich habe 2 Fragen zum Thema Auswerten von Checkbox. Ist etwas schwer zu erklären aber ich versuchs ^^.
Ich habe eine Bibliothek Datenbank-System erstellt mit den Tabellen "Buch", "Kunde", und "Ausleihe".
Es gibt eine Seite mit einem Formular, wo Kunden sich "anmelden" sollen. Neben Persönliche Daten, wie Vorname, Name, ..., soll der Kunde auch (optional) seine lieblings BuchKategorie wählen können(wie z.B. Komödie, Drama, Thriller...)
Das Formular verweist auf action=kunde_speichern.php, methode=post,
wo die eingegebenen Daten überprüft werden und anschliessen, nach dem sie in die DB hinzugefügt worden sind, in eine Tabelle dem neu angemeldeten Kunden gezeigt werden.
Diese Tabelle hat 2 Spalten. In der 1. Spalte stehen die Attribute wie Vorname, Name, Strasse, HausNr etc... und in der 2. Spalte stehen die Daten die eingegeben wurden bzw. nich eingegeben wurden (wenn nicht dann steht da "nicht angegeben").
Jetzt hat man als letztes 3 Kategorien gewählt (zB. Action, Thriller, Krimi). Nach der erfolgreichen Überprüfung des Formulars, werden die Daten wieder aufgelistet.
Nun komm ich zum Problem:
in der 2. Spalte der letzten Zeile, wo die angeklickten Kategorien angezeigt werden müssen, entsteht plötzlich für jede gewählte Kategorie eine Spalte. Also für die das Beispiel oben 3 Spalten. SOmit erstreckt sich auch die Tabelle und sieht nicht schön aus.
Wie kann ich das verhindern und diese so gestalten dass er zB. 3 neben einander hat dann Zeilenumbruch macht und wieder 3 dann nochmal Zeilenumbruch und wieder 3...
Hier ist der Teil von kunde_speichern.php:
PHP-Code:
<?php
$notgiven = "nicht angegeben";
...
echo "<tr>";
echo "<td width=99 height=25 align=right bgcolor=#FFFF99><font face=tahoma size=2><b>Favoriten:</b></font></td>";
if ($_POST[buchkat] == FALSE)
{
echo "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2>$notgiven<br></font></td>";
}
else {
foreach ($buchkat as $elem) {
echo "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2>$elem<br></font></td>";
}
}
echo "</tr>";
echo "</table>";
mysql_close($conn);
?>
Die 2. Frage ist wie realisiere ich, dass er in der Datenban, also phpMyAdmin, diese anzeigt. Weil da in der Spalte Favoriten steht das Wort Array und nicht die gewählten Buchkategorien...
VIELEN DANK für eure antworten...
|

13-05-2007, 13:43
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
Hallo nochmal.
Also ich habe es rausgekrigt, dass er mir die Sachen nur in eine Spalte ausgibt. Jetzt habe ich habe das Problem, dass er, wenn ich z.B. 3 Checkboxen angeklikt habe, diese 3mal hintereinander ausgibt: also stehen da 9 Elemente.
Wie kann ich das realisieren dass er mir die angeklickten checkboxen nur einmal aus gibt?
jetzt sieht der Code so aus:
PHP-Code:
echo "<tr>";
echo "<td width=99 height=25 align=right bgcolor=#FFFF99><font face=tahoma size=2><b>Favoriten:</b></font></td>";
if ($_POST[buchkat] == FALSE)
{
echo "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2 color=#FF0000>$notgiven<br></font></td>";
}
else {
echo "<td width=320 height=25 align=left bgcolor=#00FFFF><font face=tahoma size=2>";
foreach ($buchkat as $elem) {
$trennung = implode(",", $buchkat);
echo "$trennung";
}
echo "<br></font></td>";
}
echo "</tr>";
echo "</table>";
|

13-05-2007, 13:54
|
ministry
PHP Junior
|
|
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
|
|
Zitat:
Original geschrieben von Flash Blaster
[PHP]
foreach ($buchkat as $elem) {
$trennung = implode(",", $buchkat);
echo "$trennung";
}
|
Entweder foreach, oder implode. Eins reicht. Implode ist praktischer.
|

13-05-2007, 14:25
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
@ ministry: DANKE hat natürlich geklappt
Jetzt ist zum Thema ein weiteres Problem folgende:
Wie kann ich es realisieren, dass er die angeklickten Checkboxen im phpMyAdmin Datenbank, in der Tabelle "Kunde" anzeigt?
Weil da in der Spalte "Favoriten" steht immer das Wort "Array" statt die gewählten werte der buchkat...
|

13-05-2007, 15:19
|
ministry
PHP Junior
|
|
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
|
|
Im PMA steht "Array" drin? Dann machst du grundlegend was verkehrt - du darfst natürlich nicht das Array auf einmal, sondern musst jeden Wert einzeln abspeichern.
Und hinzu kommt, dass du versuchst, mehrere Werte in eine Spalte abzuspeichern, was schlechtes Datenbankdesign bedeutet.
Kurz erklärt: Du brauchst noch zwei weitere Tabellen. Eine für die "Kategorien", und eine "lookup"-Tabelle zum Nachschlagen, wo die Benutzer-id und die Kategorie-ID drinsteht.
|

13-05-2007, 22:36
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
Achso...
Ich hab ja erst seit kurzem mit PHP angefangen ^^
Danke aber für den Tipp, ich werde es versuchen. Ich hoffe ich krieg das hin.
Also du meinst ich soll eine Tabelle Kategorie erstellen mit eine ID und die Kategorien und eine Tabelle lookup wo die KategorieID und BenutzerID drin sin?
also soll die lookup ID nur die 2 attribute haben ?
Und nochwas:
in der kunde_eingeben.php steht INSERT INTO Kunde...
Wo müssen also die Auswertung der checkboxen hin, wenn ich dafür eine eigene Tabelle mache?
Geändert von Flash Blaster (13-05-2007 um 22:50 Uhr)
|

13-05-2007, 23:14
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
So ich habe jetzt 2 neue Tabellen erstellt:
Kategorie mit 16 Felder:
1. CID Typ=INT, Länge=5, Primärschlüssel, auto_increment
2. Abenteuer, VARCHAR, 60
3. Action, VARCHAR, 60
...
16. Thriller, VARCHAR, 60
_________________
Lookup mit 3 Felder:
1. KID, INT, 5, Primärschlüssel (KID für KundenID)
2. CID, INT, 5 (CID für KategorieID)
3. Kategorien, VARCHAR, 150
____________________
ist das so wie du es meinest?
wenn ja wie muss ich denn jetzt fortfahren? (die Fragen von vorherige Antwort^^)
|

13-05-2007, 23:54
|
ministry
PHP Junior
|
|
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
|
|
ähm, nicht ganz...
ich meinte es ungefähr so:
Code:
Tabelle Kategorien
(2 Felder, int primary key auto increment und varchar)
kat_id kat_name
1 Thriller
2 Liebesroman
3 Sachbuch
...
Tabelle Buch
buch_id name kategorie (... weitere Spalten)
1 xyz 1
1 abc 2
Tabelle Benutzer
benutzer_id name
1 hans
2 klaus
tabelle Favoriten
benutzer_id kategorie_id
1 3
2 1
2 2
Das bedeutet dann, dass Hans nur Sachbücher mag, während Klaus auf Thriller und Liebesromane steht. Außerdem kann man die Bücher so viel einfacher zuordnen.
Selbes Prinzip übrigens natürlich mit Autoren usw - wenn du in die Buchtabelle jedesmal den Namen eines Autors reinschreibst, kriegst du sehr schnell Probleme, weil es mal so mal so geschrieben ist.
Also eine Tabelle Autoren, und in die Buchtabelle gehört dann nur die ID des Autoren.
|

14-05-2007, 00:56
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
Ja , aber wie mache ich dass, wenn ein Kunde 2 oder 3 Kategorien wählt, wie muss das dann in der Tabelle Favoriten aussehen?
Hab jetzt folgendes:
Code:
Kategorie: Kat_ID: INT(5), auto_increment,Primary key; Kategorie: VARCHAR(20)
Kat_ID Kategorie
1 Abenteuer
2 Action
3 Biographie
... ...
------------------------------
Favoriten: KID: INT(5), Primary Key; Kat_ID: INT(5)
KID Kat_ID
-----------------------------
Ist das Korrekt so?
Außerdem, ich will nich dass in Buch Tabelle auch eine Spalte für Kategorie ist. Der Kunde soll nur wählen welche Kategorien seine Favoriten sind.
Und dies soll dann ausgegeben werden können. ZB. soll man wählen können Welche Kunde welche Favoriten hat...
Also ich meine so mit namen und nich mit Nummern...
|

14-05-2007, 01:01
|
ministry
PHP Junior
|
|
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
|
|
Zuordnungen, was zu wem gehört, macht man immer über die ids, nicht über die namen.
In der Tabelle Kategorien stehen doch die Namen, da kannst du sie ja abholen bei bedarf.
Wenn ein Kunde mehrere Favoriten hat, dann steht er da mehrmals drin - siehe mein Beispiel mit "Klaus".
Wenn die Bücher keine Kategorie haben sollen, dann versteh ich allerdings nicht ganz was das mit den Favoriten soll.
|

14-05-2007, 01:14
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
hehe...Ja das ist einfach nur für InfoKurs. Das ist nicht so wichtig...
Das ist so wie in Physik: Da lässt man manchmal bei der Berechnung auch einige Faktoren raus wie Luftreibung, oder Luftwiderstand...^^
OK... Soweit geschafft...und DANKE³
Wie bringe ich das Ganze in dem Script?
Wenn der Kunde auf der AnmeldeSeite ist dann trägt er seine Daten ein...
und als letztes ist plötzlich noch so ein Auswahlsystem, wo er eine oder mehrere Sachen wählen kann.
Jedoch klappt das ja nicht mit dem INSERT INTO Kunde (...) VALUES (...);
Weil ja die Kategorien eine eigene Tabelle haben...
muss man 2 scripts schreiben und de irgendwie verknüpfen... oder ein INSERT INTO Favoriten... direkt nach INSERT INTO Kunde einbauen...
oder wie muss man da vorgehen???
|

14-05-2007, 01:22
|
ministry
PHP Junior
|
|
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
|
|
Zitat:
Original geschrieben von Flash Blaster
hehe...Ja das ist einfach nur für InfoKurs. Das ist nicht so wichtig...
Das ist so wie in Physik: Da lässt man manchmal bei der Berechnung auch einige Faktoren raus wie Luftreibung, oder Luftwiderstand...^^
|
äh, aha, na wenns denn trotzdem nachher noch alles stimmt...
Zitat:
muss man 2 scripts schreiben und de irgendwie verknüpfen... oder ein INSERT INTO Favoriten... direkt nach INSERT INTO Kunde einbauen...
oder wie muss man da vorgehen???
|
Letzteres
|

14-05-2007, 01:39
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
also muss ich das so machen?
PHP-Code:
$kunden_daten = "INSERT INTO `Kunde`(
Vorname,
Name,
Strasse,
HausNr,
PLZ,
Ort,
TelefonNr,
Geburtsdatum,
Geschlecht,
Email
)
VALUES(
'$_POST[vname]',
'$_POST[nname]',
'$_POST[str]',
'$_POST[hausnum]',
'$_POST[plzahl]',
'$_POST[ort]',
'$_POST[tel]',
'$_POST[geb]',
'$_POST[geschlecht]',
'$_POST[mail]'
);";
$fav_auswahl = "INSERT INTO `Favoriten`(
Kat_ID,
)
VALUES(
'$_POST[buchkat]'
);";
$k_res = mysql_query($kunden_daten) OR die(mysql_error());
$f_res = mysql_query($fav_auswahl) OR die(mysql_error());
ach ja und der HTML-Code für Checkboxen sieht so aus:
Code:
<td>
<font face="Tahoma" size="2">
<input type="checkbox" name="buchkat[]" value="Abenteuer">Abenteuer<br>
<input type="checkbox" name="buchkat[]" value="Action">Action<br>
<input type="checkbox" name="buchkat[]" value="Biografie">Biografie<br>
<input type="checkbox" name="buchkat[]" value="Drama">Drama<br>
<input type="checkbox" name="buchkat[]" value="Erotik">Erotik</td>
</font>
<td>
<font face="Tahoma" size="2">
<input type="checkbox" name="buchkat[]" value="Fantasy">Fantasy<br>
<input type="checkbox" name="buchkat[]" value="Kinderbuch">Kinderbuch<br>
<input type="checkbox" name="buchkat[]" value="Kochbuch">Kochbuch<br>
<input type="checkbox" name="buchkat[]" value="Komödie">Komödie<br>
<input type="checkbox" name="buchkat[]" value="Krimi">Krimi</td>
</font>
<td>
<font face="Tahoma" size="2">
<input type="checkbox" name="buchkat[]" value="Novelle">Novelle<br>
<input type="checkbox" name="buchkat[]" value="Roman">Roman<br>
<input type="checkbox" name="buchkat[]" value="Sachbuch">Sachbuch<br>
<input type="checkbox" name="buchkat[]" value="Science-Fiction">Science-Fiction<br>
<input type="checkbox" name="buchkat[]" value="Thriller">Thriller</td>
</font>
Wenn das falsch ist, wie müsste es denn aussehen
|

14-05-2007, 01:47
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
das ist falsch. und warum das falsch ist, findest du heraus, indem du dir die query mal vor dem ausführen ausgeben lässt.
|

14-05-2007, 01:54
|
Flash Blaster
Newbie
|
|
Registriert seit: May 2007
Beiträge: 25
|
|
da steht Query was empty
wie muss ich das denn richtig machen??
was muss ich denn ändern ???
Geändert von Flash Blaster (14-05-2007 um 01:57 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|