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. |
 |

17-07-2010, 22:56
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
formulardaten sql update mit for schleife
Hallo zusammen,
Problem: Ich erstelle ein Formular mit Hilfe einer For-Schleife. Anschließend wenn der Benutzer die Daten einträgt, sollen die Daten entsprechend per UPDATE in die Datenbank geschrieben werden
Formular:
PHP-Code:
<?php
error_reporting(E_ALL);
require_once ('konfiguration.php');
$db_link = mysql_connect(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");
$sqlab = "SELECT Vname, Nname FROM spielerakt";
// MySQL-Anweisung ausführen lassen
$erg = mysql_query($sqlab) or die("Anfrage fehlgeschlagen: " . mysql_error());
$num = mysql_num_rows($erg);
echo "$num Datensätze gefunden<br><br>";
mysql_query($sqlab);
for ($i = 0; $i < $num; $i++) {
$nn = mysql_result($erg, $i, "Nname");
$vn = mysql_result($erg, $i, "Vname");
//umlaute etc.
$nn = htmlentities($nn);
$vn = htmlentities($vn);
echo "<tr><td><input type=\"checkbox\" name=\"bool$i\" value=\"1\"</td>" .
"<td><input readonly name=\"vname$i\" value=\"$vn\" size=\"14\"/></td>
<td><input readonly name=\"nname$i\" value=\"$nn\" size=\"14\"/></td>
<td><select name=\"tore$i\" size=\"1\">
<option value=\"0\">0</option>
<option value=\"1\">1</option><option value=\"2\">2</option><option value=\"3\">3</option>
<option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option>
<option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option>
</select></td>
<td><select name=\"min$i\" size=\"1\">
<option value=\"0\">0</option>
<option value=\"5\">5</option><option value=\"10\">10</option><option value=\"15\">15</option>
<option value=\"20\">20</option><option value=\"25\">25</option><option value=\"30\">30</option>
<option value=\"35\">35</option><option value=\"40\">40</option><option value=\"45\">45</option>
<option value=\"50\">50</option><option value=\"55\">55</option><option value=\"60\">60</option>
<option value=\"65\">65</option><option value=\"70\">70</option><option value=\"75\">75</option>
<option value=\"80\">80</option><option value=\"85\">85</option><option value=\"90\">90</option>
</select></td>
<td><select name=\"vorlagen$i\" size=\"1\">
<option value=\"0\">0</option>
<option value=\"1\">1</option><option value=\"2\">2</option><option value=\"3\">3</option>
<option value=\"4\">4</option><option value=\"5\">5</option><option value=\"6\">6</option>
<option value=\"7\">7</option><option value=\"8\">8</option><option value=\"9\">9</option>
</select></td>
<td><select name=\"gelb$i\" size=\"1\">
<option value=\"0\">0</option>
<option value=\"1\">1</option>
</select></td>
<td><select name=\"gelbrot$i\" size=\"1\">
<option value=\"0\">0</option>
<option value=\"1\">1</option>
</select></td>
<td><select name=\"rot$i\" size=\"1\">
<option value=\"0\">0</option>
<option value=\"1\">1</option>
</select></td>";
}
mysql_close($db_link);
?>
<td><input type="submit" name="gesendet" value="abschicken" /></td></tr>
</table>
</form>
SQL UPDATE:
PHP-Code:
<?php
if (array_key_exists('gesendet', $_POST)) {
for ($k = 0; $k < $num; $k++) {
if (array_key_exists("bool$k", $_POST)) { //falls checkbox angeklickt
$min[$k] = $_POST["min$k"];
$tore[$k] = $_POST["tore$k"];
$vname[$k] = $_POST["vname$k"];
$nname[$k] = $_POST["nname$k"];
$vorlagen[$k] = $_POST["vorlagen$k"];
$gelb[$k] = $_POST["gelb$k"];
$gelbrot[$k] = $_POST["gelbrot$k"];
$rot[$k] = $_POST["rot$k"];
echo $vname[$k] . " " . $nname[$k] . " " . $tore[$k] . " " . $min[$k] . " " . $vorlagen[$k] . " " . $gelb[$k] . " " . $rot[$k] . " " . $gelbrot[$k] . "<br>";
//Trage DS ein
error_reporting(E_ALL);
require_once ('konfiguration.php');
$db_link1[$k] = mysql_connect(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");
$sqlq[$k] = "update spielerakt set Minuten=Minuten+'$min[$k]', " .
"Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," .
" Gelb=Gelb+'$gelb[$k]', Gelbrot=Gelbrot+'$gelbrot[$k]', " .
"Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";
mysql_query($sqlq[$k]);
$num = mysql_affected_rows();
mysql_close($db_link1[$k]);
if ($num > 0)
echo "Es wurde 1 Datensatz hinzugefügt.";
else {
echo "Es ist ein Fehler aufgetreten, ";
echo "es wurde kein Datensatz hinzugefügt";
}
} else { //checkbox nicht angeklickt
echo "<hr>";
}
}
}
?>
Wenn ich die Datenbankgeschichte weglasse in der unteren Schleife, dann gibt er mir alle Datensätze aus, die ich ausgewählt habe mit der checkbox.
Sonst updated er mir nur den ersten Eintrag - es scheint so als ob er aus der schleife rausspringt nach dem ersten Eintrag und nicht wieder reingeht - er macht danach nicht mal mehr eine ausgabe.
Bin ziemlicher Anfänger und hoffe, dass mir jmd auf die Sprünge helfen kann.
Vielen Dank schonmal
Gruß simay
|

17-07-2010, 23:16
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Warum zum Geier machst du denn den Verbindungsaufbau jedes mal neu in der Schleife ...?
Das ist absolut unperformanter Unfug - einmal vorher Verbindung herstellen, und anschließend Updates in Schleife ...
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

18-07-2010, 06:33
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
PHP-Code:
if (array_key_exists('gesendet', $_POST)) {
//Trage DS ein
error_reporting(E_ALL);
require_once ('konfiguration.php');
$db_link1 = mysql_connect(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");
for ($k = 0; $k < $num; $k++) {
if (array_key_exists("bool$k", $_POST)) { //falls checkbox angeklickt
$min[$k] = $_POST["min$k"];
$tore[$k] = $_POST["tore$k"];
$vname[$k] = $_POST["vname$k"];
$nname[$k] = $_POST["nname$k"];
$vorlagen[$k] = $_POST["vorlagen$k"];
$gelb[$k] = $_POST["gelb$k"];
$gelbrot[$k] = $_POST["gelbrot$k"];
$rot[$k] = $_POST["rot$k"];
echo $vname[$k] . " " . $nname[$k] . " " . $tore[$k] . " " . $min[$k] . " " . $vorlagen[$k] . " " . $gelb[$k] . " " . $rot[$k] . " " . $gelbrot[$k] ." ";
$sqlq = "update spielerakt set Minuten=Minuten+'$min[$k]', " .
"Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," .
" Gelb=Gelb+'$gelb[$k]', Gelbrot=Gelbrot+'$gelbrot[$k]', " .
"Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";
// column=".$array[0]['1'].";"
// Zum Eintragen in Top100 Chronik
// $sqlab2 = "update spielerinsg set "Spiele=Spiele+1, Tore=Tore+'$tore[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";
mysql_query($sqlq);
$cnt = mysql_affected_rows();
if ($cnt > 0)
echo "Es wurde 1 Datensatz hinzugefügt.<br>";
else {
echo "Es ist ein Fehler aufgetreten, ";
echo "es wurde kein Datensatz hinzugefügt<br>";
}
} else { //checkbox nicht angeklickt
echo "<hr>";
}
}
mysql_close($db_link1);
}
?>
Ok danke schonmal - jetzt wird nur der letzte ausgewählte Datensatz nicht in die Datenbank eingetragen. Also wenn ich 3 auswähle dann werden nur 2 eingetragen. Liegts an der Schleife? oder an $k
gruß simay
|

18-07-2010, 12:41
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
umlaute
ok Problem gelöst.
Ich kann nur noch keine Datensätze mit Umlaute eintragen. auf der db verwende ich für den Vornamen und für den Nachnamen: varchar utf_8_general ci.
Jemand schnell ne Lösung parat? wär super danke
|

18-07-2010, 12:44
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Ich habs jetzt nur überflogen, aber schöner wäre es, die Arrays direkt im HTML zu deifnieren (name="tore[0]"). Dann kannst du dir schon einige Zuweisungen ersparen.
Woher kommt $num und ist num vielleicht ne Nummer zu klein?
Hast du mal Testausgaben gemacht? Welche Daten wurden gesendet (empfangen), was hast du damit gemacht, wie oft wird die schleife durchlaufen, etc...
EDIT: Und wie?
Aktuellen Stand posten! Aktuelles Problem posten!
|

18-07-2010, 13:07
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
Aktuelles Problem/Stand
Beheben des Problems warum nur ein Datensatz eingefügt wurde:
PHP-Code:
if (array_key_exists('gesendet', $_POST)) {
//Trage DS ein error_reporting(E_ALL);
require_once ('konfiguration.php'); $db_link1 = mysql_connect(MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT); mysql_select_db(MYSQL_DATENBANK) or die("Auswahl der Datenbank fehlgeschlagen");
for ($k = 0; $k < $num; $k++) {
if (array_key_exists("bool$k", $_POST)) { //falls checkbox angeklickt
$min[$k] = $_POST["min$k"]; $tore[$k] = $_POST["tore$k"]; $vname[$k] = $_POST["vname$k"]; $nname[$k] = $_POST["nname$k"]; $vorlagen[$k] = $_POST["vorlagen$k"]; $ein[$k] = $_POST["ein$k"]; $aus[$k] = $_POST["aus$k"]; $gelb[$k] = $_POST["gelb$k"]; $gelbrot[$k] = $_POST["gelbrot$k"]; $rot[$k] = $_POST["rot$k"];
echo $vname[$k] . " " . $nname[$k] . " " . $tore[$k] . " " . $min[$k] . " " . $vorlagen[$k]. " " . $ein[$k]. " " . $aus[$k] . " " . $gelb[$k] . " " . $rot[$k] . " " . $gelbrot[$k] ." ";
$sqlq = "update spielerakt set Minuten=Minuten+'$min[$k]', " . "Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," . " Gelb=Gelb+'$gelb[$k]', Ein=Ein+'$ein[$k]',Aus=Aus+'$aus[$k]' ,Gelbrot=Gelbrot+'$gelbrot[$k]', " . "Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";
// column=".$array[0]['1'].";" // Zum Eintragen in Top100 Chronik // $sqlab2 = "update spielerinsg set "Spiele=Spiele+1, Tore=Tore+'$tore[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'";
mysql_query($sqlq);
$cnt = mysql_affected_rows(); if ($cnt > 0) echo "Es wurde 1 Datensatz hinzugefügt.<br>"; else { echo "Es ist ein Fehler aufgetreten, "; echo "es wurde kein Datensatz hinzugefügt<br>"; } } else { //checkbox nicht angeklickt echo "<hr>"; } } mysql_close($db_link1);
}
Lösung: Problem war wahrscheinlich, dass ich jeweils in der For-Schleife eine neue Verbindung zur Datenbank aufgebaut habe. Oben ist der korrekte Code dargestellt.
Aktuelles Problem mit den Umlauten:
Ich kann mehrere Datensätze hinzufügen allerdings nur diejenigen, die keine Umlaute enthalten. Es liegt sicherlich an irgend einer Kodierung. Auf der DB verwende ich wie oben erwähnt utf_8_general ci.
Im html file charset=UTF-8.
Folgende Ausgabe kommt, wenn ich Daten eintrage in mein Formularfeld:
Claudio Hi 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
Simon Hi 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
Benjamin Jä 0 0 0 0 0 0 0 0 Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt
Oliver K 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
Wolfgang S 0 0 0 0 0 0 0 0 Es wurde 1 Datensatz hinzugefügt.
Also es werden alle eingetragen nur die Datensätze mit Umlaute nicht...
Frage: Liegt es vielleicht daran, dass zwischen der DB und dem HTML-file nochmal etwas umkodiert wird?
|

18-07-2010, 13:14
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Warum benutzt du nicht mysql_error()?
|

18-07-2010, 13:26
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
keine ausgabe
PHP-Code:
echo "Error: ". mysql_error();
keine ausgabe
|

18-07-2010, 13:30
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Kann nicht sein, es müsste ja mindestens "Error: "ausgegeben werden.
Außerdem, WO hast du den Code eingefügt?
Außerdem, ein UPDATE fügt keine Datensätze hinzu.  Und wenn keine Zeile durch das Update betroffen wurde, heißt das noch lange nicht, dass etwas schief gelaufen ist.
Geändert von TobiaZ (18-07-2010 um 13:32 Uhr)
|

18-07-2010, 13:39
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
Zitat:
Zitat von TobiaZ
Kann nicht sein, es müsste ja mindestens "Error: "ausgegeben werden.
Außerdem, WO hast du den Code eingefügt?
Außerdem, ein UPDATE fügt keine Datensätze hinzu.  Und wenn keine Zeile durch das Update betroffen wurde, heißt das noch lange nicht, dass etwas schief gelaufen ist.
|
Ja "Error:" wird ausgegeben.
PHP-Code:
for ($k = 0; $k < $num; $k++) {
if (array_key_exists("bool$k", $_POST)) { //falls checkbox angeklickt
$min[$k] = $_POST["min$k"]; $tore[$k] = $_POST["tore$k"]; $vname[$k] = $_POST["vname$k"]; $nname[$k] = $_POST["nname$k"]; $vorlagen[$k] = $_POST["vorlagen$k"]; $ein[$k] = $_POST["ein$k"]; $aus[$k] = $_POST["aus$k"]; $gelb[$k] = $_POST["gelb$k"]; $gelbrot[$k] = $_POST["gelbrot$k"]; $rot[$k] = $_POST["rot$k"];
echo $vname[$k] . " " . $nname[$k] . " " . $tore[$k] . " " . $min[$k] . " " . $vorlagen[$k]. " " . $ein[$k]. " " . $aus[$k] . " " . $gelb[$k] . " " . $rot[$k] . " " . $gelbrot[$k] ." ";
$sqlq = "update spielerakt set Minuten=Minuten+'$min[$k]', " . "Spiele=Spiele+1, Tore=Tore+'$tore[$k]', Vorlagen=Vorlagen+'$vorlagen[$k]'," . " Gelb=Gelb+'$gelb[$k]', Ein=Ein+'$ein[$k]',Aus=Aus+'$aus[$k]' ,Gelbrot=Gelbrot+'$gelbrot[$k]', " . "Rot=Rot+'$rot[$k]' WHERE Vname='$vname[$k]' AND Nname='$nname[$k]'"; echo "Error: ". mysql_error();
mysql_query($sqlq); $cnt = mysql_affected_rows(); echo "Error: ". mysql_error();
if ($cnt > 0) echo "Es wurde 1 Datensatz hinzugefügt.<br>"; else { echo "Es ist ein Fehler aufgetreten, "; echo "es wurde kein Datensatz hinzugefügt<br>"; } } else { //checkbox nicht angeklickt echo "<hr>"; } }
Also eingefügt in die For-schleife.
Zitat:
Und wenn keine Zeile durch das Update betroffen wurde, heißt das noch lange nicht, dass etwas schief gelaufen ist.
|
Richtig und ich glaub eben dass wegen dem ä die Zeile nicht betroffen ist.
|

18-07-2010, 14:09
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
|
|
Zitat:
Richtig und ich glaub eben dass wegen dem ä die Zeile nicht betroffen ist.
|
Dann überprüf' das doch einfach mal. Ist besser als wenn wir rumraten. Wir kennen nämlich weder die Daten in der Datenbank, noch können wir uns die Query ausgeben lassen.
|

18-07-2010, 19:13
|
simay
Registrierter Benutzer
|
|
Registriert seit: Jul 2010
Beiträge: 8
|
|
Problem gelöst
Ok ich hab das Problem umgangen und eine viel elegantere richtige Lösung gefunden.
Anstatt im sql update statement Where Vname="vorname" und Nname ="Nachname" hab ich mir vorher die id des jeweiligen Datensatz geholt und das update statement nach der id angepasst also
Where id="idvonUser"
klappt wunderbar. Danke für die Hilfe
|
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
Aktuelle PHP Scripte
Homepagetools 2022
Kostenloses Gästebuch und Homepagetools für die eigene Homepage.
Bei GuxDu kann man sich kostenlos die Websitetools auf die vorhandene Website einbauen. Zudem kann man bei GuxDU auch eine eigene Homepage mit 3D Effekten erstellen. GuxDu ist kostenlos.
29.04.2022
freepler | Kategorie: PHP/ Gaestebuch
|
SF-Shopsystem V1.0
Hier haben wir ein einzigartiges Shopsystem in PHP.
Die Anzahl der Artikel ist unbegrenzt, einfach zu bedienen und erklärt sich.
Ausführliche Beschreibung weiter unten.
28.04.2022
Speedcrawler | Kategorie: PHP/ Shops
|
Anzeigen Markt mit PayPal Bezahl System
Anzeigen Markt Script
mit PayPal Bezahl System
Der Benutzer hat die Möglichkeit sofort nach Bezahlung mit PayPal
seine Anzeigen zu schalten, je nach seinem Guthaben.
27.04.2022
Webace_de | Kategorie: PHP/ Anzeigenmarkt
|
Alle PHP Scripte anzeigen
|