php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 29.03.2007, 19:18  
Neuer Benutzer
 
Registriert seit: 29.03.2007
Beiträge: 5
thomas2000
Standard INSERT in einer WHILE-Schleife

Hallo liebe Profis!

Ich habe folgendes Problem:

Ich habe eine WHILE-Schleife, in der für jedes gültige Ergebnis eine Tabellenzeile angezeigt wird. Das klappt soweit auch ganz gut.

Nun möchte ich in dieser WHILE-Schleife für jedes gültige Ergebnis einen Datensatz anlegen lassen.

Mein Code dazu:



PHP-Code:
<? while ($data mysql_fetch_array($result)) {?>
<tr>
<td align="left"><? echo $date?></td>
<td align="left"><? echo $akt_id=$data[akt_id]; ?> -  <? echo $data[bezeichnung]; ?></td>
<td align="center"><? echo $art_id?></td>
<td align="right"><? echo number_format($einzel=$data_2[einzel]*$data[faktor],'2',',','.'); ?></td>
<td align="right"><? echo $anzahl=$data_1[tage]; ?></td>
<td align="right"><? echo number_format($gesamt=$einzel*$anzahl,'2',',','.'); ?> </td>
<td align="right"><? echo number_format($steuergesamt=$gesamt/100*$data_2[mwstsatz],'2',',','.') ; ?></td>
<td align="right"><? echo number_format($total=$gesamt+$steuergesamt,'2',',','.') ; ?></td>
<td align="left"><? echo $text=$data_2[artbez]." ".$data_1[bezeichnung]." ".$data_1[jahr] ; ?></td>
</tr>
<?
$sql
="INSERT INTO ums (art_id, schluessel, akt_id, einzel, anzahl, gesamt, steuergesamt, total, text, rechnr) VALUES ('$art_id', '$schluessel', '$akt_id', '$einzel', '$anzahl', '$gesamt', '$steuergesamt', '$total', '$text', '$rechnr')";
$insert mysql_query($sql,$db);
?>

<? ?>
Es wird immer nur für das erste Ergebnis ein Datensatz angelegt.

Wo liegt mein Denkfehler?

Bin dankbar für Eure Hilfe!
thomas2000 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 29.03.2007, 19:27  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Bitte http://www.php.net/manual/de/languag....array.foo-bar beachten
und dann mal so versuchen
PHP-Code:
<?php
$insertCounter 
0;
while (
$data mysql_fetch_array($result)) {
?>
    ...
<?php
  $sql
="INSERT INTO ...";
  
$insert mysql_query($sql,$db) or die(mysql_error());
  
$insertCounter += mysql_affected_rows($db);
}

echo 
'<tr><td>'$insertCounter' Datensätze eingefügt</td></tr>';
?>
Schnulli ist offline  
Alt 30.03.2007, 08:19  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

Öhm soweit ich weiß geht es "schneller" die Inputs zu sammeln und dann mit einem Schwung rein zuschieben !!!

Also vllt. nicht mal überlegen ob du das query nicht lieber außerhalb der Schliefe machst .
M3g4Star ist offline  
Alt 30.03.2007, 10:39  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo thomas2000, willkommen bei uns im Forum!

Wenn du dir nicht sicher bist, ob die MySQL Queries ausgeführt werden musst du dir schon die entsprechenden MySQL Queries ausgeben lassen.

Dies
PHP-Code:
<?php
while (..) {
  
// ..
  
var_dump($sql$insertmysql_affected_rows());
}
?>
sollte das Geheimnis lüften.
Zergling-new ist offline  
Alt 30.03.2007, 12:26  
Neuer Benutzer
 
Registriert seit: 29.03.2007
Beiträge: 5
thomas2000
Standard Rat beherzigt

Danke Zergling (auch für's Verschieben)

Mein Code sieht nun so aus:

PHP-Code:
<? while ($data mysql_fetch_array($result)) {?>
<tr>
<td align="left"><? echo $date?></td>
<td align="left"><? echo $akt_id=$data[akt_id]; ?> -  <? echo $data[bezeichnung]; ?></td>
<td align="center"><? echo $art_id?></td>
<td align="right"><? echo number_format($einzel=$data_2[einzel]*$data[faktor],'2',',','.'); ?></td>
<td align="right"><? echo $anzahl=$data_1[tage]; ?></td>
<td align="right"><? echo number_format($gesamt=$einzel*$anzahl,'2',',','.'); ?> </td>
<td align="right"><? echo number_format($steuergesamt=$gesamt/100*$data_2[mwstsatz],'2',',','.') ; ?></td>
<td align="right"><? echo number_format($total=$gesamt+$steuergesamt,'2',',','.') ; ?></td>
<td align="left"><? echo $text=$data_2[artbez]." ".$data_1[bezeichnung]." ".$data_1[jahr] ; ?></td>
</tr>

<?
if ($data_1[status]==1) {
$sql="INSERT INTO ums (art_id, schluessel, akt_id, einzel, anzahl, gesamt, steuergesamt, total, text, rechnr) VALUES ('$art_id', '$schluessel', '$akt_id', '$einzel', '$anzahl', '$gesamt', '$steuergesamt', '$total', '$text', '$rechnr')";
$insert mysql_query($sql,$db);
var_dump($sql$insertmysql_affected_rows());

}
 } 
?>
Für das erste gültige Ergebnis wird ein Datensatz angelegt. Für alle anderen Ergebnisse wird folgende Zeile ausgegeben:


string(220) "INSERT INTO ums (art_id, schluessel, akt_id, einzel, anzahl, gesamt, steuergesamt, total, text, rechnr) VALUES ('126', '4001', '31', '210', '4', '840', '159.6', '999.6', 'Standmiete Das Mittelalter in Schloß Britz ', '')" bool(false) int(-1)

Was ist falsch?
thomas2000 ist offline  
Alt 30.03.2007, 12:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

mysql_query() liefert FALSE, somit ist der Query ungültig
bau deinen Code mal zu folgendem Konstrukt um:
PHP-Code:
<?php
while (..) {
  
// ..
  
mysql_query($sql$db) or die(sprintf('%u: %s'mysql_errno(), mysql_error()));
  
// ..
}
?>
Zergling-new ist offline  
Alt 30.03.2007, 13:56  
Neuer Benutzer
 
Registriert seit: 29.03.2007
Beiträge: 5
thomas2000
Standard

Hallo! - Problem (fast vollständig) gelöst!!

Ich habe den ausgegebenen Fehler in Google eingegeben und die Antwort erhalten, dass der Fehler von "auto_increment" im Feld "id" meiner Tadbelle "ums" verursacht wird.

Habe die Tabelle entsprechend geändert und nun geht's! - Danke nochmal für die tollen Tipps!

Nun habe ich nur noch das Problem, dass das erste Element im Array $data ignoriert wird.

PHP-Code:
$sql "SELECT akt.id AS akt_id, akt.bezeichnung AS bezeichnung, akt.faktor AS faktor FROM akt, teil WHERE teil.veranst_id=$end AND akt.id=teil.akt_id AND akt.schluessel>1999";
$result mysql_query($sql,$db);
$data mysql_fetch_array($result); 
Genau dieses Element wird aber ausgegeben, wenn ich

PHP-Code:
print_r($data); 
verwende.

Das ist bestimmt nur ein kleiner Denkfehler, aber wo?
thomas2000 ist offline  
Alt 30.03.2007, 14:42  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Lass mich raten:
Du hast tatsächlich
Zitat:
$data = mysql_fetch_array($result);
und danach
Zitat:
while ($data = mysql_fetch_array($result)) {
und wunderst Dich jetzt, warum der erste Datensatz nicht innerhalb der while Schleife bearbeitet wird.
Schnulli ist offline  
Alt 30.03.2007, 14:47  
Neuer Benutzer
 
Registriert seit: 29.03.2007
Beiträge: 5
thomas2000
Standard

Da war er wieder, der Wald, den man vor lauter Bäumen nicht mehr sieht

Ich hoffe sehr, hier wird aufgrund meines dummen Fehlers nicht eine Rubrik "PHP-Trottel" eingeführt

Danke für den Tritt!!!
thomas2000 ist offline  
Alt 30.03.2007, 14:57  
Erfahrener Benutzer
 
Registriert seit: 03.03.2007
Beiträge: 112
Schnulli
Standard

Ich beschäftige mich jetzt seit ca einem Monat mit php. Aber seltsamerweise ist mir genau dieser Fehler jetzt schon einige Male in Foren begegnet. Vorher noch nie.
Also a) tröste Dich, Du bist nicht allein und wenn Du es jetzt erfasst hast, ist das super. b) Löst irgendetwas in php das aus oder ist das ein bekanntes aber fehlerhaftes Tutorial oder Buch?
Schnulli 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
Pathfinding Algorithmus optimieren? (Algorith. von Dijkstra) Martin13 PHP Tipps 2007 19 04.09.2007 19:20
While schleife -> letzter durchgang Skazi PHP Tipps 2006 7 16.09.2006 00:11
Differenz zwischen 2 Zahlen duderino PHP Tipps 2006 19 10.08.2006 22:12
mysql_query verschmelzen zweier abfragen (while schleife) Buschdieb PHP Tipps 2006 10 15.07.2006 17:11
PRoblem mit Cookie bei PHPbb-Board PHP Tipps 2007 8 12.12.2005 20:56
[Erledigt] While schleife in while schleife = nur ein datensatz?! PHP Tipps 2005-2 9 28.10.2005 12:48
while schleife in einer while schleife beim tmpl-sys PHP Tipps 2005-2 0 27.07.2005 15:07
[Erledigt] fehler den ich noch nie gesehen habe Datenbanken 7 09.06.2005 14:29
While Schleife Beatbox Off-Topic Diskussionen 8 19.05.2005 21:55
while schleife beenden PHP Tipps 2005 3 29.03.2005 20:35
IF ELSEIF ELSEIF ELSE mit While Schleife PHP Tipps 2005 9 04.03.2005 23:27
Variabel aus while schleife ausserhalb der schleife nutzen PHP Tipps 2005 8 12.02.2005 18:04
resultausgabe mit while schleife in pdf dokument PHP Tipps 2004 2 23.09.2004 14:56
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45
Prob mit While schleife JEGO PHP Tipps 2004 2 04.06.2004 12:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
while schleife sql insert, while insert into, php sql insert while schleife, sql while insert

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:44 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.