php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 9 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 11-02-2012, 18:23
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard Lösch-Buttons

Hallo,

ich habe hier letztens schon etwas gefragt zur Ausgabe meines Datenbankinhaltes bzw. Session Variablen. Nun möchte ich bei meiner
Ausgabe immer einen Lösch-Button hinzufügen, der wenn man auf ihn
klickt immer den dazugehörigen Eintrag in der Datenbank löscht.

Also der Befehl des Löschens an sich ist kein Problem, nur woher weiß
der Button, welchen Eintrag er löschen muss. Ich bin dann auf die Idee
gekommen, man könnte verwenden. Also inkrementiert man beim Auslesen
in der While-Schleife eine Variable (z.B. x), um die Einträge zu zählen.
Diese werden dann als Index verwendet. Dann als Einträge werden die
ids eingefügt.

Nur ein Problem: Auf diese Art braucht man unendlich viele if-Anfragen und
man weiß ja nicht wieviele genau, denn wenn Fragen hinzugefügt bzw.
gelöscht werden müsste man ja immer den Code per Hand ändern,
ist es möglich, diese if-Anfragen auch in Schleifen zu erstellen?

Also nun erstmal zum Code, nur das Auslesen sieht momentan so aus:
PHP-Code:
         if(isset($_POST['fertig3']))
         {
          
$sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

          
$table mysql_query($sql);

          echo 
"<pre>";

          while (
$row mysql_fetch_assoc($table))
          {
            
print_r($row);
            echo 
"";
          }

          echo 
"</pre>";

          
mysql_close($db);
         } 
Wenn man nun die IDs in Arrays speichert sieht es so aus:
PHP-Code:
         if(isset($_POST['fertig3']))
         {
          
$sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
          
$ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

          
$table mysql_query($sql);

          
$iderg mysql_query($ids);

          
$idarray mysql_fetch_row($iderg); //in Array umwandeln

          
echo "<pre>";

          
$zaehler 0;

          while (
$row mysql_fetch_assoc($table))
          {
            
print_r($row);
            echo 
"";
            echo 
"<p><input type='submit' name='fertig3' value='Loeschen' size ='20' /></p>";
            
$zaehler++;
          }

          echo 
"</pre>";

          
mysql_close($db);
         } 
Nun habe ich nurnoch 2 Probleme:

1. Wie gesagt die if-Abfragen, kann man diese auch mit Schleifen lösen?
2. Wie verschickt der Button den Wert? Also wenn ich keinen Denkfehler
mache, muss der Button bzw. es muss ja ein Formular sein die
dazugehörige Zaehler-Variable als Index verschicken.

AUSSER: Mir ist gerade während des Schreibens eine Idee gekommen^^
Wenn man die if-Abfragen so erstellen kann, könnte man ja in diese
über die Schleife schon den Korrekten Wert eintragen.

Also das ist alles ein wenig kompliziert ^^ und ich bin selber auch schon verwirrt xD bin über Hilfe und auch andere Vorschläge dankbar!

Mit freundlichen Grüßen
Mit Zitat antworten
  #2 (permalink)  
Alt 11-02-2012, 18:46
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

Da gibt es zwei Möglichkeiten:

1. für jeden Eintrag in der DB ein Formular mit hidden-Feld und Löschen-Buttton. Im hidden steht dann die ID des Eintrags

2. Ein Formular mit nur einem(!) Löschen-Button und Checkboxen. Die werden dann z.B. so aufgebaut:
HTML-Code:
<input type="checkbox" name="delete[]" value="die_id_des_datensatzes" />
Anschließend hast du alle Lösch-Ids im Array $_POST['delete']. Das musst dann einfach nur in einer Schleife durchlaufen.

Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 11-02-2012, 18:48
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Hier mal ein Beispiel mit ImageButtons, da kannst du dir einen Teil der Auswertung abschauen.
PHP-Code:
<?php
error_reporting
(E_ALL);
ini_set('display_errors'TRUE);
?>
<form action="" method="post">
  <input type="image" name="image[1][]" value="egal" src="btn.jpg" title="ein Button"/>
  <input type="image" name="image[2][]" value="egal" src="btn.jpg" title="ein Button" />
  <input type="image" name="image[3][]" value="egal" src="btn.jpg" title="ein Button" />
  <input type="image" name="image[4][]" value="egal" src="btn.jpg" title="ein Button" />
  <input type="image" name="image[rot][]" value="egal" src="btn.jpg" title="ein Button" />
</form>
<hr>
<h1>Auswertung</h1>
<?php
    
if(!empty($_POST['image']))
    {
      
$Button array_pop(Array_keys($_POST['image']));
      echo 
" Button $Button geklickt <br>";
      echo 
" X POS: {$_POST['image'][$Button][0]} <br>";
      echo 
" Y POS: {$_POST['image'][$Button][1]} <br>";
      if(isset(
$_POST['image'][$Button][2]))
      {
        echo 
"Value: {$_POST['image'][$Button][2]} <br>";
        echo 
"Vorsicht: Inkompatibles FF/Gecko Viech.<br>";
      }
    }else
    {
      echo 
"Kein Image Button geklickt.";
    }
?>
<hr>
<pre>
<h1>Post Daten</h1>
 <?php
    var_dump
($_POST);
 
?>
</pre>
__________________
Wir werden alle sterben
Mit Zitat antworten
  #4 (permalink)  
Alt 12-02-2012, 16:53
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard

Hallo!
Also brauche ich garkeine Arrays, oder?
Ich möchte das gerne mit den Buttons machen. Also bisher sieht das bei mir
so aus:

PHP-Code:
         if(isset($_POST['fertig3']))
         {
          
$sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
          
$ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

          
$table mysql_query($sql);

          
$iderg mysql_query($ids);

          
$idarray mysql_fetch_row($iderg); //in Array umwandeln

          
echo "<pre>";

          
$zaehler 0;

          while (
$row mysql_fetch_assoc($table))
          {
            
print_r($row);
            echo 
"";

            echo 
"<form action='' target='_self' method='post' name='formular_$zaehler' target='_self'>";
            echo 
"<input type='hidden' name='id_$zaehler' value='idarray[$zaehler]'>";
            echo 
"<p><input type='submit' name='fertig_$zaehler' value='Loeschen' size ='20' /></p>";
            echo 
"</form>";

            
$zaehler++;
          }

          echo 
"</pre>"
Das ist erstmal die reine Ausgabe mit den Buttons, dabei habe ich gleich
eine Frage: Ich muss ja die Formulare bennenen, kann ich in diese
Namen die Variablen einfügen, z.B. wie in
name='fertig_$zaehler' ? Denn so hätte ich das jetzt in C/C++ gelöst^^

Es scheint zumindest zu funktionieren, denn einen Error bekomme ich erst
ab Zeile 106:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\Loeschen.php on line 106

Nach dem obrigen Code folgt nämlich sofort meine Erzeugung der if-Abfragen,
wo dieser Error auftritt:
PHP-Code:
          for($x2 = 0; $x2 <= zaehler; $x2++)
          {
            echo "<? <br>";
            echo "
if(isset($_POST['fertig_$x2'])) <br>";
            echo "
{ <br>";
            echo " 
// DELETE FROM WHERE ID = '{$_POST['formular_$x2']}' <br>";
            
echo "}?>";
          }

          
mysql_close($db);
         }
So, woher kommt denn dieser Error? Und würde der Rest eigentlich dann
so funktionieren?

Mit freundlichen Grüßen
Mit Zitat antworten
  #5 (permalink)  
Alt 12-02-2012, 16:58
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Was ist Zeile 105?
Ich sehe weniger als 106 Zeilen.

Dynamisch generierter PHP Code? Wozu? Lass es!
__________________
Wir werden alle sterben
Mit Zitat antworten
  #6 (permalink)  
Alt 12-02-2012, 17:18
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard

Also Zeile 105 ist bei mir
PHP-Code:
echo "if(isset($_POST['fertig_$x2'])) <br>"


Ich brauche den Code, da ich ja so viele Formulare erzeuge,
wie Datensätze in der Datenbank sind und deshalb brauche ich
ja auch genausoviele if-Abfragen, ob der jeweilige
Button gesetzt wurde.


Mit Zitat antworten
  #7 (permalink)  
Alt 12-02-2012, 17:30
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
und deshalb brauche ich
ja auch genausoviele if-Abfragen, ob der jeweilige
Button gesetzt wurde.
Unsinn.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #8 (permalink)  
Alt 12-02-2012, 17:35
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard

Wie soll ich es dann machen?
Wenn ich kein if habe, führt er den Befehl ja sofort aus
und löscht mir jeden Eintrag.
Mit Zitat antworten
  #9 (permalink)  
Alt 12-02-2012, 18:04
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Das ist aber kein Grund für selbstmodifizierenden Code.
Der ist nicht ohne Grund verpönt.

Sowas:
Zitat:
$_POST['fertig_$x2']
Finde ich schon fast ekelig!
Machs dir doch besser mit Arrays.

Tipp:
In meinen Code (der mit den ImageButtons) findest du eine Lösung um heraus zu finden welcher Button gedrückt wurde. Ohne ifs dynamisch zu erstellen
__________________
Wir werden alle sterben

Geändert von combie (12-02-2012 um 18:06 Uhr)
Mit Zitat antworten
  #10 (permalink)  
Alt 12-02-2012, 19:15
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard

Okay, also wenn ich das richtig verstehe, hast du für die Namensgebung
deiner Buttons einen Array vewendet, und schaust in der if-Abfrage,
ob in irgendeinem Element des Arrays etwas drinsteht und wenn ja,
werden die Befehle dort abgearbeitet.

Hast du den Array irgendwo "deklariert", also
PHP-Code:
$image = array(); 
oder so, oder kann man es einfach direkt in das Formular schreiben,
also name='image[][]' ?

Also wenn ich das jetzt auf meinen Code übertrage, komme ich auf folgende
Lösung: Einen Array für die Namen, und als Value übergebe ich den Wert
der im Array aus dem mysql_fetch_row steht.
PHP-Code:
         if(isset($_POST['fertig3']))
         {
          
$sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
          
$ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

          
$table mysql_query($sql);

          
$iderg mysql_query($ids);

          
$idarray mysql_fetch_row($iderg); //in Array umwandeln

          
echo "<pre>";

          
$zaehler 0;

          while (
$row mysql_fetch_assoc($table))
          {
            
print_r($row);
            echo 
"";

            echo 
"<p><input type='submit' name='fertig_[$zaehler]' value='$idarray[$zaehler]' size ='20' title='Loeschen'/></p>";

            
$zaehler++;
          }

          echo 
"</pre>";

          if(!empty(
$_POST['fertig']))
          {
            
$Button array_pop(Array_keys($_POST['fertig']));
            
// DELETE WHERE ID = $Button
            
mysql_close($db);
          }

         } 
Aber was ich noch nicht ganz verstehe, wird bei einem Drücken des Buttons
der Wert in den fertig bzw. in den image Array geschrieben? Denn anders
weiß ich nicht, warum man diesen Array überprüfen sollte. Also wenn
ich zum Beispiel image[1][] drücke und der Wert ist z.B. 500,
sieht dieses Element dann so aus: image[1][500] ?

Mit freundlchen Grüßen
Mit Zitat antworten
  #11 (permalink)  
Alt 12-02-2012, 19:48
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
oder kann man es einfach direkt in das Formular schreiben,
also name='image[][]' ?
Ja!
PHP bastelt dir das dann korrekt in $_POST zusammen.

Bei einfachen SubmitButtons zum löschen mit ID Übergabe sollte das dann so aussehen:
name='delete[436]'
Wobei 436 dann die zu löschende id währe...


Zitat:
Also wenn
ich zum Beispiel image[1][] drücke und der Wert ist z.B. 500,
sieht dieses Element dann so aus: image[1][500] ?
Hmmm....
Nee, das ist ein Sonderfall der Imagebuttons.
PHP erstellt dann automatisch ein Array mit x,y,und evtl. Value
Aber das willst du ja nicht.

Bei Standard Submitbuttons wird das Value als Beschriftung benutzt. Der Weg ist verdorben, da du da bestimmt sowas wie "Löschen" (und nicht "746") sehen möchtest. Darum muss ein Umweg über den Array Key gegangen werden.

Also mein Tipp:
<input type='submit' name='delete[467]' value='löschen' ..........

Auswertung:
PHP-Code:
if(isset($_POST['delete'])&&is_array($_POST['delete']))
{
   
$zulöschendeid array_pop(array_keys($_POST['delete']));
    
// lösche Datensatz mit ID =  $zulöschendeid

*ungetestet*
__________________
Wir werden alle sterben

Geändert von combie (12-02-2012 um 19:54 Uhr)
Mit Zitat antworten
  #12 (permalink)  
Alt 14-02-2012, 15:52
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

also ich habe das jetzt versucht, nur wenn ich auf den Button drücke
passiert nichts. Ich habe dieses if auf 2 verschiedene Arten probiert.

PHP-Code:
         if(isset($_POST['fertig3']))
         {
          
$sql "SELECT frage, antwort FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";
          
$ids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

          
$table mysql_query($sql);

          
$iderg mysql_query($ids);

          
$idarray mysql_fetch_row($iderg); //in Array umwandeln

          
echo "<pre>";

          
$zaehler 0;

          while (
$row mysql_fetch_assoc($table))
          {
            
print_r($row);
            echo 
"";

            echo 
"<p><input type='submit' name='delete[iderg[$zaehler]]' value='loeschen'/></p>";

            
$zaehler++;
          }

          echo 
"</pre>";
          if(!empty(
$_POST['delete']))
          {
            
$zuloeschendeid array_pop(array_keys($_POST['delete']));
            
$loesch "DELETE * WHERE klassenarbeiten.frahen.frid = $zuloeschendeid";
            echo 
"test";
          }

         } 
die andere Methode:
PHP-Code:
          if(isset($_POST['delete'])&&is_array($_POST['delete']))
          {
            
$zuloeschendeid array_pop(array_keys($_POST['delete']));
            
$loesch "DELETE * WHERE klassenarbeiten.frahen.frid = $zuloeschendeid";
            echo 
"test";
          } 
Also das Problem ist, dass einfach nichts passiert, also wird die Bedingung
nicht erfüllt. Also ich nehme an es liegt an name='delete[iderg[$zaehler]]'

Mit freundlichen Grüßen
Mit Zitat antworten
  #13 (permalink)  
Alt 14-02-2012, 16:21
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Genau, das sieht falsch aus.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #14 (permalink)  
Alt 14-02-2012, 17:19
Fang
 Registrierter Benutzer
Links : Onlinestatus : Fang ist offline
Registriert seit: Feb 2012
Beiträge: 14
Fang befindet sich auf einem aufstrebenden Ast
Standard

Hallo,

leider funktioniert es immernoch nicht richtig, also ich habe einen anderen
Fehler gefunden und zwar wurden die IDs nicht richtig übernommen, das
habe ich jetzt gefixt:

PHP-Code:
$iids "SELECT frid FROM fragen INNER JOIN unterthemen ON unterthemen.utid = fragen.utid WHERE unterthemen.utid = '{$_POST['menu3']}'";

$ids mysql_query($iids);

while (
$zeile mysql_fetch_array($ids))
          {
            
array_push($idarray$zeile['frid']);
            echo 
$zeile['frid'];
            echo 
"<br>";
          } 
Aber kann man name='delete[iderg[$zaehler]]' nicht auf diese Weise schreiben?
Den eigentlich ist es doch so:
Der Zaehler ist ja am Anfang auf 0,
also wird beim 1. Button als name 'delete[Wert aus $idarray[0]]', in diesem
Fall ist dieser Eintrag bzw. die ID 1 'delete[1]' eingetragen, oder nicht?
Und muss man um an den Wert zu kommen nicht ein Formular erzeugen?

Mit freundlichen Grüßen
Mit Zitat antworten
  #15 (permalink)  
Alt 14-02-2012, 18:38
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Variablen beginnen in PHP immer mit einem $
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Lösch-Bestätigung mit confirm() swjaruhl Archiv / Trash 3 05-11-2010 11:34
Problem mit Lösch-Befehl Razen PHP Developer Forum 5 24-02-2010 15:03
brauche ein lösch script grizzlyco Projekthilfe 7 29-07-2009 21:55
lösch option einfügen ATdrag0N PHP Developer Forum 8 23-07-2007 13:33
Lösch Button 5treamphreaker Projekthilfe 10 27-07-2006 07:37

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

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