-
30.12.11 22:32 #1
- Registriert seit
- Sep 2007
- Beiträge
- 527
Hallo zusammen,
ich Sitze hier bei einem kleinen Problem:
Ich erstelle Checkboxen aus einer Datenbanktabelle und will damit Daten in eine andere Tabelle eintragen.
Das ganze wird dann über ein Template ausgegeben.PHP-Code:$query = "SELECT klasse_id, klassenname FROM swtor_klasse";
$erg = mysql_query($query);
while($obj = mysql_fetch_object($erg))
{
$checkbox = '<label for="'.$obj->klasse_id.'">'.$obj->klassenname.'<input type="checkbox" name="'.$obj->klasse_id.'" id="'.$obj->klasse_id.'" />';
}
Wie kann ich das dann in eine DB eintragen?
Ich komm da auf keine Lösung.
Das ganze soll dann in die Speziestabelle eingetragen werden als erlaubte Klassen pro Spezies.
Kann mir da wer nen Tip geben?
Danke im voraus.Geändert von nchristoph (30.12.11 um 22:35 Uhr)
-
31.12.11 04:34 #2
Erstelle doch eine Tabelle mit den Spalten [ checkboxId | checkboxWert ].
Falls die Werte noch einem Bestimmten user zugeordnet werden müssen,
kannst du noch eine spalte wie z.B. "userId" hinzufügen.
Dan hättest du als Primärschlüssel entweder "checkboxId"
oder einen geteilten Primärschlüssel bestehend aus "checkboxId" und "userId".
Der SQL Query könnte dan wie folgt aussehen:
Code :1 2
DELETE FROM `tabellenname` WHERE `checkboxId` = 'aktuelleCheckboxId'; INSERT INTO `tabellenname` (checkboxId,checkboxWert) VALUES ('aktuelleCheckboxId', 'aktuellerCheckboxWert');
bzw.:
Code :1 2
DELETE FROM `tabellenname` WHERE `checkboxId` = 'aktuelleCheckboxId' AND `userID` = 'idDesAktuellenUsers'; INSERT INTO `tabellenname` (checkboxId,userId,checkboxWert) VALUES ('aktuelleCheckboxId', 'idDesAktuellenUsers', 'aktuellerCheckboxWert');
Wenn du dan deine checkboxen in "blahX" benennst wobei X für eine Zahl steht,
kannst du mit einer schleife immer den SQL-Query für jede checkbox wiederholen..
Beispiel(PHP):
Der String vor der Zahl muss leider da sein,PHP-Code:for($i=0;isset($_POST['blah'.$i]);$i++)
{
$id = 'blah'.$i;
$value = ( $_POST['blah'.$i] ? 1 : 0 ); // So filter ich gerne checkboxen ;)
mysql_query("DELETE FROM `tabellenname` WHERE `checkboxId` = '".$id."'");
if(!mysql_query("INSERT INTO `tabellenname` (checkboxId,checkboxWert) VALUES ('".$id."', '".$value."')"))
{
echo "ERROR: Id(".$id.") mit Wert(".$value.") wurde nicht gespeichert!<br>";
}
}
da ein name eines HTML-Elements keine Zahl sein darf.
Die Codes dienen natürlich nur als Beispiel
und müssen entsprechend für deinen gebrauch angepasst werden.
Hoffe der Post hat dir geholfen.
EDIT:
Hatte gerade langeweile und habe dir deshalb mal den PHP Code Fertig erstellt.
PHP-Code:$query = "SELECT klasse_id, klassenname FROM swtor_klasse";
$erg = mysql_query($query);
while($obj = mysql_fetch_object($erg))
{
if(isset($_POST[$obj->klasse_id])) // Prüfen ob die Checkbox gesetzt ist (das Formular abgesendet wurde)
{
$value = ( $_POST[$obj->klasse_id] ? 1 : 0 ); // Den wert der Checkbox gefiltert (Nur 1 (true) oder 0 (false))
$id = $obj->klasse_id; // die id zwischenspeichern um ne kürzere variable zu haben
mysql_query("DELETE FROM `tabellenname` WHERE `checkboxId` = '".$id."'");
if(!mysql_query("INSERT INTO `tabellenname` (checkboxId,checkboxWert) VALUES ('".$id."', '".$value."')"))
{
echo "ERROR: Id(".$id.") mit Wert(".$value.") wurde nicht gespeichert!<br>";
}
}
}
Geändert von H4ckHunt3r (31.12.11 um 13:06 Uhr) Grund: Code für sein Beispiel erstellt.
Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
31.12.11 08:06 #3
- Registriert seit
- Sep 2007
- Beiträge
- 527
Wow das ist ausführlich,
Danke.
Ich wollte eigentlich in der Tabelle swtor_spezies das so speichern:
spezies_id,speziesname,erlaubte klassen
1 , twilek , 1,2,3,4
Das wird wohl ned gehen denk ich mal oder?
-
31.12.11 08:11 #4
wie ist den das mit den spezies und klassen gemeint?
kann damit rellativ wenig anfangen
Müsstest die verbindung zwischen den sachen mal erklären
Aber sieht für mich so aus (zumindest ohne erklärung) als ob du 2 tabellen brauchst damit das ordentlich funktioniert.Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
31.12.11 08:12 #5
- Registriert seit
- Sep 2007
- Beiträge
- 527
Also das ganze is für meine Gilde in starwars the old republic.
Da kannst du nicht jede Spezies für jede Klasse hernehmen.
Twilek kann z.b. kein Sith-Krieger werden und chiss kein Sith-Inquisitor.
Und um das ganze übers ACP verwaltbar zu machen, habe ich eine Klassenverwaltung erstellt und das will ich jetzt mit der Speziesverwaltung koppeln
-
31.12.11 08:25 #6
Spezies Tabelle: [ Id(int)*+AUTO_INCREMENT | name(string/varchar) ]
Spezies Klassen verknüpfung: [ speziesId(int)* | klassId(int)* | allow(tinyint) ]
Hoffe mal ich habe keinen fehler gemachtPHP-Code:$query = "SELECT klasse_id, klassenname FROM swtor_klasse";
$erg = mysql_query($query);
while($obj = mysql_fetch_object($erg))
{
if(isset($_POST[$obj->klasse_id])) // Prüfen ob die Checkbox gesetzt ist (das Formular abgesendet wurde)
{
$value = ( $_POST[$obj->klasse_id] ? 1 : 0 ); // Den wert der Checkbox gefiltert (Nur 1 (true) oder 0 (false))
$id = $obj->klasse_id; // die id zwischenspeichern um ne kürzere variable zu haben
$sId = "... keine ahnung wo ich die SpeziesId her nehme in deinem Script^^";
mysql_query("DELETE FROM `verknuepfungstabelle` WHERE `speziesId` = '".$sId."' AND `klassId` = '".$id."'");
if(!mysql_query("INSERT INTO `verknuepfungstabelle` (speziesId,klassId,allow) VALUES ('".$sId."', '".$id."', '".$value."')"))
{
echo "ERROR: Id(".$id.") mit Wert(".$value.") wurde nicht gespeichert!<br>";
}
}
}

Die SpeziesId ($sId) musst du noch eintragen wo die her kommt
ob aus irgend einem Eingabefeld oder... keine ahnung
Geändert von H4ckHunt3r (31.12.11 um 08:28 Uhr)
Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
31.12.11 11:36 #7
- Registriert seit
- Sep 2007
- Beiträge
- 527
Also ich hab deinen Code mal versucht anzugleichen, haut aber nich wirklich hin.
Hier mal mein kompletter Code fürs hinzufügen der Rasse
speziesadd.php
acp_speziesadd.tplPHP-Code:<?php
require_once('acpcore/check_login.func.php');
$query = "SELECT klasse_id, klassenname FROM swtor_klasse";
$erg = mysql_query($query);
while($obj = mysql_fetch_object($erg))
{
$checkbox = '<label for="'.$obj->klasse_id.'">'.$obj->klassenname.'<input type="checkbox" name="'.$obj->klasse_id.'" id="'.$obj->klasse_id.'" />';
}
include('tpl/acp_speziesadd.tpl');
?>
admin.phpPHP-Code:<form action="index.php?p=admin" method="post" enctype="multipart/form-data" >
<fieldset class="form">
<legend>Neue Spezies</legend>
<!--<span class="error">Login Fehlerhaft</span><br />-->
<label for="name">Speziesname</label>
<input type="text" name="speziesname" id="speziesname" value="" /><br />
Erlaubte Klassen:<br/>
<?=$checkbox?>
<br/>
<label for="submit"> </label>
<input class="button" type="submit" value="Speichern" id="submit" /><br />
<input type="hidden" name="a" value="insert_spezies" />
</fieldset>
</form>
Ich find einfach keinen funktionierenden Weg, mit dem ich die Checkbox auslesen und in die DB eintragen kann und zwar ohne, das ich jedes mal einen neuen Insertbefehl machen muss. Das sollte in einem Rutsch gehen.PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_spezies'){
var_dump($_POST);
}
-
31.12.11 11:59 #8
Ändert sich die Anzahl der Klassen bzw. ist die Anzahl variabel?
Falls nein kannste des auch in eine Tabelle machen wenn es nicht zu viele sind..
[speziesId|speziesName|klasse1|klasse2|klasse3|klasse4|.....]
und dan einen INSERT Query machen.
Wie das auslesen der Checkboxen geht
siehst du ja zumindest Theoretisch
in meinen vorherigen posts.
Funktion zum Auslesen der Felder:
Nun musst du nurnoch die funktion aufrufen zum auslesenPHP-Code:function read_fields()
{
$query = "SELECT klasse_id, klassenname FROM swtor_klasse";
$erg = mysql_query($query);
$Arr = array();
while($obj = mysql_fetch_object($erg))
{
$Arr[$obj->klasse_id] = ( $_POST[$obj->klasse_id] ? 1 : 0 );
}
return $Arr;
}
und du bekommst alle checkboxen in einem Array zurück.
Als Key die id der klasse, mit dem entsprechenden Wert (true(1) oder false(0)).
dann musst du nurnoch den/die SQL-Query(s) machen.PHP-Code:$meineCheckboxen = read_fields();
Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
31.12.11 12:04 #9
- Registriert seit
- Sep 2007
- Beiträge
- 527
Momentan gibbet 4 Klassen pro Seite allerdings kann sich dies ja bei MMO's immer ändern.
Deswegen will ich das ganze über ACP machen, um es so einfach wie möglich zu machen, wenn was geändert gehört.
Achja: spezies_id ist AI mit Primary.
//EDIT
Ich habe jetzt nen weiteren Versuch gestartet, funktioniert irgendwie nicht.
Der Code innerhalb der for-Schleife wird nicht ausgeführt.PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_spezies'){
$name = strip_tags(mysql_real_escape_string($_POST['speziesname']));
for($i=0;isset($_POST['klasse_'+$i]);$i++){
$a = ( $_POST['klasse_'+$i] ? 1 : 0 );
$sql = "INSERT INTO swtor_spezies (speziesname,erlaubteklassen) VALUES ('".$name."', '".$a."')";
mysql_query($sql);
}
}
//Edit 2
Also ich hab das jetzt mal halbwegs zum laufen gebracht.
Jetzt trägt er mir zwar was in die DB ein, allerdings nur 1 Klasse, Unabhängig davon, wieviele ich anhacke.PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_spezies'){
$sql = ("SELECT MAX(klasse_id) AS maxklasse FROM swtor_klasse");
$res = mysql_query($sql);
if($result = mysql_num_rows($res)){
while($row = mysql_fetch_assoc($res)){
$maxklasse = $row['maxklasse'];
}
}
$name = strip_tags(mysql_real_escape_string($_POST['speziesname']));
for($i=1;$i < $maxklasse;$i++){
$a = ( $_POST['klasse_'.$i] ? 1 : 0 );
mysql_query("INSERT INTO swtor_spezies (speziesname,erlaubteklassen) VALUES ('".$name."', '".$i."')");
}
}
Wenn ich jetzt z.b. nur die 2 Klasse anklicke, krieg ich nen Index fehler das es die Checkboxen nicht gibt.
Naja,
ich wünsch euch einen guten Rutsch und ein besseres Jahr 2012.Geändert von nchristoph (31.12.11 um 20:37 Uhr)
-
31.12.11 20:52 #10
ersetze mal das
durchPHP-Code:$a = ( $_POST['klasse_'.$i] ? 1 : 0 );
EDIT:PHP-Code:$a .= ( $_POST['klasse_'.$i] ? 1 : 0 ).";";
so sieht es nach deinem Code aus.PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_spezies'){
$sql = ("SELECT MAX(klasse_id) AS maxklasse FROM swtor_klasse");
$res = mysql_query($sql);
$a = "";
if($result = mysql_num_rows($res)){
while($row = mysql_fetch_assoc($res)){
$maxklasse = $row['maxklasse'];
}
}
$name = strip_tags(mysql_real_escape_string($_POST['speziesname']));
for($i=1;$i < $maxklasse;$i++){
$a .= ( $_POST['klasse_'.$i] ? 1 : 0 ).";";
}
mysql_query("INSERT INTO swtor_spezies (speziesname,erlaubteklassen) VALUES ('".$name."', '".$i."')");
}
Allerdings finde ich die lösungen voher waren schöner,
da bei deinem Code durch das löschen fehler entstehen können.
PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_spezies'){
$sql = ("SELECT klasse_id FROM swtor_klasse");
$res = mysql_query($sql);
$a = "";
$name = strip_tags(mysql_real_escape_string($_POST['speziesname']));
while($obj = mysql_fetch_object($res)){
$a .= ( $_POST['klasse_'.$obj->klasse_id] ? 1 : 0 ).";"; // falls das klasse_ auch in der datenbank steht bitte entfernen^^
}
mysql_query("DELETE FROM swtor_spezies WHERE speziesname = '".$name."'");
mysql_query("INSERT INTO swtor_spezies (speziesname,erlaubteklassen) VALUES ('".$name."', '".$a."')");
}
Geändert von H4ckHunt3r (31.12.11 um 21:44 Uhr)
Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
02.01.12 20:35 #11
- Registriert seit
- Sep 2007
- Beiträge
- 527
So jetzt funktioniert die Eingabe, allerdings wird jetzt für jede Klasse ein eigener Datensatz erstellt.
Das führt jetzt zu Problemen bei der Ausgabe. Problemen insofern, das ich die Klasse nicht so Darstellen kann:
1: Twi'lek Sith Inquisitor, Sith Krieger
sonder so:
1: Twi'lek Sith Inquisitor
2: Twi'lek Sith Krieger
Wie muss ich das umbauen, damit ich das hinkriege?
//EDIT
OK Ich hab jetzt doch ein kleines Problem mit der Eingabe: und zwar wird immer nur 1 Wert eingetragen
23 1234 1;1;
Ich verwende jetzt diesen Code
PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_rasse'){
$sql = ("SELECT MAX(klasse_id) AS maxklasse FROM swtor_klasse");
$res = mysql_query($sql);
$a = "";
if($result = mysql_num_rows($res)){
while($row = mysql_fetch_assoc($res)){
$maxklasse = $row['maxklasse'];
}
}
$name = strip_tags(mysql_real_escape_string($_POST['rassenname']));
for($i=1;$i < $maxklasse;$i++){
$a .= ( $_POST['klasse_'.$i] ? 1 : 0 ).";";
}
mysql_query("INSERT INTO swtor_rasse (rassenname,erlaubteklassen) VALUES ('".$name."', '".$a."')");
}
Geändert von nchristoph (02.01.12 um 21:05 Uhr)
-
03.01.12 04:19 #12
So mein letzter versuch dir zu helfen

Für dein einlesen:
PHP-Code:if(isset($_POST['a']) AND $_POST['a']=='insert_rasse'){
$sql = "SELECT klasse_id FROM swtor_klasse";
$res = mysql_query($sql);
$a = "";
$name = strip_tags(mysql_real_escape_string($_POST['rassenname']));
while($obj = mysql_fetch_object($res)){
$a .= ( $_POST['klasse_'.$obj->klasse_id] ? 1 : 0 ).";"; // falls das klasse_ auch in der datenbank steht bitte entfernen^^
}
@mysql_query("DELETE FROM swtor_rasse WHERE rassennname = '".$name."'");
mysql_query("INSERT INTO swtor_rasse (rassenname,erlaubteklassen) VALUES ('".$name."', '".$a."')");
}
Und für die ausgabe der erlaubten klassen:
du musst einfach nur die methode aufrufen und den rückgabewert ausgeben!PHP-Code:function get_klassen()
{
$res = mysql_query("SELECT * FROM swtor_rasse");
while($obj = mysql_fetch_object($res))
{
$ausgabe = $obj->rassenname.": ";
$classes = explode(";",$obj->erlaubteklassen);
for($i=0;$i<count($classes);$i++)
{
$res = mysql_query("SELECT name FROM swtor_klasse WHERE id=".$classes[$i]);
$ausgabe .= mysql_result($res,0).($i==(count($classes)-1)?"<br>":", ");
}
}
return $ausgabe;
}
PHP-Code:echo get_klassen();
Geändert von H4ckHunt3r (03.01.12 um 05:43 Uhr)
Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
03.01.12 22:17 #13
- Registriert seit
- Sep 2007
- Beiträge
- 527
So danke jetzt wirds mal so eingetragen wie es sein sollte. Leider haperts an der Ausgabe:
Hier die Funktion:PHP-Code:Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 18 in C:\xampp\htdocs\swtor\acp\acpcore\function.php on line 15
Ich hab schon einiges gefixt aber diese Warnung krieg ich nicht weg. Hast du ne Idee?PHP-Code:function get_klassen()
{
//$i = "0";
$res = mysql_query("SELECT * FROM swtor_rasse");
while($obj = mysql_fetch_object($res))
{
$ausgabe = $obj->rassenname.": ";
$classes = explode(";",$obj->erlaubteklassen);
for($i=0;$i<count($classes);$i++)
{
$sql = ("SELECT klassenname FROM swtor_klasse WHERE klasse_id='".$classes[$i]."'");
$res = mysql_query($sql) or trigger_error('Fehler in Query "'.$sql.'". Fehlermeldung: '.mysql_error(),E_USER_ERROR);
$ausgabe .= mysql_result($res,0).($i==(count($classes)-1)?"<br>":", ");
}
// $i++;
include('/tpl/acp_rasselist_content.tpl');
}
return $ausgabe;
}
-
04.01.12 07:00 #14kannst es ja mal so versuchen..PHP-Code:
function get_klassen()
{
//$i = "0";
$res = mysql_query("SELECT * FROM swtor_rasse");
while($obj = mysql_fetch_object($res))
{
$ausgabe = $obj->rassenname.": ";
$classes = explode(";",$obj->erlaubteklassen);
for($i=0;$i<count($classes);$i++)
{
$sql = ("SELECT klassenname FROM swtor_klasse WHERE klasse_id='".$classes[$i]."'");
$res = mysql_query($sql) or trigger_error('Fehler in Query "'.$sql.'". Fehlermeldung: '.mysql_error(),E_USER_ERROR);
$row = mysql_fetch_object($sql);
$ausgabe .= $row->klassenname.($i==(count($classes)-1)?"<br>":", ");
}
// $i++;
include('/tpl/acp_rasselist_content.tpl');
}
return $ausgabe;
}
Lg H4ckHunt3r
Auf Danke klicken kostet nichts und weh tut es auch nicht ;)
Meine Homepage | Mein Projekt | Mein Clan
-
04.01.12 14:13 #15
- Registriert seit
- Sep 2007
- Beiträge
- 527
Ich habs jetzt so abgewandelt, das ichs mit meinen Templates verwenden kann.
Notice: Trying to get property of non-object on Line 17.PHP-Code:<?php
require_once('acpcore/check_login.func.php');
include('acpcore/function.php');
include('/tpl/acp_rasselist_header.tpl');
$j = "0";
$res = mysql_query("SELECT * FROM swtor_rasse");
while($obj = mysql_fetch_object($res))
{
$name = $obj->rassenname;
$j++;
$classes = explode(";",$obj->erlaubteklassen);
for($i=0;$i<count($classes);$i++)
{
$res = mysql_query("SELECT klassenname FROM swtor_klasse WHERE klasse_id='".$classes[$i]."'");
$row = mysql_fetch_object($res) ;
$klasse = $row->klassenname.", ";
}
include('/tpl/acp_rasselist_content.tpl');
}
include('/tpl/acp_rasselist_footer.tpl');
?>
Zeile 17
Die Warnung tritt auch beim Originalcode aud.PHP-Code:$klasse = $row->klassenname.", ";
Ähnliche Themen
-
Dynamische Checkbox einem Dynamischen Formularfeld zuweisen
Von Volvo1979 im Forum PHPAntworten: 4Letzter Beitrag: 15.07.10, 11:44 -
checkbox value auf andere checkbox übertragen
Von Smitmeit im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 09.03.10, 14:39 -
Checkbox in SQL Datenbank eintragen
Von michaelsoft im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 09.08.04, 23:26 -
Werte in MySQL eintragen -> auslesen -> editieren wieder eintragen
Von M@rk im Forum PHPAntworten: 8Letzter Beitrag: 07.03.04, 12:35 -
Checkbox-Werte eintragen
Von magic_halli im Forum ASPAntworten: 1Letzter Beitrag: 05.09.03, 13:40



2Danke

Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren