Formular mit PHP erstellen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
auslese
button
check
code
datenbank
element
fehler
feld
form
formular
funktion
helfen
layout
menge
post
problem
string
unterscheiden
vorsicht
-
Hallo leute ich habe mal wieder ein Problem und hoffe das ihr mir helfen könnt.
Also ich möchte via php ein Forular erstellen dh in einer while-schliefe. Ich habe um die formulare zu unterscheiden als name eine id genommen welche ich aus einer Datenbank auslese dh es gbit zu jeder ausgegebnene Zelle der Datenbank ein formular.
Hier ersteinmal der Code:
<?php $sql = ("SELECT * FROM layout WHERE `userid` = '$uid'"); $lql = mysql_query($sql) or die(mysql_error()); while($lpl = mysql_fetch_assoc($lql)){ echo" <form action=\"javascript:get(document.getElementById('$id'));\" name=\"$id\" id=\"$id\"> <input type=\"text\" title=\"url:.\" value=\"$lpl[content]\" class=\"wi40\" id=\"rss_url\"/> <input type=\"text\" title=\"menge\" value=\"$id=$lpl[anzahl_news]\" class=\"wi40\" id=\"anzahl_news\"/> <input type=\"text\" title=\"id\" value=\"$lpl[id]\" class=\"wi40\" id=\"id\"/> <br> <input type=\"submit\" name=\"$id\" value=\"Normal Submit Button\"id=\"$id\"> </form> <br><br> </div>"; ?>
So die forumlare werden erstellt jetzt habe ich allerdings das problem das egal auf welchen Button ich klicke immer das zu letzt ausgegeben fomular übergeben wird. Alle formulare werden an einen ajax post gesendet
<script type="text/javascript" language="javascript"> var http_request = false; function makePOSTRequest(url, parameters) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { // set type accordingly to anticipated content type //http_request.overrideMimeType('text/xml'); http_request.overrideMimeType('text/html'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Cannot create XMLHTTP instance'); return false; } http_request.onreadystatechange = alertContents; http_request.open('POST', url, true); http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http_request.setRequestHeader("Content-length", parameters.length); http_request.setRequestHeader("Connection", "close"); http_request.send(parameters); } function alertContents() { if (http_request.readyState == 4) { if (http_request.status == 200) { //alert(http_request.responseText); result = http_request.responseText; document.getElementById('myspan').innerHTML = result; } else { alert('There was a problem with the request.'); } } } function get(obj) { var poststr = "rss_url=" + escape(encodeURI( document.getElementById("rss_url").value )) +"&anzahl_news="+ escape(encodeURI( document.getElementById("anzahl_news").value )) +"&id=" +escape(encodeURI( document.getElementById("id").value )); makePOSTRequest('post.php', poststr); } </script>
Ich hoffe ihr versteht was ich mein und könnt mir helfen mein problem zu lösen -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
kann ich dir ganz klar Sagen, du greifst auf die Variable $id zu, die nicht existiert ;) Sollte stattdessen vermutlich $lpl['id'] heißen.
Ausserdem vergisst du bei den Zugriffen auf das Array immer die Anführungzeichen beim Bezeichner.
Korrekt:
<?php $sql = ("SELECT * FROM layout WHERE `userid` = '$uid'"); $lql = mysql_query($sql) or die(mysql_error()); while($lpl = mysql_fetch_assoc($lql)){ echo '<form action="javascript:get(document.getElementById(' . $lpl['id'] . '));" name="' . $lpl['id'] . '" id="' . $lpl['id'] . '">'; echo '<input type="text" title="url:." value="' . $lpl['content'] . '" class="wi40" id="rss_url">'; echo '<input type="text" title="menge" value="'$lpl['anzahl_news']. '" class="wi40" id="anzahl_news">'; echo '<input type="text" title="id" value="' . $lpl['id'] , '" class="wi40" id="id"/>'; echo '<br> <input type="submit" name="' . $lpl['id'] . '" value="Normal Submit Button" id="' . $lpl['id'] . '"> </form> <br><br> </div>'; ?>
-
Ich habe deine idee mal probiert allerdings ohne erfolg ich habe die $id eigl in ieriner vairable gespeichert also:
hab halot nit den ganzen code gepostet.$id=$lpl[id]
Ich glaube mal das der Fehler eher hier liegt:
function get(obj) { var poststr = "rss_url=" + escape(encodeURI( document.getElementById("name").value )) +"&anzahl_news="+ escape(encodeURI( document.getElementById("menge").value )) +"&id=" +escape(encodeURI( document.getElementById("id").value )); makePOSTRequest('post.php', poststr); }
die daten werden ja über
bekommen allerdings hat doch jedes Formular die gleichen ids bei diesen Feldern und so kann doch javascript nicht unterscheiden von welchem forular er nun diese Felder nehmen solldocument.getElementById("name").value
ich hoffe ihr versteht wie ich das meine und könnt mir eine lösung meines problemes geben.
-
OK, jetzt seh ich das Problem, sorry.
Du verwendest die ID's (menge_news, name...) mehrfach. ID's müssen immer eindeutig sein. Sonst weiß getElementById ja nicht welches Element du ansprechen willst. Häng mal an deine ID's die $id an, also z.B.
echo '<input type="text" title="url:." value="' . $lpl['content'] . '" class="wi40" id="rss_url' . $id .'">';
Der get()-Funktion Übergibst du dann kein Element sondern nur die ID:
echo '<form action="javascript:get(' . $lpl['id'] . ');" name="' . $lpl['id'] . '" id="' . $lpl['id'] . '">';
Und in der get()-Methode greifst du dann folgendermaßen auf die Elemente zu:
function get(id) { var poststr = "rss_url=" + escape(encodeURI( document.getElementById("name" + id).value )) +"&anzahl_news="+ escape(encodeURI( document.getElementById("menge" + id).value )) +"&id=" +escape(encodeURI( document.getElementById("id" + id).value )); makePOSTRequest('post.php', poststr); }
Und Vorsicht: Deine Form hat auch die selbe ID wie dein Submit-Button, nämlich die $id -
Hey das funktioniert jetzt alles Spitze besten dnak erstmal
Kannst du mir vlt noch helfen und mir sagen wie in diesen code eine checkbox auswertung mache sodass nur dann wenn die checkbox true ist das element mit überleifert wird ?
function get(id) { var poststr = "rss_url=" + escape(encodeURI( document.getElementById("rss_url"+id).value )) +"&anzahl_news="+ escape(encodeURI( document.getElementById("anzahl_news"+id).value )) +"&id=" +id +"&check="+ escape(encodeURI( document.getElementById("check"+id).value )); makePOSTRequest('saverss.php', poststr); }
Bei dem beispiel bekomme ich nur den name der checkbox überliefert
Ich habe diesen Code mir gedacht aber weiss nicht wie ich ihn einbauen soll.
if(document.getElementsByid("check"+id).checked == true)
nikic: Code-Tags korrigiert.
Beitrag zuletzt geändert: 18.10.2009 11:54:30 von nikic -
Wenn ich es richtig verstanden habe willst du den Teil &check=... nur an den String anhängen, wenn die checkbox angehakt ist.Das kannst du einfach mit einer if-Abfrage machen, die nötige abfrage hast du ja schon ;)
function get(id) { var poststr = "rss_url=" + escape(encodeURI( document.getElementById("rss_url"+id).value )) +"&anzahl_news="+ escape(encodeURI( document.getElementById("anzahl_news"+id).value )) +"&id=" +id; if(document.getElementsByid("check"+id).checked == true) { poststr += "&check="+ escape(encodeURI( document.getElementById("check"+id).value )); } makePOSTRequest('saverss.php', poststr); }
-
Ich habe dne code gerade mal probiert so wie du ihn geschrieben hast allerdings bekomme ich da gar keine übertragung mehr zu stande. mir ist eigl egal ob ich nur dann an den string anhänge wenns postiv ist das eigentliche was ich will ist das ich auf der php seite auf die ich übertrage herrausfinde ob die checkbox betätigt wurde oder nicht.
-
Sorry, hatte einen Fehler im Code, die funktion heißt getElementById() statt getElementsById() (also Element singular)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage