2Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
588
588
EMPFEHLEN
-
Hallo da draußen,
habe folgendes Problem:
Ich habe für ein Projekt eine Art "Massen-Benutzer-Einspeißung" programmiert. Sinn und Zweck ist, ganze Benutzerlisten auf einmal einzuspielen. Neue Zeile = neuer Benutzer.
Die Einspeißung funktioniert wie gewollt, keinerlei Probleme. Jeder Benutzer bekommt einen exakt identischen Datensatz (bis auf die ausgefüllten Daten logischerweise). Also rein Technisch unterscheiden sich die User nur in ihren angegebenen Daten.
Mein Problem:
Es gibt auch eine Benutzerverwaltung mit allen Benutzern in einer Liste. Der Name des jeweiligen Benutzers ist mit Javascript ausgestattet. Bei Klick werden die Daten des Benutzers in oben stehende Felder geschrieben. Sollten sie jedenfalls!
Händisch erstellte Benutzer funktionieren super. Die Daten werden direkt oben eingefügt.
Bei einer Stapelverarbeiteten Benutzerliste funktioniert jeweils nur der zuletzt in die Datenbank eingeschriebene Benutzer. (Der letzte Benutzer von allen Benutzern, die im Zuge EINER Stapelverarbeitung eingelesen wurden! Wenn ich zwei Benutzer einspiele, funktioniert nur der Letzte. Wenn ich nochmal zwei ein Spiele funktioniert (chronologisch) der 2. und der 4., also jeweils der Letzte)
Habe die Stapelverarbeitung auf zwei Arten probiert:
- Jeden Benutzer einzeln in die Datenbank schreiben.
- Eine Abfrage, womit alle Benutzer auf einmal in die DB geschrieben werden.
Hat jemand eine Idee, woran es liegen könnte, dass nur die letzten Benutzer funktionieren?
Gruß, Lime
-
10.11.11 15:40 #2
Dazu müsste man schon mehr wissen, wie zb. die Datenbank aussieht, dein Code (SELECT/INSERT) usw...
Die Schweine von heute sind unsere Schnitzel von morgen!
-
Vielleicht ist es auch nicht der Letzte, sondern immer nur der genau Zweite aus der Liste!? Was passiert denn wenn du erst 3 und dann 5 einspielst? Funktionieren dann User3 und User8 oder User2 und User4? Oder vielleicht sogar User2, User4, User6 und User8, als immer jeder Zweite.
Wie auch immer hört es sich so an, als wenn für die Anzeige nur die Daten in der DB relevant sind (egal wie sie reingekommen sind). Es muss also in der DB Unterschiede zwischen den Usern geben.
Mich würden die Daten aus der DB interessieren, mit dem Hinweis welcher der User geht und welcher nicht!
Dazu dann natürlich den PHP-Code vom Anzeigen.
Und: was genau funktioniert nicht?Hilfreiche Beiträge dürfen gerne über den Stern oder den "Danke" Button unter jedem Post positiv bewertet werden ;) Danke...
-
Huhu,
also nein es funktioniert tatsächlich nur der Letzte. Das mit den zwei Benutzern war nur vereinfacht dargestellt - spiele normal eher 100e Benutzer gleichzeitig ein...
Hier der relevante Quellcode für die Massen-Einspeißung:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
if(isset($_POST['newuserssubmit']) && !empty($_POST['newuserssubmit'])) { $zeilen = explode("\n", $_POST['users']); $sqlCmd = "INSERT INTO intern_user (name,geschlecht,email,gruppe,status,tel,handy,ort) VALUES "; for($i=0;$i<sizeof($zeilen);$i++) { $user = explode(';', $zeilen[$i]); if($i == sizeof($zeilen)-1) { $sqlCmd .= "('".$user[0]."','".$user[1]."','".$user[5]."','".$user[2]."','1','".$user[3]."','".$user[4]."','".$user[6]."')"; } else { $sqlCmd .= "('".$user[0]."','".$user[1]."','".$user[5]."','".$user[2]."','1','".$user[3]."','".$user[4]."','".$user[6]."'), "; } } $sqlQry = mysql_query($sqlCmd,$sql); if($sqlQry) { echo("<p>Erfolgreich!</p>"); } else { echo("<p>Fehlgeschlagen.</p>"); } }
Dann hier erstmal ein Bild der Felder, wo die Daten eingeschrieben werden sollen:
http://laendlelounge.com/files_lime/usercp1.PNG
Hier ein Auszug aus der Tabelle (die steht darunter), bei Klick auf den Namen sollten die Daten (auch unsichtbare Daten) in die Felder geschrieben werden...
http://laendlelounge.com/files_lime/usercp2.PNG
Anmerkung: Ich hab persönliche und geheime Informationen im System, daher zeige ich nur einen Ausschnitt. Anmerkung: Testuser2 funktioniert bei Klick auf Name, Testuser1 nicht.
Hier noch ein Datenbankscreenshot der beiden User:
http://laendlelounge.com/files_lime/db1.PNG
Und wem das noch immer nicht reicht - wobei ich glaube dass der Fehler irgendwie durch das Einspeisen passiert - hier noch der Quellcode für die Tabelle in der Benutzerverwaltung...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
$sqlCmd = "SELECT * FROM intern_user ORDER BY name ASC"; $sqlQry = mysql_query($sqlCmd,$sql); while($row = mysql_fetch_object($sqlQry)) { echo("<tr>"); echo("<script type=\"text/javascript\">"); echo("$(document).ready(function() {"); echo("$('#user".$row->id."').click(function() {"); echo("$('#name').val('".$row->name."');"); if($row->geschlecht == "m") { echo("$('#m').prop('checked', true);"); } elseif($row->geschlecht == "w") { echo("$('#w').prop('checked', true);"); } echo("$('#tel').val('".$row->tel."');"); echo("$('#handy').val('".$row->handy."');"); echo("$('#email').val('".$row->email."');"); echo("$('#ort').val('".$row->ort."');"); echo("$('#group').val('".$row->gruppe."');"); echo("$('#status').val('".$row->status."');"); echo("$('#userid').val('".$row->id."');"); echo("$('#mutter').val('".$row->mutter."');"); echo("$('#vater').val('".$row->vater."');"); echo("if ($('#group').val() == '3')"); echo("{"); echo("$('#eltern').show('fast');"); echo("}"); echo("if ($('#group').val() == '2')"); echo("{"); echo("$('#eltern').hide('fast');"); echo("}"); echo("if ($('#group').val() == '1')"); echo("{"); echo("$('#eltern').hide('fast');"); echo("}"); echo("if ($('#group').val() == '4')"); echo("{"); echo("$('#eltern').hide('fast');"); echo("}"); echo("return false;"); echo("});"); echo("});"); echo("</script>"); echo("<td><a href=\"#\" id=\"user".$row->id."\">".$row->name."</a></td>"); $gruppe = $row->gruppe; if($gruppe == 1) { $gruppeout = "Admin"; } elseif($gruppe == 2) { $gruppeout = "Eltern"; } elseif($gruppe == 3) { $gruppeout = "Schüler"; } elseif($gruppe == 4) { $gruppeout = "Lehrer"; } echo("<td>".$gruppeout."</td>"); echo("<td>".$row->tel."</td>"); echo("<td>".$row->handy."</td>"); echo("<td>".$row->email."</td>"); echo("<td>".$row->ort."</td>"); echo("</tr>"); }
Ich möchte noch dazu sagen, dass der Code sicherlich nicht 1A perfektes PHP ist. Er soll nur seinen Zweck erfüllen...
Danke im Voraus.
Grüße, Lime
-
Ich sehe so auf anhieb keine Fehler. Was sagt denn die Javascript-Konsole des Browsers, nachdem du auf einen nicht-funktionierenden Benutzer klickst?
Und was funktioniert genau nicht? Bleiben die Daten des alten Users im Formular stehen?
Vielleicht macht es Sinn zwei Benutzer zu erstellen, die komplett unterschiedliche Daten haben, um zu sehen, ob nicht doch das ein oder andere Feld im Formular neu gefüllt wird.
Wie sieht denn der fertig generierte HTML/JS Source Code aus? Denn DIESER funktioniert ja nicht. Auch wenn der Fehler ursprünglich woanders liegt und sich durchzieht bis hierhin.Hilfreiche Beiträge dürfen gerne über den Stern oder den "Danke" Button unter jedem Post positiv bewertet werden ;) Danke...
-
Naja... Ich hab hier schätzungsweise 800 Benutzer, davon funktionieren in etwa 10...
Die sind normal absolut unterschiedlich...
Javscript-Console? Ich habs nich so mit Javascript, das war eher eine Murxerei bis das funktioniert hat!
Ja eigentlich sollten beim Klick auf den Namen alle Felder oben (wenn Daten vorhanden sind) gefüllt werden - ja die Daten sind vorhanden, zumindest der Name muss immer da sein...
Und bei allen (bis auf den Letzten) füllt er die Daten nicht ein, springt aber zum Seitenanfang.
Bei dem Letzten füllt er die Daten ein, bleibt aber in der Zeile, wo er ist... Also geht nicht zum Seitenanfang zurück...
Browserquelltext kriegst du gleich!
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
<tr> <script type="text/javascript"> $(document).ready(function() { $('#user1508').click(function() { $('#name').val('Testuser1'); $('#m').prop('checked', true); $('#tel').val('123123'); $('#handy').val('123123'); $('#email').val('maxmuster@muster.com'); $('#ort').val('straße1'); $('#group').val('2'); $('#status').val('1'); $('#userid').val('1508'); $('#mutter').val(''); $('#vater').val(''); if ($('#group').val() == '3'){ $('#eltern').show('fast'); } if ($('#group').val() == '2'){ $('#eltern').hide('fast'); } if ($('#group').val() == '1'){ $('#eltern').hide('fast'); } if ($('#group').val() == '4'){ $('#eltern').hide('fast'); } return false; }); });</script> <td><a href="#" id="user1508">Testuser1</a></td> <td>Eltern</td> <td>123123</td> <td>123123</td> <td>maxmuster@muster.com</td> <td>straße1</td> </tr> <tr><script type="text/javascript">$(document).ready(function() {$('#user1509').click(function() {$('#name').val('Testuser2');$('#m').prop('checked', true);$('#tel').val('123123');$('#handy').val('123123');$('#email').val('maxmuster@muster.com');$('#ort').val('straße2');$('#group').val('2');$('#status').val('1');$('#userid').val('1509');$('#mutter').val('');$('#vater').val('');if ($('#group').val() == '3'){$('#eltern').show('fast');}if ($('#group').val() == '2'){$('#eltern').hide('fast');}if ($('#group').val() == '1'){$('#eltern').hide('fast');}if ($('#group').val() == '4'){$('#eltern').hide('fast');}return false;});});</script><td><a href="#" id="user1509">Testuser2</a></td><td>Eltern</td><td>123123</td><td>123123</td><td>maxmuster@muster.com</td><td>straße2</td></tr>
der zweite Code ist ident, bis auf die persönlichen Daten... Das zu Formatieren nervt bisschen
hoffe das hilft irgendwie weiter...
gruß
-
Du gibst bei jedem Schleifendurchlauf eine neue Behandlung für
Code :1
$(document).ready(function()
aus. Mehrfach deklarierte Funktionen verursachen in Javascript keinen Fehler, sondern werden einfach überschrieben. Zum Schluss steht wirkungsvoll also nur der Part, der die letzte Zeile bearbeitet.
Es dürfte an sich schon so reichen:
wobei es freilich besser wäre, wenn du das Ereignis für die Zeilen einmalig bearbeiten würdest.PHP-Code:echo("<script type=\"text/javascript\">");
echo("$(document).ready(function() {");
$sqlCmd = "SELECT * FROM intern_user ORDER BY name ASC";
$sqlQry = mysql_query($sqlCmd,$sql);
while($row = mysql_fetch_object($sqlQry))
{
echo("<tr>");
echo("$('#user".$row->id."').click(function() {");
/* Rest des Codes */
echo("</tr>");
}
echo("});");
echo("</script>");
Für die Übereinstimmung von Niederschrift und Hirninhalt.
-
Dann müsste ich also zwei Mysql-Durchläufe machen? Einmal für Javascript und einmal für die Tabelle? Weil die Tabelle mitten ins Javascript reinbasteln kommt auch nicht toll, oder?
Desweiteren funktioniert ja aber eben nicht nur die letzte Zeile (der letzte Tabelleneintrag), sondern es funktionieren in der Liste (die zurzeit 237 Benutzer hat) ungefähr 10 Benutzer. Die sind alle quer auf der Seite verstreut, also hat keine sonderliche Logik von der Anordnung her.
Ich kann den Vorschlag später ausprobieren, bezweifle aber dass es wirkt...
€: jetzt funktioniert gar nichts mehr, kein einziger eintrag lässt sich durch anklicken oben einfüllen...
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
echo("<script type=\"text/javascript\">"); echo("$(document).ready(function() {"); $sqlCmd = "SELECT * FROM intern_user ORDER BY name ASC"; $sqlQry = mysql_query($sqlCmd,$sql); while($row = mysql_fetch_object($sqlQry)) { echo("$('#user".$row->id."').click(function() {"); echo("$('#name').val('".$row->name."');"); if($row->geschlecht == "m") { echo("$('#m').prop('checked', true);"); } elseif($row->geschlecht == "w") { echo("$('#w').prop('checked', true);"); } echo("$('#tel').val('".$row->tel."');"); echo("$('#handy').val('".$row->handy."');"); echo("$('#email').val('".$row->email."');"); echo("$('#ort').val('".$row->ort."');"); echo("$('#group').val('".$row->gruppe."');"); echo("$('#status').val('".$row->status."');"); echo("$('#userid').val('".$row->id."');"); echo("$('#mutter').val('".$row->mutter."');"); echo("$('#vater').val('".$row->vater."');"); echo("if ($('#group').val() == '3')"); echo("{"); echo("$('#eltern').show('fast');"); echo("}"); echo("if ($('#group').val() == '2')"); echo("{"); echo("$('#eltern').hide('fast');"); echo("}"); echo("if ($('#group').val() == '1')"); echo("{"); echo("$('#eltern').hide('fast');"); echo("}"); echo("if ($('#group').val() == '4')"); echo("{"); echo("$('#eltern').hide('fast');"); echo("}"); echo("return false;"); echo("});"); } echo("});"); echo("</script>"); $sqlCmd = "SELECT * FROM intern_user ORDER BY name ASC"; $sqlQry = mysql_query($sqlCmd,$sql); while($row = mysql_fetch_object($sqlQry)) { echo("<tr>"); echo("<td><a href=\"#\" id=\"user".$row->id."\">".$row->name."</a></td>"); $gruppe = $row->gruppe; if($gruppe == 1) { $gruppeout = "Admin"; } elseif($gruppe == 2) { $gruppeout = "Eltern"; } elseif($gruppe == 3) { $gruppeout = "Schüler"; } elseif($gruppe == 4) { $gruppeout = "Lehrer"; } echo("<td>".$gruppeout."</td>"); echo("<td>".$row->tel."</td>"); echo("<td>".$row->handy."</td>"); echo("<td>".$row->email."</td>"); echo("<td>".$row->ort."</td>"); echo("</tr>"); }
beides in einer abfrage drinnen bringt noch weniger, zeigt er den tabelleninhalt nicht an...Geändert von Lime (12.11.11 um 11:38 Uhr)
-
Jup, das hatt ich unterschlagen, aber deswegen brauchst du nicht zweimal dasselbe Query abschicken.Weil die Tabelle mitten ins Javascript reinbasteln kommt auch nicht toll, oder?
[ungetestet]PHP-Code:$jq_code = "<script type=\"text/javascript\">";
$jq_code .= "$(document).ready(function() {";
$html_code = '';
$sqlCmd = "SELECT * FROM intern_user ORDER BY name ASC";
$sqlQry = mysql_query($sqlCmd,$sql);
while($row = mysql_fetch_object($sqlQry))
{
$jq_code .= "$('#user".$row->id."').click(function() {";
$jq_code .= "$('#name').val('".$row->name."');";
if($row->geschlecht == "m")
{
$jq_code .= "$('#m').prop('checked', true);";
}
elseif($row->geschlecht == "w")
{
$jq_code .="$('#w').prop('checked', true);";
}
$jq_code .= "$('#tel').val('".$row->tel."');";
$jq_code .= "$('#handy').val('".$row->handy."');";
$jq_code .= "$('#email').val('".$row->email."');";
$jq_code .= "$('#ort').val('".$row->ort."');";
$jq_code .= "$('#group').val('".$row->gruppe."');";
$jq_code .= "$('#status').val('".$row->status."');";
$jq_code .= "$('#userid').val('".$row->id."');";
$jq_code .= "$('#mutter').val('".$row->mutter."');";
$jq_code .= "$('#vater').val('".$row->vater."');";
$jq_code .= "if ($('#group').val() == '3')";
$jq_code .= "{";
$jq_code .= "$('#eltern').show('fast');";
$jq_code .= "}";
$jq_code .= "if ($('#group').val() == '2')";
$jq_code .= "{";
$jq_code .= "$('#eltern').hide('fast');";
$jq_code .= "}";
$jq_code .= "if ($('#group').val() == '1')";
$jq_code .= "{";
$jq_code .= "$('#eltern').hide('fast');";
$jq_code .= "}";
$jq_code .= "if ($('#group').val() == '4')";
$jq_code .= "{";
$jq_code .= "$('#eltern').hide('fast');";
$jq_code .= "}";
$jq_code .= "return false;";
$jq_code .= "});";
$html_code .= "<tr>";
$html_code .= "<td><a href=\"#\" id=\"user".$row->id."\">".$row->name."</a></td>";
$gruppe = $row->gruppe;
if($gruppe == 1) { $gruppeout = "Admin"; }
elseif($gruppe == 2) { $gruppeout = "Eltern"; }
elseif($gruppe == 3) { $gruppeout = "Schüler"; }
elseif($gruppe == 4) { $gruppeout = "Lehrer"; }
$html_code .= "<td>".$gruppeout."</td>";
$html_code .= "<td>".$row->tel."</td>";
$html_code .= "<td>".$row->handy."</td>";
$html_code .= "<td>".$row->email."</td>";
$html_code .= "<td>".$row->ort."</td>";
$html_code .= "</tr>";
}
$jq_code .= "});";
$jq_code .= "</script>";
echo $html_code;
echo $jq_code;
Was sagt Firebug dazu?jetzt funktioniert gar nichts mehr, kein einziger eintrag lässt sich durch anklicken oben einfüllen...
Wie sieht der Rest des Quelltextes aus?Für die Übereinstimmung von Niederschrift und Hirninhalt.
-
selbes Ergebnis... funktioniert gar nichts mehr. Mein ursprünglicher Code hat - teilweise - am besten funktioniert...
€: Firebug sagt mir nichts, aber kuck ich mir aus Interesse mal an...
-
Ich bin selber überrascht, aber die Lösung war so simpel wie auch dämlich...
Bei der Masseneinspeißung muss - wie auch immer - ans Ende jeder Zeile ausversehen ein Zeilenumbruch geraten sein... Habe das nun in den Griff bekommen, in dem ich die Massenverwaltung neu konfiguriert habe und die bereits vorhandenen Einträge durch eine Funktion direkt korrigieren lassen habe.
Für alle, die es interessiert:
Immer die "unsichtbaren" Probleme. *g*PHP-Code:<?PHP
echo("<p>");
$sqlCmd = "SELECT * FROM intern_user";
$sqlQry = mysql_query($sqlCmd,$sql);
while($row = mysql_fetch_object($sqlQry))
{
$ort = str_replace("\r","",$row->ort,$count);
$sqlCmd = "UPDATE intern_user SET ort='".$ort."' WHERE id='".$row->id."'";
$sqlQry2 = mysql_query($sqlCmd,$sql);
if($sqlQry2) { echo($row->name." erfolgreich kontrolliert! ".$count." fehlerhafte Zeichen ersetzt.<br />"); }
}
echo("</p>");
?>
Gruß, Lime
Ähnliche Themen
-
[PHP] MySQL DB ausgabeproblem
Von silverstar2411 im Forum PHPAntworten: 4Letzter Beitrag: 11.07.07, 18:17 -
mehrere Inserts
Von Transporter im Forum PHPAntworten: 2Letzter Beitrag: 21.01.06, 18:24 -
Probleme mit Datenbank Inserts
Von Manstein im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 06.06.05, 11:45 -
Zusammen zählen von mehrere DB inserts
Von xyba im Forum PHPAntworten: 12Letzter Beitrag: 13.09.04, 16:03 -
mehrere einträge updaten(mysql) jedoch...
Von Operator_Jon im Forum PHPAntworten: 23Letzter Beitrag: 18.08.03, 14:44





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren