2 Arrays in DB eintragen

Alles, was PHP betrifft, kann hier besprochen werden.

2 Arrays in DB eintragen

Postby Enzian » 13. August 2005 12:47

Habe aus einem Form 2 arrays und wollte diese in die DB eintragen. mit foreach kann ich die einten bestens eintragen, aber die zweiten Angaben kommen einfach nicht!

Mit:

print_r ( $_REQUEST['stunden'] );
echo"<br>";
$arr= $_REQUEST['rapdatum'];
print_r($arr);

kommt:

Array ( [0] => 5 [1] => 6 [2] => 7 [3] => 8 [4] => 9 )
Array ( [0] => 1123452000 [1] => 1123538400 [2] => 1123624800 [3] => 1123711200 [4] => 1123797600 )

Die Daten sind also vorhanden!

So möchte ich sie eintragen
Code: Select all
foreach($_REQUEST['rapdatum'] as $rapdatum)
{
$stunden= $_REQUEST['stunden']; 
$query="insert into posch_aufwand
(rapdatum,stunden,id_ma,id_kunde)
values 
('$rapdatum','$stunden','$id_ma','$id_kunde')";
$result=mysql_query($query);
}


rapdatum habe ich, geht bestens, doch mir fehlen die Angaben aus dem Array stunden. Wie nehme ich diese auch aus dem $_REQUEST['stunden'] ohne dadurch rapdatum zu gefährden?

Ich bekome einfach immer nur ein Array raus, brauche aber beide, (PS schlussendlöich soger vier, aber wenn zwei gehen gehen auch vier!)

Noch eine Erklärung woher die Daten kommen. Ich möchte dem User es einfach machen und so kann er gleich mehrere Einträge gleichzeitig machen. Er kann sich einen Zeitraum auswählen und dann zu diesen Daten weitere infos dazu erfassen. Dies nur so zur Info.

Mein eFarge ist: Wie kann ich mehrere $_REQUEST[] gleichzeitig in eine DB schreiben.

Danke
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Insert

Postby Rolf Bergius » 13. August 2005 14:45

Frage:
Was bekommst du als Ausgabe, wenn du folgenden Code verwendeset?

Code: Select all
foreach($_REQUEST['rapdatum'] as $rapdatum)
{
$stunden= $_REQUEST['stunden'];
$query="insert into posch_aufwand
(rapdatum,stunden,id_ma,id_kunde)
values
('$rapdatum','$stunden','$id_ma','$id_kunde')";

echo $stunden;
echo $rapdatum;
echo $query;

$result=mysql_query($query) or die("SQL-Fehler: ".mysql_error ());
}


tschau sir rolus
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby Enzian » 13. August 2005 21:54

Array1123452000insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123452000','Array','25','11')Array1123538400insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123538400','Array','25','11')Array1123624800insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123624800','Array','25','11')


Das zweite Argument, die Stunden kommen nicht! hier steht nur Array und die sollten doch aufgelöst werden!

Sie wären vorhandne aber gehen nicht rein.
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Postby Eisbaer » 14. August 2005 00:21

ich würds primitiv machen: (bzw. mir fällt imo nichts besseres ein...)

Code: Select all
$a = array_combine($_REQUEST['stunden'] , $_REQUEST['rapdatum']);

foreach($a as $stunden => $rapdatum) {
   $query="insert into posch_aufwand
   (rapdatum,stunden,id_ma,id_kunde)
   values
   ('$rapdatum','$stunden','$id_ma','$id_kunde')";
   mysql_query($query);
}
Eisbaer
 
Posts: 19
Joined: 08. August 2005 00:09

Doppeltes Array

Postby Rolf Bergius » 14. August 2005 08:46

Array1123452000insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123452000','Array','25','11')


Du hast folgendes Problem:

Du hast zwei einfache Arrays, nämlich das Datum und die Stunden. Mit $_Request holst du dir die beiden Arrays von einer anderen Seite. Jetzt loopst du mit for_each durch jedes einzelne Element von Datum und versuchst, jedem einzelnen Element von Datum das gesamte Array von Stunden zuzuordnen. Das heißt, du musst auch noch durch das Array von Stunden loopen.
Ich gehe mal davon aus, das jedem Datum nur eine Element aus Stunden zugeordnet werden soll.

Am einfachsten zu machen, wenn du im externen Formular gleich ein zweidimensionales Array füllst:

$Aufwand[][]=array($rapdatum[0],$stunden[0]);
$Aufwand[][]=array($rapdatum[1],$stunden[1]);

