php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.08.2005, 12:09  
Benutzer
 
Registriert seit: 18.07.2005
Beiträge: 90
c-bass
Standard Arraywerte auslesen und in Datenbank geben?

Hi,

Ich habe einen Objektdatenbank wo Benutzern/Kunden mehrere Objekte zugewiesen werden können. Genau da liegt auch das Problem. Wenn ich die Array werte (siehe *** Markierung) in die Datenbank speichern will, erfolgt ein Eintrag "Array" im Datenbankfeld.

In der newobjekt.php kann der Admin ein neues Objekt anlegen und das Objekt meheren Kunden zuweisen:

PHP-Code:
<?php
<form action="newobjekt_erfolgt.php" method="post" name="form1"
  <
TABLE BORDER="0" WIDTH="770" ALIGN="LEFT" CELLPADDING="1">
    <
TR>
      <
TD VALIGN="TOP" ALIGN="left">[b]&raquo;[/b] [url="javascript:history.go(-1);"]<font size="2" face="Arial, Helvetica, sans-serif">Zur&uuml;ck</font>[/url]<font size="2" face="Arial, Helvetica, sans-serif"> </font><A NAME="Ankereins"></A>

      </
TD>
    </
TR>
    <
TR>
      <
TD ALIGN="CENTER" VALIGN="TOP"><FONT SIZE="+1" FACE="Arial"><U>[b]Objekte
              anlegen
[/b]</U></FONT>

        

      </
TD>
    </
TR>
    <
TR>
      <
TD ALIGN="LEFT" valign="top">
        <
TABLE BORDER="0" WIDTH="770" ALIGN="LEFT">
          <
TR align="left" valign="top">
            <
TD height="12">[b]<font size="2" face="Arial, Helvetica, sans-serif">Objektnummer:</font>[/b]</TD>
            <
TD>[b]<font face="Arial, Helvetica, sans-serif" size="2">
              
              <
input name="ObjektnummerO" type="hidden" value="<? echo $ObjektnummerO; ?>">
            </
font>[/b]<font face="Arial, Helvetica, sans-serif" size="1">(wird automatisch vergeben) </font>            </TD>
          </
TR>
          <
TR align="left" valign="top">
            <
TD WIDTH="173" height="12">[b]<font size="2" face="Arial, Helvetica, sans-serif"Strasse</font>[/b]</TD>
            <
TD width="808">[b] <font face="Arial, Helvetica, sans-serif" size="2">
              <
input name="Strasse" type="text" value="<? echo $Strasse; ?>" size="60">
              </
font>[/b]</TD>
          </
TR>
          <
TR align="left" valign="top">
            <
TD height="13">[b]<font size="2" face="Arial, Helvetica, sans-serif">Postleitzahl</font>[/b]</TD>
            <
TD>[b] <font face="Arial, Helvetica, sans-serif" size="2"> [b]
              <
input name="Postleitzahl" type="text" value="<? echo $Postleitzahl; ?>">
              [/
b] </font>[/b]</TD>
          </
TR>
          <
TR align="left" valign="top">
            <
TD WIDTH="173">[b]<font size="2" face="Arial, Helvetica, sans-serif">Ort</font>[/b]</TD>
            <
TD width="808">
              

 <
font face="Arial, Helvetica, sans-serif" size="2">[b]
                <
input name="Ort" type="text" value="<? echo $Ort; ?>">
                [/
b]</font></p>
              

<
font face="Arial, Helvetica, sans-serif" size="2">[b] [/b]</font></p>
            </
TD>
          </
TR>
          <
TR align="left" valign="top">
            <
TD><font face="Arial, Helvetica, sans-serif" size="2">[b]Mieter[/b]</font></TD>
            <
TD>
            <? 
                
//Datenbankanbindung zu Tabelle "Kundennummer" mit Variabeln
                
$verbindung mysql_connect($conf_pass->db_host,$conf_pass->db_user,$conf_pass->db_pass); 
                
mysql_select_db($conf_pass->db_name,$verbindung); 
                
$befehl1="SELECT Kundennummer FROM fa_pass0_data";  

                
//Befehl1 ausführen
                
$objekte mysql_query($befehl1,$verbindung);

                
//Alle Kundennummern der vorhandenen Kunden auslesen/anzeigen und dann in Feld Mieter eintragen
                
print "<select name=Mieter[] size=4 multiple>";
                while(
$eingabe mysql_fetch_array($objekte)) {
                                                                print 
"<option>$eingabe[Kundennummer]</option>";
                                                                }
                print 
"</select>"
            
?>
            </TD>
          </TR>
        </TABLE>
      </TD>
    <TR>
      <TD ALIGN="CENTER" VALIGN="MIDDLE">
        


          <input type="submit" name="Submit" value="Objekt anlegen">
        </p>
      </TD>
    </TR>
  </TABLE>
</form>
?>

Die newobjekt_erfolgt.php fügt die Daten in die Datenbank ein. Alles ausser den Kundennummern im Feld Mieter funktioniert:

PHP-Code:
<?php
// *** Datenbankanbindung zu Tabelle "Objekte" mit Variabeln unter FAPass

$verbindung mysql_connect($conf_pass->db_host,$conf_pass->db_user,$conf_pass->db_pass);  
mysql_select_db($conf_pass->db_name,$verbindung) or die(mysql_error()); 

//Wenn Benutzer auf admin.newobjekt.php den Submitbutton geklickt hat und die Daten mittels
 
Post (Formularkorrekt übergeben wurdentrage die Werte in Datenbank ein
if (isset($_POST['Submit'])) { 
                              
mysql_query("INSERT INTO Objekte (ObjektnummerO,Strasse,Postleitzahl,Ort,Eigentuemer,Mieter)
 VALUES ('$ObjektnummerO','$Strasse','$Postleitzahl','$Ort','$Eigentuemer','$Mieter')"
) or die(mysql_error());
                             }
                        
?>

Wie bekomme ich die Arraywerte mit den Kundennummern in die Datenbank. Normalerweise sollten dann im Feld Mieter mehere Kundenummern mit Komma getrennt oder so gespeichert sein.
__________________
// http://www.4Webworking.de
// Das Ressourcenarchiv für Webworker
c-bass ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.08.2005, 12:45  
Gast
 
Beiträge: n/a
Standard

Probiers mal in etwa so:

PHP-Code:
<?php

implode
(",",$Mieter); 


?>
Damit fügt er die Array-Werte zu einer Variablen zusammen und packt zwischen jeden Wert ein Komma.
Musst du dann nur noch per UPDATE eintragen.
 
Alt 08.08.2005, 12:53  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Da hast du als erstes mal ein Design-Problem. Wenn du mehrere Mieter zu einem Objekt hast, musst du diese in einer eigenen Tabelle ablegen. Es gibt also eine Tabelle Objekt mit
  • Onummer
    Adresse
    Eigentümer
    etc
ohne das Attribut Mieter und eine Tabelle Mieter mit
  • MNummer
    Onummer
    Name
    etc
Vielleicht hast du diese ja schon (fa_pass0_data ?). Dann gehört dort noch die Objeknummer rein, als Fremdschlüssel zur Objekt-Tabelle. Für jedes eingegebene Objekt gibt das dann einen INSERT in die Objekttabelle und soviele INSERTS (oder UPDATES ?) in die Mietertabelle, wie das ensprechende Array Einträge hat. So als Grundgerüst könnte das dann etwa so aussehen:
PHP-Code:
<?php
if (isset($_POST['Submit'])) {if (isset($_POST['Submit'])) {
    
$sql "INSERT INTO Objekte (
                ObjektnummerO, 
                Strasse, 
                Postleitzahl, 
                Ort, 
                Eigentuemer)
            VALUES (" 
.
                
$_POST['ObjektnummerO'] . ", '" .
                
$_POST['$Strasse'] . "', '" .
                
$_POST['$Postleitzahl'] . "', '" .
                
$_POST['$Ort'] . "', '" .
                
$_POST['$Eigentuemer') . "')";
    
mysql_query($sql) or die(mysql_error());
    foreach(
$_POST['Mieter'] as mieter{
        
$sql1 "INSERT INTO Mieter (
                         Mnummer,
                         Onummer)
                     VALUES(
                         $mieter, " 

                         
$_POST['ObjektnummerO'] . ")";
        
mysql_query($sql1) or die(mysql_error());
    }

?>
Und lass in diesem Fall die Finger von implode(), das es allen Grundsätzen von relationalen Datenbanken widerspricht, mehrere Werte in ein Attribut zu packen.
Übrigens wäre es wahrscheinlich verständlicher, in deiner Auswahlliste die Namen der Mieter anzuzeigen, als eine nichtssagende Nummer. So im Stil von
PHP-Code:
<?php
print "<option value='" .  $eingabe['Kundennummer'] . "'>" $eingabe['Name'] . "</option>";
?>
Aber das nur so nebenbei.
__________________
Gruss
L
lazydog ist offline  
Alt 08.08.2005, 12:57  
Benutzer
 
Registriert seit: 18.07.2005
Beiträge: 90
c-bass
Standard

@powerpaule: wie meinst du das? also nach jeder Objektanlegung mit INSERT, soll ich dann nochmal am Ende der Datei die Werte mit Update ändern lassen?

Wie würde der Eintrag dann aussehen? so?

PHP-Code:
<?php
                                mysql_query
("UPDATE Objekte SET Mieter='$Mieter(]' WHERE ObjektnummerO='$eingabe[ObjektnummerO]'") or die(mysql_error()); 

?>
__________________
// http://www.4Webworking.de
// Das Ressourcenarchiv für Webworker
c-bass ist offline  
Alt 08.08.2005, 13:15  
Benutzer
 
Registriert seit: 18.07.2005
Beiträge: 90
c-bass
Standard

@lazydog:

ich weiss nicht ob ich dir das verständlcih rüberbringen kann, wie ich mir das gedacht habe:

also ich habe eigentlich 3 Tabellen

- Objekte (enthält die Objektspezifischen Daten: Adresse usw.. und Feld Mieter und Eigentümer in die dann die Kundennummern eingetragen werden sollen)
- fa_pass0_data (enthält Stammdaten des Kunden)
- fa_pass0_login (enthält Stammdaten des Kunden)

die letzteren beide musste ich getrennt lassen, weil das vorhandene Skript (FAPass) so gebaut ist, und ich dann alles umschreiben müsste --> sau arbeit!!



also ich habe die Tabelle "fa_pass0_login":

user_id | Name | ..weitere Felder.. | ObjektnummerK


dann habe ich die Tabelle "Objekte":

ObjektnummerO | ..Adressdaten.. | Mieter | Eigentümer



Wenn ein Objekt angelegt wird, werden dem Objekt alle Kundenummern derzugehörigen Mieter und Eigentümer in das Feld Mieter bzw. Eigentümer eingetragen. Bsp: Mieter - KDN123,KDN456

So ist wie ich mir das bis jetzt gedacht habe!

Wenn ich damit fertig bin soll gleichzeitig bei jeder Objektanlegung geschaut werden wem die Kundennummer in Mieter bzw. Eigentümer gehören. Es soll dann die Objektnummer des Objektes bei dem jeweiligen Kunden in der Tabelle fa_pass0_login eingetragen werden.

Der Grund, dass ich das so kompliziert mache ist der folgende:

Später muss ich anhand der Kundennummern auslesen, welche Objekte ihm zugeordnet wurden und ob der entweder der Mieter oder der Eigentümer des Objektes ist.

Hui, hoffe das kam rüber!



Kannst du mir trotzdem sagen, wie ich meinen Array in die Datenbank bekommen würde?
__________________
// http://www.4Webworking.de
// Das Ressourcenarchiv für Webworker
c-bass ist offline  
Alt 08.08.2005, 13:58  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ich verstehe zwar noch nicht alles. Sind die Eigentümer nun die Kunden, oder sind es die Mieter. Aber das tut eigentlich nichts zur Sache. Weder die Nummer des Eigentümers (da wäre es zwar noch diskutabel, da ein Objekt normalerweise einen Eigentümer hat) noch die der Miter gehötrt in die Tbelle Objekte, sondern die Objektnummer gehört als Fremdschlüssel in die Tabelle Mieter und Eigentümer.
Falls du Eigentümer und Mieter in der gleichen Tabelle hast, brauchst du zwei zusätzliche Beziehungstabellen, in der dann nur die Objektnummer und die Mieter- bzw. Eigentümernummer enthalten sind. Du könntest zwar dann in der Kundentabelle ein Attribut kundentyp einfügen, dann gibt es aber Probleme, wenn jemand Eigentümer eines Objekt und Mieter eines andern Objekt ist.
Falls du aber an dem bestehenden Design festhalten willst (und damit später garantiert Probleme kriegen), dann kannst du schon die Version von Powerpaule benutzen:
Code:
INSERT INTO Objekte (
                ObjektnummerO, 
                Strasse, 
                Postleitzahl, 
                Ort, 
                Eigentuemer,
                Mieter)
            VALUES (" .
                $_POST['ObjektnummerO'] . ", '" .
                $_POST['$Strasse'] . "', '" .
                $_POST['$Postleitzahl'] . "', '" .
                $_POST['$Ort'] . "', '" .
                $_POST['$Eigentuemer') . "'. '" 
                implode(', ', $_POST['Mieter']) . "')";
__________________
Gruss
L
lazydog ist offline  
Alt 08.08.2005, 14:09  
Benutzer
 
Registriert seit: 18.07.2005
Beiträge: 90
c-bass
Standard

Ok, ich verstehe was du meinst. ich dachte nur vom aufwand her wäre meine variante einfacher, als noch eine tabelle zu haben, da ich nur die werte lediglich imploden und exploden müsste, aber ich sehe worauf du hinaus willst. und werde deine lösung wahrscheinlich übernehmen.

pass auf:
die Kunden können ne nach Besitzlage entweder Eigentümer ODER Mieter eines Objektes sein. (Objekt ist hierbei Wohnung, Haus,...alles..halt nur eine allg. Beschreibung)

hab vielen Dank für deinen Rat, mit der Logik ist das immer so eine Sache !
__________________
// http://www.4Webworking.de
// Das Ressourcenarchiv für Webworker
c-bass ist offline  
Alt 08.08.2005, 14:51  
Benutzer
 
Registriert seit: 18.07.2005
Beiträge: 90
c-bass
Standard

noch ne frage:

wenn ich das so mache, erhalte ich die Fehlermeldung:
Column count doesn't match value count at row 1

Dabei werden alle Arraywerte übergeben!


PHP-Code:
<?php
mysql_query
("INSERT INTO Objekte (ObjektnummerO,Strasse,Postleitzahl,Ort,Eigentuemer,Mieter) VALUES ('$ObjektnummerO','$Strasse','$Postleitzahl','$Ort','$Eigentuemer', 'implode(', ', $Mieter)' )") or die(mysql_error());
?>
__________________
// http://www.4Webworking.de
// Das Ressourcenarchiv für Webworker
c-bass ist offline  
Alt 08.08.2005, 14:59  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von c-bass
die Kunden können ne nach Besitzlage entweder Eigentümer ODER Mieter eines Objektes sein. (Objekt ist hierbei Wohnung, Haus,...alles..halt nur eine allg. Beschreibung)
Das hab ich vermutet. Dann brauchst du die zweite Version mit den Bezihungstabellen. Damit ist dann auch der Fall abgedeckt, wenn jemand mehrere Objekte mietet oder besitzt.
Grafisch könnte das dann etwa so aussehen:


Du kannst den implode()-Befehl natürlich nicht einfach in den String hineinschreiben. Wenn du deine Abfrage sauber haben willst, mach es so, wie ich geschrieben habe. Dann kriegst du auch keine Probleme, wen register_globals mal auf OFF steht.
__________________
Gruss
L
lazydog ist offline  
Alt 08.08.2005, 15:19  
Benutzer
 
Registriert seit: 18.07.2005
Beiträge: 90
c-bass
Standard

ist da bei eigentümer nen fehler drin? ich mein die klammer??

PHP-Code:
<?php
INSERT INTO Objekte 

                
ObjektnummerO
                
Strasse
                
Postleitzahl
                
Ort
                
Eigentuemer
                
Mieter
            
VALUES (" . 
                $_POST['ObjektnummerO'] . "
'" . 
                $_POST['
$Strasse'] . "''" . 
                $_POST['
$Postleitzahl'] . "''" . 
                $_POST['
$Ort'] . "''" . 
                $_POST['
$Eigentuemer') . "''" 
                implode('
', $_POST['Mieter']) . "')"; 
?>
__________________
// http://www.4Webworking.de
// Das Ressourcenarchiv für Webworker
c-bass ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
xyz aus function("xyz"); in Datenbank auslesen?! Nightuser PHP Tipps 2008 5 14.07.2008 05:45
prob mit datenbank auslesen ... counteam PHP Tipps 2008 22 06.07.2008 21:28
Variablen in Datenbank speichern und auslesen freehawk PHP-Fortgeschrittene 4 16.03.2008 17:22
[Erledigt] Datenbank auslesen mit register_globals off PHP Tipps 2007 14 03.01.2007 17:12
[Erledigt] Aus Datenbank auslesen mit php PHP Tipps 2006 4 04.01.2006 18:17
beim auslesen von mysql datenbank bestimmte id nicht auslsen djrace PHP Tipps 2005-2 3 10.09.2005 13:32
[Erledigt] Daten aus einer Datenbank auslesen Datenbanken 2 04.09.2005 19:13
[Erledigt] problem beim erstellen und auslesen einer datenbank PHP Tipps 2005-2 6 04.09.2005 16:55
Daten aus einer mySQL Datenbank auslesen GSJLink PHP Tipps 2005-2 6 25.07.2005 16:38
[Erledigt] Auslesen und Aktualisieren von einer MYSQL Datenbank PHP Tipps 2005-2 3 05.07.2005 14:39
Mail Adresse aus einer Datenbank auslesen? Stemmi Datenbanken 6 23.04.2005 23:24
Auslesen aus der Datenbank nixdorf PHP Tipps 2005 7 06.02.2005 21:40
auslesen aus datenbank und sortieren! PHP Tipps 2004-2 15 04.12.2004 15:56
Auslesen von Daten aus einer mysql Datenbank + Editieren vampsoftchef PHP Tipps 2004-2 5 15.11.2004 08:31
[Erledigt] meta refresh beim auslesen aus einer Datenbank umgehen Datenbanken 1 14.09.2004 20:10

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php kundennummer ablegen, erd einfach, serif datenbank, php datenbank mieter, php arraywerte in mysql datenbank speichern, erd datenbank, \mieter = \'$mieter\' where\, arraywerte in datenbank updaten

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.