Mehrere INSERTS in eine Mysql-Datenbank, jedoch Ausgabeproblem

Lime

frisch fruchtig
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
 
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)
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?
 
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:
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:
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...
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:
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:
$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.
 
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:
<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:
$(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:

PHP:
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>");
wobei es freilich besser wäre, wenn du das Ereignis für die Zeilen einmalig bearbeiten würdest.
 
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:
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...
 
Zuletzt bearbeitet:
Weil die Tabelle mitten ins Javascript reinbasteln kommt auch nicht toll, oder?

Jup, das hatt ich unterschlagen, aber deswegen brauchst du nicht zweimal dasselbe Query abschicken.

PHP:
$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;

[ungetestet]

jetzt funktioniert gar nichts mehr, kein einziger eintrag lässt sich durch anklicken oben einfüllen...

Was sagt Firebug dazu?
Wie sieht der Rest des Quelltextes aus?
 
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...
 

Neue Beiträge

Zurück