Ansonsten versuche folgenden Code:

Code: Select all

$ende =count($_REQUEST['rapdatum']);
 
for ($i=0; $i<$ende; $i++)
{
$query="insert into posch_aufwand
(rapdatum,stunden,id_ma,id_kunde)
values
('$rapdatum[i]','$stunden[i]','$id_ma[i]','$id_kunde[i]')";
$result=mysql_query($query) or die("SQL-Fehler: ".mysql_error ());
}
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby Enzian » 14. August 2005 10:07

Es geht leider alles nicht!

Mein Provider hat im Moment PHP: 4.3.10 installiert. und so geht array_combine nicht.

Bei der Variante von Rolf geht gar nichts, es hat keinen Inhalt in den Feldern.


Ich versuchte es zusammenzufassen bereits beim Input, aber der Output geht auch irgendwie nicht!

<input name="arbeitszeit[][stunden]" >
<input name='arbeitszeit[][datum]'>

Dann wollte ich den Inhalt ansehen:
print_r ( $_REQUEST['arbeitszeit'] );

Array ( [0] => Array ( [datum] => 1123452000 ) [1] => Array ( [stunden] => 11 ) [2] => Array ( [datum] => 1123538400 ) [3] => Array ( [stunden] => 10 ) [4] => Array ( [datum] => 1123624800 ) [5] => Array ( [stunden] => 12 ) )

resp.:

Array
(
[0] => Array ( [datum] => 1123452000 )
[1] => Array ( [stunden] => 11 )
[2] => Array ( [datum] => 1123538400 )
[3] => Array ( [stunden] => 10 )
[4] => Array ( [datum] => 1123624800 )
[5] => Array ( [stunden] => 12 )
)
Wie kann ich nun das splitten, damit es entsprechend in die DB eingetragen werden kann? Der Inhalt wäre da, aber wie weiter?
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Postby Eisbaer » 14. August 2005 11:01

Code: Select all
$ende =count($_REQUEST['rapdatum']);
 
for ($i=0; $i<$ende; $i++)
 {
    $query="insert into posch_aufwand
    (rapdatum,stunden,id_ma,id_kunde)
    values
    ('$rapdatum[$i]','$stunden[$i]','$id_ma[$i]','$id_kunde[$i]')";
    $result=mysql_query($query) or die("SQL-Fehler: ".mysql_error ());
 }



is allerdings für die version, wo du die arrays noch nicht zusammengelegt hast ;)
Eisbaer
 
Posts: 19
Joined: 08. August 2005 00:09

Index

Postby Rolf Bergius » 14. August 2005 11:40

Eisbaer hat recht, es muss im Index natürlich $i heißen. An die Dollar-Schreibweise muss ich mich noch gewöhnen. Für dein doppeltes Array sieht dein Code so aus:

Code: Select all
foreach($_REQUEST['arbeitszeit'] as $ausgabe)
{
list($rapdatum, $stunden)=$ausgabe;
 
$query="insert into posch_aufwand
(rapdatum,stunden,id_ma,id_kunde)
values
('$rapdatum','$stunden','$id_ma','$id_kunde')";
$result=mysql_query($query);
}


schreib mir mal, ob das funktioniert.

tschau sir rolus
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby Enzian » 14. August 2005 14:44

Spannend!! Aber nicht erfolgreich!

Code: Select all
foreach($_REQUEST['arbeitszeit'] as $ausgabe)
{
list($rapdatum, $stunden)=$ausgabe;
 
$query="insert into posch_aufwand
(rapdatum,stunden,id_ma,id_kunde)
values
('$rapdatum','$stunden','$id_ma','$id_kunde')";
$result=mysql_query($query);

echo"_REQUEST";
print_r ($_REQUEST['arbeitszeit']);
echo"<br>query:$query<br>";
echo"rapdatum:$rapdatum<br>";
echo"stunden:$stunden<br>";
}



_REQUESTArray ( [rapdatum] => 1123711200 [stunden] => 77 )
query:insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1','1','25','4')
rapdatum:1
stunden:1
_REQUESTArray ( [rapdatum] => 1123711200 [stunden] => 77 )
query:insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('7','7','25','4')
rapdatum:7
stunden:7

Es hätten 4 Einträge sein sollen, aber nur der letzte Datensatz war dabei, Zudem hat sich die Zahl welche eigentlich Stunden wären aufgeteilt in 7 und 7 statt 77
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Lass dich nicht ärgern

Postby Rolf Bergius » 14. August 2005 15:10

Ich sehe schon. Die Funktion darf nicht list(), sondern muss tücke() heißen. :lol:

Was gibt dir der folgende Code als Ausgabe?

Code: Select all
print_r ($_REQUEST['arbeitszeit[][stunden]']);
 
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby Enzian » 14. August 2005 15:57

tücke() gibt es wohl nicht! Welchen befehl wolltest du mir da ans Herz legen?

print_r ($_REQUEST['arbeitszeit[][stunden]']);

gibt nichts aus!
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Wehe, wehe, wenn ich auf das Ende sehe.

Postby Rolf Bergius » 14. August 2005 16:56

Max und Moritz sägten voller list() und voller tücke() in die Brücke eine Lücke.

Was ich damit sagen wollte, war das list() (gemeint Liste) auch als List (gemeint Hinterhalt) gelesen werden kann und damit nicht das tut, was man erwartet hätte.

Wie klappt denn der Code von Eisbaer? Ansonsten würde mir noch einfallen, es mal mit
print_r ($_REQUEST['arbeitszeit[0][0]']);
print_r ($_REQUEST['arbeitszeit[0][1]']);


zu versuchen.

tschau sir rolus
User avatar
Rolf Bergius
 
Posts: 35
Joined: 06. August 2005 12:00
Location: 29614 Soltau

Postby Eisbaer » 14. August 2005 19:10

Wenn selbst print_r ($_REQUEST['arbeitszeit[][stunden]']); nichts hergibt, war schon wieder die Schnelligkeit der Wicht.
Trotzdem nicht verzagen,
es einfach mit meinem Code wagen ;)

Eigentlich sollte er funktionieren,
aber nicht den Glaube verlieren,
dir nicht gleich die Kugel geben,
sondern den Code da unten nehmen,
aber ohwe,
benutz das richtige array.

Code: Select all
$ende=count($_REQUEST['rapdatum']);
$rapdatum=$_REQUEST['rapdatum']);
$stunden=$_REQUEST['stunden']);

for ($i=0; $i<$ende; $i++)
 {
    $query="insert into posch_aufwand
    (rapdatum,stunden,id_ma,id_kunde)
    values
    ('".$rapdatum[$i]."','".$stunden[$i]."','".$id_ma[$i]."','".$id_kunde[$i]."')";
    echo $query."<br>";
    //$result=mysql_query($query) or die("SQL-Fehler: ".mysql_error ());
 }


Bevor ich jetzt noch wink,
wärs interessant, was mein Code auf den Bildschirm bringt :)
Eisbaer
 
Posts: 19
Joined: 08. August 2005 00:09

Postby Enzian » 14. August 2005 21:19

Eisbär, dein Tipp half auch nicht weiter! anbei der Output

insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123452000','12','2','1')
insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123538400','34','5','2')
insert into posch_aufwand (rapdatum,stunden,id_ma,id_kunde) values ('1123711200','','','')


12 und 34 Stunden stimmen! somit wären wir dem Problem ein Schritt näher. doch was soll die 7 und die 5?

Das de Quelltext des Form war:

Code: Select all
   <form name="form1" method="post" action="">
        <input name="id_ma" type="hidden" value="25">
        <table  border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td colspan="2"><h2>Rapport mehrerer Daten ein Kunde</h2></td>
          </tr>
          <tr>
            <td colspan="2" valign="top" nowrap> </td>
          </tr>
          <tr >
            <td colspan="2" valign="top" nowrap>von
              <input name='d1' type='text'  size='2'  >
              /
              <input name='m1' type='text'  size='2'  >
              /
              <input name='y1' type='text'  size='4' >
              bis
                            <input name="d2" type="text" value=" 14" size="2"  >
              /
              <input name="m2" type="text" value=" 08" size="2"  >
              /
              <input name="y2" type="text" value=" 2005 " size="4" >
              <input type='submit' name='Submit' value='Daten ausgeben'></td>
          </tr>
          <tr >
            <td colspan="2" valign="top" nowrap>
              <hr size='1' noshade>
<table border="0" cellspacing="0" cellpadding="0">
                      <tr>
                        <td><input name="kostenst" type="radio" value="eigene"
         checked>
                          Kostenstelle
                          <select name='id_kunde' ><option value=''>--</option><option value='13'></option><option value='10'>Action & Fashion</option><option value='6'>BGF AS 80</option><option value='12'>Bosshard</option><option value='7'>Bosshard</option><option value='8'>Bosshard Coop</option><option value='1'>Boutique Longchamp</option><option value='11'>Bühlmann Heizungen</option><option value='14'>MFH Büehler</option><option value='5'>Neubau Alte Landstr. 61</option><option value='2'>Neubau Unterrenggstr</option><option value='4'>Swiss Re</option><option value='9'>Swiss Re AV-Tech</option><option value='3'>Swiss Re Unterhalt</option></select>                        </td>
                      </tr>
                      <tr>
                        <td nowrap bgcolor="#CCCCCC"> <input type="radio" name="kostenst" value="servicewo"
               >
                          ServiceWo
                          <input type="radio" name="kostenst" value="servicealt"  >
                          ServiceAlt&nbsp;&nbsp;/&nbsp;&nbsp;Kunde:
                          <input name="kundeservice" type="text"  id="kundeservice" value=""></td>
                      </tr>
                      <tr>
                        <td><input type="radio" name="kostenst" value="magwo"  >
                          MagWo
                          <input type="radio" name="kostenst" value="magzh"  >
                          MagZH</td>
                      </tr>
                    </table>
               <table><tr><td colspan='2'><hr size='1' noshade></td></tr><tr bgcolor='#B8DCDC'><td width='120' valign='top'><input name='rapdatum[]' type='checkbox'  value='1123452000' checked>&nbsp;Mo 08.08.2005</td><td>              <!-- Start Kundendaten -->
              <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td width="171">Arbeit <input type="hidden" name="aufwandart" value="Arbeit" ></td>
                  <td colspan="2"><input name="stunden[]" type="text" id="stunden" size="4" >
                    Stunden (Totalstunden pro Kunde und Tag)</td>
                </tr>
                <tr>
                  <td>Davon &Uuml;berzeit</td>
                  <td colspan="2"><input name="ueberzeit25[]" type="text" size="4" value="">
                    25%
                    <input name="ueberzeit50[]" type="text" size="4" value="">
                    50%
                    <input name="ueberzeit100[]" type="text" size="4" value="">
                    100%</td>
                </tr>
                <tr>
                  <td>Ausw&auml;rts essen</td>
                  <td colspan="2"><input name="auswaert[]" type="checkbox" id="auswaert" value="ja" ></td>
                </tr>
              </table>
              <!-- Ende Kundendaten -->
              </td><tr>
              <tr><td colspan='2'><hr size='1' noshade></td></tr><tr bgcolor='#B8DCDC'><td width='120' valign='top'><input name='rapdatum[]' type='checkbox'  value='1123538400' checked>&nbsp;Di 09.08.2005</td><td>              <!-- Start Kundendaten -->
              <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td width="171">Arbeit <input type="hidden" name="aufwandart" value="Arbeit" ></td>
                  <td colspan="2"><input name="stunden[]" type="text" id="stunden" size="4" >
                    Stunden (Totalstunden pro Kunde und Tag)</td>
                </tr>
                <tr>
                  <td>Davon &Uuml;berzeit</td>
                  <td colspan="2"><input name="ueberzeit25[]" type="text" size="4" value="">
                    25%
                    <input name="ueberzeit50[]" type="text" size="4" value="">
                    50%
                    <input name="ueberzeit100[]" type="text" size="4" value="">
                    100%</td>
                </tr>
                <tr>
                  <td>Ausw&auml;rts essen</td>
                  <td colspan="2"><input name="auswaert[]" type="checkbox" id="auswaert" value="ja" ></td>
                </tr>
              </table>
              <!-- Ende Kundendaten -->
              </td><tr>
              <tr><td colspan='2'><hr size='1' noshade></td></tr><tr bgcolor='#B8DCDC'><td width='120' valign='top'><input name='rapdatum[]' type='checkbox'  value='1123624800' checked>&nbsp;Mi 10.08.2005</td><td>              <!-- Start Kundendaten -->
              <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td width="171">Arbeit <input type="hidden" name="aufwandart" value="Arbeit" ></td>
                  <td colspan="2"><input name="stunden[]" type="text" id="stunden" size="4" >
                    Stunden (Totalstunden pro Kunde und Tag)</td>
                </tr>
                <tr>
                  <td>Davon &Uuml;berzeit</td>
                  <td colspan="2"><input name="ueberzeit25[]" type="text" size="4" value="">
                    25%
                    <input name="ueberzeit50[]" type="text" size="4" value="">
                    50%
                    <input name="ueberzeit100[]" type="text" size="4" value="">
                    100%</td>
                </tr>
                <tr>
                  <td>Ausw&auml;rts essen</td>
                  <td colspan="2"><input name="auswaert[]" type="checkbox" id="auswaert" value="ja" ></td>
                </tr>
              </table>
              <!-- Ende Kundendaten -->
              </td><tr>
              <tr><td colspan='2'><hr size='1' noshade></td></tr><tr bgcolor='#B8DCDC'><td width='120' valign='top'><input name='rapdatum[]' type='checkbox'  value='1123711200' checked>&nbsp;Do 11.08.2005</td><td>              <!-- Start Kundendaten -->
              <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td width="171">Arbeit <input type="hidden" name="aufwandart" value="Arbeit" ></td>
                  <td colspan="2"><input name="stunden[]" type="text" id="stunden" size="4" >
                    Stunden (Totalstunden pro Kunde und Tag)</td>
                </tr>
                <tr>
                  <td>Davon &Uuml;berzeit</td>
                  <td colspan="2"><input name="ueberzeit25[]" type="text" size="4" value="">
                    25%
                    <input name="ueberzeit50[]" type="text" size="4" value="">
                    50%
                    <input name="ueberzeit100[]" type="text" size="4" value="">
                    100%</td>
                </tr>
                <tr>
                  <td>Ausw&auml;rts essen</td>
                  <td colspan="2"><input name="auswaert[]" type="checkbox" id="auswaert" value="ja" ></td>
                </tr>
              </table>
              <!-- Ende Kundendaten -->
              </td><tr>
              <tr><td colspan='2'><hr size='1' noshade></td></tr><tr bgcolor='#B8DCDC'><td width='120' valign='top'><input name='rapdatum[]' type='checkbox'  value='1123797600' checked>&nbsp;Fr 12.08.2005</td><td>              <!-- Start Kundendaten -->
              <table width="600" border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td width="171">Arbeit <input type="hidden" name="aufwandart" value="Arbeit" ></td>
                  <td colspan="2"><input name="stunden[]" type="text" id="stunden" size="4" >
                    Stunden (Totalstunden pro Kunde und Tag)</td>
                </tr>
                <tr>
                  <td>Davon &Uuml;berzeit</td>
                  <td colspan="2"><input name="ueberzeit25[]" type="text" size="4" value="">
                    25%
                    <input name="ueberzeit50[]" type="text" size="4" value="">
                    50%
                    <input name="ueberzeit100[]" type="text" size="4" value="">
                    100%</td>
                </tr>
                <tr>
                  <td>Ausw&auml;rts essen</td>
                  <td colspan="2"><input name="auswaert[]" type="checkbox" id="auswaert" value="ja" ></td>
                </tr>
              </table>
              <!-- Ende Kundendaten -->
              </td><tr>
                            </table>

</td>
          </tr>
          <tr>
            <td><input type='submit' name='Submiterfassen' value='eintragen'>
            </td>
            <td align="right"><input type='reset' name='Submit2' value='l&ouml;schen'></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td align="right">&nbsp;</td>
          </tr>
        </table>
      </form>



PS die Felder ueberzeit und auswaerts kommen dann auch noch, doch wenn stunden klappt geht der Rest quasi automatisch!




Und da habe ich nur drei Tage ausgefüllt, den ersten, zweiten und vierten. Ich frage mich was die Angaben im dritten Satz sollen. dort habe ich 56 Stunden erfasst, und die sind nirgend!
Enzian
 
Posts: 26
Joined: 10. March 2004 23:45

Postby Eisbaer » 14. August 2005 22:26

hat er dir keinen fehler ausgegeben?

hatte ein paar ) zu viel:

Code: Select all
$ende=count($_REQUEST['rapdatum']);
$rapdatum=$_REQUEST['rapdatum'];
$stunden=$_REQUEST['stunden'];

for ($i=0; $i<$ende; $i++)
 {
    $query="insert into posch_aufwand
    (rapdatum,stunden,id_ma,id_kunde)
    values
    ('".$rapdatum[$i]."','".$stunden[$i]."','".$id_ma[$i]."','".$id_kunde[$i]."')";
    echo $query."<br>";
    //$result=mysql_query($query) or die("SQL-Fehler: ".mysql_error ());
 }


ich habs einfach mit folgenden arrays ausprobiert, und es hat eigentlich funktioniert ;)

$_REQUEST['stunden'] = array(5,6,7,8,9);
$_REQUEST['rapdatum'] = array(1123452000,1123538400,1123624800,1123711200,1123797600);
Eisbaer
 
Posts: 19
Joined: 08. August 2005 00:09

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests