Multieingaben via HTML/PHP an MySQL
Connor
- datenbank
Hallo zusammen,
habe wie wild gesucht und nichts gefunden was mir hilft bzw verstehe (Anfänger in PHP/MySQL)
Mein Problem:
Ich habe eine SQL-Tabelle mit allen "usern". Diese haben eine eindeutige ID
Nun möchte ich per HTML zb 18 unterschiedliche ID,s aus "user" in eine Tabelle (zb Liga1) zuordnen.
Mit einer ID aus "user" schaffe ich das. Aber mit mehreren IDs leider nicht.
Es wird ausschließlich nur die letzte eingetragene ID aus meinem HTML-Formular in die Tabelle "liga1" eingetragen.
Aufbau Tabelle "user":
ID,pname
Aufbau Tabelle "liga1";
ID, pname
PHP:
$ID = $_POST["id"]; // kommt aus HTML
INSERT INTO liga1 ID,pname FROM user WHRERE ID=§ID;
Danke schon mal an Euch
Hallo Connor,
$ID = $_POST["id"]; // kommt aus HTML
Und wie sieht der HTML-Code dazu aus? Evtl. hilft dir der PHP-FAQ-Eintrag "Wie kann man Checkboxen verarbeiten?".
INSERT INTO liga1 ID,pname FROM user WHRERE ID=§ID;
Das ist kein gültiger INSERT-Syntax (mal abgesehen davon, dass $ != § ist).
Gruß,
Tobias
Hallo Tobi
klar das § falsch ist. Hatte mich vertippt :)
Mein HTML Code ist:
<form action="namen_eintragen.php" method="POST">
<tr></tr><td>Nr 1</td><td><input type="text" name="id1"/></td></tr>
<tr></tr><td>Nr 2</td><td><input type="text" name="id2"/></td></tr>
<tr></tr><td>Nr 3</td><td><input type="text" name="id3"/></td></tr>
// Es können bis zu 18 IDs drinne sein
<tr></tr><td></td><td><input type="submit" name="submit" value="Namen eintragen ..."/></td></tr>
Das übergebe ich an mein PHP Script das ich dann die IDs aus der "user" Tabelle suchen soll und dann die entsprechenden Namen in die Tabelle "liga1" schreiben soll.
Mit einer ID geht es ja. Aber nicht mit mehreren
Hallo Connor,
<tr></tr><td>Nr 1</td><td><input type="text" name="id1"/></td></tr>
<tr></tr><td>Nr 2</td><td><input type="text" name="id2"/></td></tr>
<tr></tr><td>Nr 3</td><td><input type="text" name="id3"/></td></tr>
Das ist ungünstig. Du könntest zwar alle IDs einzeln abfragen, einfacher wäre es aber wenn du die Methode aus dem ersten Link in meinem Posting von 14:05 Uhr verwenden würdest, da du dann die IDs mit einer Schleife durchlaufen kannst.
Mit einer ID geht es ja. Aber nicht mit mehreren
Wie sieht dein Code für eine ID aus? Der INSERT-Query aus deinem Ursprungsposting wird nicht funktionieren ...
Gruß,
Tobias
hi,
<tr></tr><td>Nr 1</td><td><input type="text" name="id1"/></td></tr>
<tr></tr><td>Nr 2</td><td><input type="text" name="id2"/></td></tr>
<tr></tr><td>Nr 3</td><td><input type="text" name="id3"/></td></tr>
Hier könntest du mit arrays arbeiten, und dann die Einträge mit einer Schleife durchgehen.
Erstmal testen, ob POST dir das liefert, was du erwartest:
<!-- Value Leer lassen, nur User dürfen was rein schreiben -->
<input type="text" name="id[1]" value=""/>
<input type="text" name="id[2]" value=""/>
<input type="text" name="id[3]" value=""/>
if(isset($_POST['id']))
{
foreach($_POST['id'] as $userid => $username)
if($username)
printf('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?
}
Bei insert solltest du die Werte, die du per Variable übergibst, escapen.
Sicherheitshalber alle Variablen mit "mysql_real_escape_string($user)
" an das insert übergeben.
mfg
Hi Tobi
leider geht bei mir dein Vorschlag nicht. Meine Code:
<html>
<head>
<title>Liga 1 eintragen</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
</head>
<body>
<!-- Value Leer lassen, nur User dürfen was rein schreiben -->
<input type="text" name="id[1]" value=""/>
<input type="text" name="id[2]" value=""/>
<input type="text" name="id[3]" value=""/>
<tr></tr><td></td><td><input type="submit" name="submit" value="Absenden"/></td></tr>
<?php
if(isset($_POST['id']))
{
foreach($_POST['id'] as $userid => $username)
if($username)
echo ('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?
}
?>
</body>
</html>
Hi!
leider geht bei mir dein Vorschlag nicht. Meine Code:
Mach eine Kontrollausgabe vom gesamten $_POST-Inhalt, dann siehst du vielleicht auch worin das Nicht-Wollen des Scripts begründet liegt. Kontrollausgaben sind die wichtigsten Hilfsmittel zur Fehlersuche. Unter PHP eignet sich dafür meist am besten var_dump() (mit einem <pre> davor für eine lesbare Ausgabe).
Lo!
Hi,
leider geht bei mir dein Vorschlag nicht.
Der stellte keine fertige Lösung dar, sondern beschrieb nur einen kleinen Ausschnitt des HTML-Dokumentes - wohl in der Annahme/Hoffnung, dass du dich zumindest so weit mit HTML beschäftigt hast, dass du den Rest selber sinnvoll ergänzen kannst.
<body>
<!-- Value Leer lassen, nur User dürfen was rein schreiben -->
<input type="text" name="id[1]" value=""/>
<input type="text" name="id[2]" value=""/>
<input type="text" name="id[3]" value=""/>
<tr></tr><td></td><td><input type="submit" name="submit" value="Absenden"/></td></tr>
Zum Übergeben von Nutzereingaben eignen sich Formulare hervorragend.
Nicht vorhandene Formulare eignen sich dazu aber weniger.
MfG ChrisB
hi,
<!-- Value Leer lassen, nur User dürfen was rein schreiben -->
<input type="text" name="id[1]" value=""/>
<input type="text" name="id[2]" value=""/>
<input type="text" name="id[3]" value=""/>
<tr></tr><td></td><td><input type="submit" name="submit" value="Absenden"/></td></tr>
Wie Chris schon schrieb, ohne Formulareingaben kann PHP nicht arbeiten, und Formulardaten setzen ein Formular vorraus.
mfg
hi,
es ist sicherlich im Interesse aller hier, dass du sauberen Code produzierst. Darum hier mal eine hilfe, was dein Formular angeht.
Mit hilfe dieses Codes kannst du dich auf dein Insert konzentrieren, wo ich aber hoffe, dass du dich etwas bemühst, und es selbst versuchst, zu ende zu bringen, uns aber über den Aktuellen Verlauf auf dem laufenden hältst, um grobe patzer auszumerzen.
Was liefert dir folgendes Konstrukt?
<form method="post">
<!--
Value Leer lassen, nur User dürfen was rein schreiben
Mache einige Test-durchläufe, indem du unterschiedliche Felder ausfüllst und abschickst
-->
<input type="text" name="id[1]" value=""/>
<input type="text" name="id[2]" value=""/>
<input type="text" name="id[3]" value=""/>
<input type="submit" name="submit" value="Absenden"/>
</form>
<?php
if(isset($_POST['id']))
{
foreach($_POST['id'] as $userid => $username)
if($username)
printf('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?
}
?>
mfg
hi,
es ist sicherlich im Interesse aller hier, dass du sauberen Code produzierst. Darum hier mal eine hilfe, was dein Formular angeht.
Mit hilfe dieses Codes kannst du dich auf dein Insert konzentrieren, wo ich aber hoffe, dass du dich etwas bemühst, und es selbst versuchst, zu ende zu bringen, uns aber über den Aktuellen Verlauf auf dem laufenden hältst, um grobe patzer auszumerzen.Was liefert dir folgendes Konstrukt?
<form method="post">
<!--
Value Leer lassen, nur User dürfen was rein schreiben
Mache einige Test-durchläufe, indem du unterschiedliche Felder ausfüllst und abschickst
-->
<input type="text" name="id[1]" value=""/>
<input type="text" name="id[2]" value=""/>
<input type="text" name="id[3]" value=""/>
<input type="submit" name="submit" value="Absenden"/>
</form>
>
> ~~~php
<?php
> if(isset($_POST['id']))
> {
> foreach($_POST['id'] as $userid => $username)
> if($username)
> printf('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?
> }
> ?>
Lieben Dank für diesen Code. Liefert mir genau die Nummern die ich eingegeben habe.
Werde nun an der INSERT Weitergabe per PHP an meiner Tabelle arbeiten.
Danke für diesen Denkanstoß
Hi,
Mit einer ID aus "user" schaffe ich das. Aber mit mehreren IDs leider nicht.
Dazu eignet sich bspw. der IN-Operator.
MfG ChrisB
Hallo Chris,
danke auch dir.
Aber ich verstehe den IN Operator nicht. :(
Wäre es möglich mir dazu ein Bespiel zu geben ?
Danke sehr
Dazu eignet sich bspw. der IN-Operator.
MfG ChrisB
Hi,
Aber ich verstehe den IN Operator nicht. :(
*Was* verstehst du daran nicht?
Wäre es möglich mir dazu ein Bespiel zu geben ?
Auf der verlinkten Seite ist ein Beispiel.
Und bitte vermeide TOFU, Danke.
MfG ChrisB
Ich hoffe diese Nachricht ist kein TOFU. Obwohl ich nicht weis was das ist ;(
Zurück zu meinem Problem:
Chris,
ich versuche echt schon seit einigen Wochen Multieingaben per HTML hinzu bekommen.
Ich bin ehr ein Autididakt und Frage echt erst wenn ich kurz vor dem Aufgeben bin.
Habe mir selber aus anderen Snippets einige PHP Sachen zusammen gebaut. Auch das hat ech lange gedauert. Aber ich bin stolz das ich es geschafft hatte.
Leider muss ich in diesem Forum die Erfahrung machen, das es zwar Antworten gibt aber leider keine echte Hilfe
Hi,
Ich hoffe diese Nachricht ist kein TOFU. Obwohl ich nicht weis was das ist ;(
Du bist doch wohl in der Lage, dem Link zu folgen, um die Erklärung nachzulesen?
ich versuche echt schon seit einigen Wochen Multieingaben per HTML hinzu bekommen.
Was du unter „Multieingaben” verstehst, ist bei deiner Problembeschreibung höchstens zu erahnen.
Ein geläufiger Begriff ist das nicht.
Je exakter du selber dein Problem formulierst, desto näher kommst du dabei auch selber der Lösung.
Leider muss ich in diesem Forum die Erfahrung machen, das es zwar Antworten gibt aber leider keine echte Hilfe
Das kommt darauf an, wie man „Hilfe” definiert.
Ich tue es so, dass ich *konkrete* Fragen gerne nach bestem Wissen beantworte.
„Ich versteh das nicht” ist aber keine konkrete Frage. So lange du mir nicht erklärst, was genau du nicht verstehst, kann ich dir nicht weiterhelfen.
MfG ChrisB
Ich werde morgen die vorgeschlagenen Lösungen ausprobieren und dann berichten :)
Chris, tut mir leid wenn ich mein Problem formuliert habe wie ein Anfänger. Aber .... ich bin auch Einer.
Hi Chris,
habs mit dem IN Befahl hinbekommen danke.
Mein Code ist aber recht grausam. Aber es geht.
Code in PHP:
<?php
include("db_connect.php");
// In Liga1 eintragen Post kommt aus HTML
$id1 = $_POST["id1"];
$id2 = $_POST["id2"];
$id3 = $_POST["id3"];
$id4 = $_POST["id4"];
$id5 = $_POST["id5"];
$id6 = $_POST["id6"];
$id7 = $_POST["id7"];
$id8 = $_POST["id8"];
$id9 = $_POST["id9"];
$id10 = $_POST["id10"];
$id11 = $_POST["id11"];
$id12 = $_POST["id12"];
$id13 = $_POST["id13"];
$id14 = $_POST["id14"];
$id15 = $_POST["id15"];
$id16 = $_POST["id16"];
$id17 = $_POST["id17"];
$id18 = $_POST["id18"];
$sql="select * from user";
$sql= "select * from liga_1";
$nachliga1 = mysql_query(" INSERT INTO liga_1 (ID,pname) SELECT ID,pname FROM user WHERE ID IN ('$id1','$id2','$id3','$id4','$id5','$id6','$id7','$id8','$id9','$id10','$id11','$id12','$id13','$id14','$id15','$id16','$id17','$id18') ");
?>
Hi!
Mein Code ist aber recht grausam. Aber es geht.
Allerdings. Es geht sogar noch viel mehr als du dir wünschst. Bitte beachte die Kontextwechsel-Problematik, wenn dir deine Daten lieb sind.
$id1 = $_POST["id1"];
$id2 = $_POST["id2"];
...
Warum machst du dir diese Mühe des Umkopierens? Verwende die Werte direkt aber sicher.
Lo!
Hi Lo und danke für deine Antwort,
Wie kann ich die Daten direkt verwenden?
Bitte bedenke ich bin ein Noob :) Aber ich versuche besser zu werden
Hi!
Wie kann ich die Daten direkt verwenden?
Im verlinkten Artikel sind Beispiele angegeben (im Abschnitt Verhindernde Maßnahmen). Beachte aber auch, dass das PHP-Feature Magic Quotes angeschaltet sein kann. Dazu findest du ebenfalls Informationen im Artikel, im PHP-Handbuch und an anderen Stellen.
Die dem Script zur Verfügung gestellten Eingabedaten sind bereits von PHP entgegengenommen und im $_POST-Array abgelegt worden. Array-Elemente sind Variablen wie alle anderen auch, nur die Syntax des Zugriffs ist etwas anders. Es ist nicht notwendig, sie "abzuholen" oder dergleichen. Mit den zusätzlichen Variablen holt man sich nur mehr potentielle Fehlerquellen ins Script.
Bitte bedenke ich bin ein Noob :) Aber ich versuche besser zu werden
Das (Besserwerden) ist löblich. Jemandem, der deine Fehler ausnutzt, ist es jedoch egal, welchen Wissensstand du hast. Und mir im Prinzip auch. Anhand des Wortes "Noob" kann ich nämlich nicht erkennen, wo du Nachholebedarf hast. Konkretisiere deine Fragen. Das hilft dir, weil du dann darüber nachdenken und dich mit dem Thema beschäftigen musst und mir als Antwortendem, weil ich effizienter antworten kann.
Lo!