Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Dropdown [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Dropdown


 
Revolverheld
12-09-2007, 19:03 
 
Hallo,

also ich habe folgendes Problem und zwar habe ich eine DB in der Artikel drin sind. Zu jedem Artikel gibt es einen Zustand: Neu, Gebraucht, Alt. Nun werden bei meiner Abfrage alle Artikel schön angezeigt. Jetzt möchte ich gerne, dass der Status nicht mehr in Textform angezeigt wird, sondern in einem DropDown-Menü.
Und zwar möchst ich gerne, dass das DropDown-Menü auf der Zustand steht, in dem sich der Artikel grad befindet. Zudem soll man den Status ganz leicht ändern können und zwar stelle ich mir das wie folgt vor. Man wählt aus dem Menü einen anderen Punkt aus (Bsp: Zustand ist akt. gebraucht und soll als defekt gemeldet werden) wählt aus und wenn man die Maus dann loslässt kommt eine Box ("Wollen Sie wirklich ändern" ABBRECHEN | OK), beim OK klick wird das dann in der DB übernommen.

<p><select name="Status" size="1">
<option value="neu">neu</option>
<option value="gebraut">gebraucht</option>
<option value="defekt">defekt</option>
</select></p>

 
BugBite
12-09-2007, 21:07 
 
http://de.selfhtml.org/html/referenz/elemente.htm#option
messagebox geht nich in php
status ändern in der DB: UPDATE

 
futzinator
12-09-2007, 21:54 
 
und wo ist nun das Problem? Du musst schon genau sagen wo dein Problem liegt. Ich glaube nicht das hier jemand dir den Code reincodet.

 
Revolverheld
17-09-2007, 02:07 
 
Nein ich brauche einen fertigen Code.
Also ich versuche es mal anders zu erklären ;-)

Also mein Problem ist zu jedem Datensatz wird ein Status gespreichert (Neu, Gebraucht, usw). Nun gebe ich alle Datensätze in einer Tabelle aus. Alles kein Problem! Mein Problem ist nun nur, dass ich den Status nicht in Textform ausgeben möchte. Sondern stelle ich mir das so vor, dass es das Dropdown-Menü gibt (1. <option>Neu, 2. <option>Gebraucht). In der Datenbank ist der Status in Textform gespeichert. Nun möchte das aktuelle Status oben im Dropdown-Menü steht (Zum Beispiel bei einem gebrauchten Artikel soll das Menü wie folgt aussehen 1. <option>Neu, 2. <option selected="selected">Gebraucht. Wenn der neu wäre sollte 1. <optionselected="selected">Neu, 2. <option>Gebraucht) stehen.

Wenn das klappen würde dann wäre ich schonmal einen großen Schritt weiter. Im Moment versuche ich es mit einer IF-Else, aber das klappt nicht =(

 
tontechniker
17-09-2007, 06:18 
 
"... das klappt nicht" ist keine Fehlerbeschreibung, zeig doch mal deinen Versuch, fertigen Code ohne Grundlage wirst du hier sicher nicht bekommen.

 
Dr.Speck
17-09-2007, 07:52 
 
Hallo,

ich glaube was Du suchst sind Event-Handler von Auswahllisten. Dort gibt es z.B. "onchange" mit dem Du bei einer Änderung der Auswahl, ohne weiteren Code, ein Javascript oder eine URL aufrufen kannst.

So in der Art: <input type="....... onchange="{CODE|URL}" />

Schau mal in einer HTML-Referenz nach. Über die aufgerufene URL wird dann z.B. der Datensatz aktualisiert.

 
Revolverheld
17-09-2007, 11:27 
 
if(Gebraucht == $line->status) { $status_1 = 'selected="selected"'; }
elseif(Neu == $line->status) {$status_2 = 'selected="selected"'; }
elseif(Defekt == $line->status) {$status_3 = 'selected="selected"'; }

echo ' <td><select> <option value="Gebraucht" '.$status_1.'>Gebraucht</option>';
echo ' <option value="Neu" '.$status_2.'>Satz / Neu</option>';
echo ' <option value="Defekt" '.$status_3.'>Defekt</option></select></td>';



Sooo der Code, leider klappt es so NICHT!

 
ZombieChe
17-09-2007, 11:59 
 
1. Da der Status wohl als String aus der DB kommt, solltest du auch den Vergleich auf einen String machen ("...").
2. Lass dir $line->status doch mal ausgeben
3. Schau, was dir der Quelltext sagt.

Das ist kein Problem, das man mit einer einfachen Testausgabe nicht alleine lösen könnte...bzw. könnte der Terminus "klappt...nicht" durch eine für uns weitaus präzisere Aussage ersetzt werden.

Hier noch ein kleiner Schnipsel für dich (nicht getestet), falls du mit deinem Code unzufrieden sein solltest^^:


<?php
$status = array("Gebraucht"=>"Gebraucht",
"Neu"=>"Satz / Neu",
"Defekt"=>"Defekt");
//...
echo '<td>';
// echo $line->status; //Testausgabe könnte hier stehen...
echo '<select>';
foreach ($status as $dbstatus => $display) {
echo '<option value="'.$dbstatus.'"';
if ($dbstatus == $line->status) echo ' selected="selected"';
echo '>'.$display.'</option>';
}
echo '</select>';
echo '</td>';
?>


für dein zweites Problem, schau - wie erwähnt - beim onchange event Handler nach (z.B. SelfHTML). Der könnte z.B. das Formular abschicken, wodurch du den neuen Status verarbeiten kannst...

 
arkos
17-09-2007, 15:05 
 
Original geschrieben von tontechniker
"... das klappt nicht" ist keine Fehlerbeschreibung, ...
Original geschrieben von Revolverheld
Sooo der Code, leider klappt es so NICHT!

grrr... beschreib deinen fehler besser....!!!

zum beispiel könntest du folgendes machen. den leuten hier

a) eine php-fehlermeldung geben (falls vorhanden)

oder b) den vom code produzierten quelltext posten - also das ergebnis.

so.
mahlzeit!

 
Revolverheld
18-09-2007, 12:16 
 
So mit dem Codeschnipsel von ZombieChe hat Teil 1 geklappt.
WUNDERBAR - DANKESCHÖN!

Nun probiere ich grad mit der Java Script Confirmbox rum. Das klappt bisher auch!
Rufe im Moment über über Onchange eine JS-Funktion die ich im Head definiert habe.
Nun haben sich wieder zwei neue Probleme aufgetan (-;

1) Werteübergabe: Ich möchte gerne den aktuellen Wert und den ausgewählten Wert übergeben.

confirm("Sind Sie sich sicher, dass Sie den aktuellen Status von NEU auf GEBRAUCHT ändern möchten?");


nun sollen natürlich NEU und GEBRAUCHT Variablen sein und vom Dropdownmenü übergeben werden.

2) Da ich ja eine Confirmbox habe werd ich wohl mit IF arbeiten. Bei false (also abbrechen) wird alles abgebrochen und bei true soll die DB geändert werden (update).

 
jahlives
18-09-2007, 12:47 
 
Ich möchte gerne den aktuellen Wert und den ausgewählten Wert übergeben.

Dann musst du wohl eine Var einführen, worauf du den alten Wert speicherst (weil im Moment des Events des onchange exisitert dieser Wert dann nicht mehr)
Den ausgewählten Wert kriegst du z.B.

var wert = document.getElementById('DeinSelect').value;

 
Revolverheld
18-09-2007, 12:54 
 
var wert = document.getElementById('DeinSelect').value

Das ist ja das Problem. Ich habe nun ca. 20 Dropdowns untereinander, welche ja auch alle den gleichen Namen und zum Teil die gleichen Werte haben.

Ich lese ja die Datensätze aus der DB in Form einer Tabelle aus.
Dort werden dann alle Artikel angezeigt (Textausgabe) und ich möchte nun dem User ermöglichen direkt in der Tabelle via dem Dropdown-Menü den Status der einzelnen Artikel zu ändern.

 
jahlives
18-09-2007, 13:21 
 
Ich habe nun ca. 20 Dropdowns untereinander, welche ja auch alle den gleichen Namen und zum Teil die gleichen Werte haben.

20 Optionen oder 20 Selects ? Du musst einfach jedem Select ne ID verpassen und im jeweiligen onchange auf die entsprechende ID zugreifen.

 
Revolverheld
18-09-2007, 14:24 
 
Das sind ja ca 20 Artikel und jeder Artikel hat einen eigenen Status. Also auch 20 <selects>.
Wie soll ich die ID dann zum JS übergeben?

 
arkos
18-09-2007, 14:24 
 
Original geschrieben von jahlives
20 Optionen oder 20 Selects ? Du musst einfach jedem Select ne ID verpassen und im jeweiligen onchange auf die entsprechende ID zugreifen.

dennoch wird er dabei nur den neuen wert bekommen. also muss er wohl noch jede selectbox mit zb nem hidden-field ausstatten, um auch den original-zustand als variable zu bekommen...

 
arkos
18-09-2007, 14:39 
 
du solltest ein solches select + hidden input feld aufbauen:
bsp id 20 / also 20te select-box


<select id="sel_20" onchange="DeineFunctionImHeader(document.getElementById('hid_20').value,this.value)">
<option value="neu">....</option>
<option value="gebraucht">....</option>
...
</select>
<input type="hidden" id="hid_20" value="neu"></input>
<!-- neu = istzustand aus db -->


damit müsste deine function beide werte bekommen.
func im header ungefähr so:

function DeineFunctionImHeader(originalwert,neuwert)
{
alert ("original: "+originalwert+" , neu: "+neuwert);
}

 
Revolverheld
18-09-2007, 18:08 
 
SOOOO DANKESCHÖN... ich habe mein Ziel fast erreicht.
Habe das ganze nun mit einer ConfirmBox in JS gelöst.

<script type="text/javascript">
function Box(status) {
var answer = confirm("Sind Sie sich sicher, dass Sie den Status auf " + status + " ändern möchten?");
if (answer)
HIER MUSS WAS HIN
else
location.reload()
}
</script>

Reload muss sein, damit wenn der Userabbrechen drück, der Ursprungsstatus wieder steht. (Also wenn jemand auswählt von Neu auf Gebraucht, würd ja beim Abbrechen drücken trotzdem noch Gebraucht da stehen.)

Nun kommt die Frage der Fragen. Wie komme ich von JS wieder zu meiner PHP UPDATE Funktion? Die den Status dann wirklich in der DB ändert?!

 
tontechniker
18-09-2007, 18:19 
 
Wenn du false zurückgibst sollte der alte Wert wiederhergestellt werden. Ansonsten gibst du true zurück und sendest das Formular nach allen Änderungen wieder ab (ein einfaches return confirm ( ... ) reicht eigentlich schon).

 
arkos
19-09-2007, 10:08 
 
Original geschrieben von Revolverheld
<script type="text/javascript">
function Box(status) {
var answer = confirm("Sind Sie sich sicher, dass Sie den Status auf " + status + " ändern möchten?");
if (answer)
HIER MUSS WAS HIN
else
location.reload()
}
</script>


allerdings hast du in der lösung nun nicht den aktuellen status beachtet. siehst du davon nun ganz ab?

 
ZombieChe
19-09-2007, 10:30 
 
Wieso das ganze mit einem hidden Field lösen? Einfacher geht es doch, wenn der Funktion 2 Parameter übergeben werden.

function Box(status,oldStatus) {
var answer = confirm("Sind Sie sich sicher, dass Sie den Status von "+oldStatus+" auf " + status + " ändern möchten?");
if (answer) {
document.getElementById('Formularname').submit(); //Hier wird das Formular abgeschickt
return true; //Der Vollständigkeit halber :-)
}
else {
return false;
}

Den ersten kann er dann mit php direkt reinschreiben...wieso kompliziert....

Der Ablauf ist dann wie folgt:
Der Benutzer ändert einen Wert
1. Wird bestätigt
- Formular wird mit dem neuen Wert abgeschickt und kann dann mit deiner PHP UPDATE Funktion ausgewertet werden
- Seite wird mit den neuen Werten geladen, da der neue Wert nun in der DB steht
2. Wird nicht bestätigt
- formular wird nicht abgesendet
- Wert wird nicht geändert, da return false...(s. tontechnikers Beitrag)

Es bleibt jetzt dir überlassen, ob du für jedes Select ein eigenes Formular machst, oder ob du ein Formular für alle Selects machst...
letzterer Fall wäre etwas redundant, da alle Selects bearbeitet werden, im ersten Fall müsstest du halt die Id übergeben, die geändert werden muss.

Der Aufruf der JavaScript Funktion erfolgt in jedem Fall über:

<?php
//...
echo '<select onchange="return Box(this.value,\''.$db->line['status'].'\')">';
//...
?>

 
arkos
19-09-2007, 11:41 
 
du hast vollkommen recht. auf die einfache lösung, den istzustand gleich in den js-aufruf zu schreiben bin ich zu diesem zeitpunkt gar nicht gekommen... tze :rolleyes:

 
Revolverheld
19-09-2007, 12:06 
 
Super ich habe es nun ergänzt.
Mein Problem ist nun bei dem Formular, wie überge ich erstens den Wert Status und zweitens wie ordne ich es nun wieder dem Artikel zu? Wenn ich ein globales Formular habe in der ich das update vornehme?

document.getElementById('Formularname').submit(HIER DIE WERTE REIN ID & STATUS);

Wenn es fertig ist stelle ich das Script dann online (also zum downloaden) (=

 
arkos
19-09-2007, 13:15 
 
mal ehrlich. hier wurden dir nun ziemlich gute hilfen gegeben. es wäre nun schön, wenn du dir das, was dir hier geliefert wurde, solange anschaust und nachvollziehst, bis du es verstehst.

wenn du es verstanden hast, wird dein jetziges problem keins mehr sein.

das is nicht bös gemeint, aber meiner meinung nach bringt es dir auch nichts, wenn wir dir hier alles "fertigschreiben"...

 
ZombieChe
20-09-2007, 10:02 
 
So...ich werd mal ein paar Links posten, die dir hoffentlich helfen, das ganze abzuschließen...

Schau nach, wieso dein PseudoCode nicht funktionieren kann:
JavaScript submit() Funktion (http://de.selfhtml.org/javascript/objekte/forms.htm#submit)

Mach dich damit vertraut, wie Formulardaten - insbesondere Auswahllisten - übertragen werden:
Formularverarbeitung (http://tut.php-quake.net/formulare.html)

Wenn du dein Formular erst einmal soweit hast, dass es sich absendet, gib dir z.B. über var_dump($_POST) die übermittelten Daten aus, um zu sehen, wie du damit umgehen kannst.

Ich empfehle dir bei einem "globalen" Formular, allen Selects den selben Namen als Array mit der ID als Index zu geben. z.B.

<?php
//...
echo '<select name="Auswahl['.$db->line->id.']" ...>';
//...
?>


Mit den Links und Tips sollte es lösbar sein. Falls nicht, wird deine nächste Frage sicher konkreter ausfallen und nicht mehr darauf abzielen, fertigen Code serviert zu bekommen...
Das Forum sollte wirklich nur die Fragen klären, die nicht in angemessener Zeit über Goggle und Manual zu klären sind...

 
Revolverheld
25-09-2007, 17:22 
 
So ich habe nun wieder weiterversucht das ganze hinzubekommen, bisher erfolgslos!

Es hapert noch erheblich bei der übergabe der Werte in onchange

'<select id="'.$selcounter.'" onchange="return Box(this.value,'.$line->status.')">';

Wenn ich nur this-value übergebe dann gehts, aber das ist ja nicht mein Ziel!
'<select id="'.$selcounter.'" onchange="return Box(this.value)">';

Auch mit dem Formular bin ich noch nicht wirklich weitergekommmen. Da ich bis jetzt noch nicht geschafft habe von JS-Teil die Werte weiter zu bekommen. Klar ist eine fertige Lösung nicht immer da richtige, aber ich komm hier einfach weiter und brauch einfach mal was woran ich mich orientieren kann.

 
arkos
26-09-2007, 10:52 
 
Original geschrieben von Revolverheld


'<select id="'.$selcounter.'" onchange="return Box(this.value,'.$line->status.')">';

Wenn ich nur this-value übergebe dann gehts, aber das ist ja nicht mein Ziel!
'<select id="'.$selcounter.'" onchange="return Box(this.value)">';
[/B]


was geht nicht??? ordentliche fehlerbeschreibungen sind das a und o...
hab nämlich heute frei, und glaskugel und kartenlege-set hab ich in deer firma ;)

 
ZombieChe
26-09-2007, 12:00 
 
Du musst bei der JavaScript Variablenübergabe Strings ebenfalls als solche maskieren:

'<select id="'.$selcounter.'" onchange="return Box(this.value,\''.$line->status.'\')">';

sonst würde er eine Variable annehmen, die es nicht gibt...

btw.: Schau bitte immer erst in die JavaScript Fehler-Konsole und gib den Inhalt als Fehlerbeschreibung an. Wenn nichts drin steht, darfst du das natürlich auch mitteilen...das erleichtert hier allen die Arbeit und spart Zeit.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:00 Uhr.