[PHP5] problem mit for-schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [PHP5] problem mit for-schleife

    Guten tag alle zusammen(kleine anmerkung--> bin php-neuling)

    ich habe mir zum ziel gestzt eine bildgallerie zu schreiben.

    folgender ablauf: mit einem formular möchte ich bereits hochgeladene bilder bearbeit zb. titel, bemerkung ändern oder gegebenfals auch das bild löschen. sämtliche daten sind in einer datenbank abgespeichert und in 11 kategorien aufgeteilt. jede kategroie hat eine separate tabelle.
    ich möchte das ich mehrere bilder zur gleichen zeit verändern oder auch löschen kann. dazu werden die daten per post in einem array verschickt. der teil mit dem updaten funktioniert einwandfrei.

    folgendes problem:das problem liegt im löschenden teil. jedes mal wen ich das formular absende und mehrere bilder löschen möchte(auch wen ich ein bild auf einmal löschen möchte), wird automatisch nur das erste bild gelöst...., so also ob die ifschleife nur 1mal auf true schalten würde.... ich kann es mir nicht erklären, warscheinlich habe ich einfach etwas banales übersehen. naja ich hoffe es findet jemand den bug.

    bedanke mich jez schon im voraus.





    PHP-Code:
    include("connect.php");

    for(
    $i=0;$i<count($_POST["bildid"]);$i++){

    if(
    $_POST['loschen'][$i]){

    $delet="delete from gal_diffus where id='".$_POST['bildid'][$i]."'";
    $delete mysql_db_query("$dbname",$delet);
    if(
    $delete){
    echo
    "bild".$_POST['bildid'][$i]." wurde gel&#xF6;schet<br>";
    }else{
    echo
    "bild".$_POST['bildid'][$i]." wurde nicht gel&#xF6;schet<br>";
    }
    unlink("bilder/original/diffus/".$_POST['bildname'][$i]."");
    unlink("bilder/thumps/diffus/".$_POST['bildnamet'][$i]."");
    }else{

    echo
    "update teil";
    $update="
      update gal_diffus 
    set
      titel     = '"
    .$_POST['titel'][$i]."',
      preis     = '"
    .$_POST['preis'][$i]."',
      bemerkung = '"
    .$_POST['bemerkung'][$i]."',
      verkauft   = '"
    .$_POST['verkauf'][$i]."'
    where
      id        = '"
    .$_POST['bildid'][$i]."'
    "
    ;
    $updatde mysql_db_query("$dbname",$update);

    if(
    $update){
    echo
    "bild".$_POST['bildid'][$i]." wurde geupdatet<br>";
    }else{
    echo
    "bild".$_POST['bildid'][$i]." wurde nicht geupdatet<br>";
    }
    }
    }
    //<--forschleife 




    PHP-Code:
     <form name=\"speichern\" action=\"$_POST[themen]conf.php\" method=\"post\"> \n";
                    
              
    $SQL_Befehl2="select * from gal_$_POST[themen]";
              
    $daten2 mysql_db_query("$dbname",$SQL_Befehl2);
              
              while ( @
    $row mysql_fetch_row $daten2 ) )
                      {   
    $spaltename[]=$row[0];
                            
    $splatenummern++;
                              echo
    "
                                  <td>
                                    <input type=\"hidden\" name=\"bildnamet[]\" value=\"
    $row[11]\">
                                    <input type=\"hidden\" name=\"bildname[]\" value=\"
    $row[1]\">
                                    <input type=\"hidden\" name=\"them[]\" value=\"
    $_POST[themen]\">
                           
                                    <input type=\"hidden\" name=\"bildid[]\" value=\"
    $row[0]\">
                                    <img src=\"bilder/thumps/
    $_POST[themen]/$row[11]\"><br>
                                    <input type=\"checkbox\" name=\"verkauf[]\" value=\"checked\" 
    $row[5]>Verkauft<br> 
                                    <input type=\"checkbox\" name=\"loschen[]\" value=\"true\">L&#xF6;schen<br>
                                    Preis:<br>
                                    <input type=\"text\" name=\"preis[]\" value=\"
    $row[3]\" size=\"13\"><br>
                                    Titel:<br>
                                    <input type=\"text\" name=\"titel[]\" value=\"
    $row[2]\" size=\"13\"><br>
                                    Bemerkung:<br>
                                    <textarea name=\"bemerkung[]\" rows=\"3\" cols=\"10\">
    $row[5]</textarea><br>
                                  </td>\n"
    ;
                                }
                           echo
    "<input type=\"submit\" name=\"speichern\" value=\"&#xC4;nderungen Speichern\">
                        </form> 

  • #2
    also zunächst mal solltest du erst die bilder mit unlink löschen, und danach den eintrag aus der db entfernen. hast du in der schleife mal testausgaben gemacht, z.b.
    PHP-Code:
    echo "bilder/original/diffus/".$_POST['bildname'][$i].'<br>'
    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      also hab jetzt unlink nach oben verschoben.

      ja testausgaben wurden gemacht, erfolgreich, wen man die löschfunktionen kommentiert hatte und zb das bild löschen möchten dan zeigte es ein bild an, aber nicht das richtige... halt einfach immer das was im array an erster stelle stehen würde, obwohl ich eigentlich eins aus der mite ausgewähl hätte...

      könnte es den sein, das es irgent welche problem gibt wen man den wert true in ein array speichern möchte? (kann es mir echt nicht vorstellen)

      PHP-Code:
      echo"<img src=\"bilder/original/diffus/".$_POST['bildname'][$i]."\"><br>"

      Kommentar


      • #4
        Zuerst ein paar Bemerkungen:
        • Wenn du Hilfe willst, musst du deine Code vernünftig einrücken
        • Für jede Kategorie eine eigene Tabelle ist wahrscheinlich überflüssig
        • mysql_db_query() ist veraltet
        • Wozu soll « . ""» gut sein?
        • SELECT * FROM ist nicht das Gelbe vom Ei
        • Ich würde nur einen DELETE-Befehl am Ende absetzten, mit der Syntax
          Code:
          DELETE FROM
          	gal_difus
          WHERE
          	id IN(" . implode(', ', $_POST['loschen']) . ")";
        • [*klugscheiss*]Wie wärs mit geändert statt geupdatet?[/*klugscheiss*]

        All das kann allerdings das Problem nicht lösen. Dazu braucht es noch mehr Testausgaben. Mach mal ein var_dump($_POST) an den Anfang, und schaue, wieviel, bzw. welche Bild-Id's zum Löschen vorgemerkt sind.

        EDIT:
        Ich habe das zweite Script erst jetzt angeschaut.
        PHP-Code:
                                       ' <input type=\"checkbox\" name=\"verkauf[]\" value=\"checked\" $row[5]>Verkauft<br> 
                                        <input type=\"checkbox\" name=\"loschen[]\" value=\"true\">L&#xF6;schen<br>' 
        ist natürlich Quatsch, wenn du nach dieser Auswahl löschen willst, muss das value im loschen-Feld der Bild-Id entsprechen. Und was value im verkauf-Feld sein muss, ist mir unklar, aber sicher nicht 'checked'.

        Zuletzt geändert von H2O; 30.01.2008, 13:17.
        Gruss
        H2O

        Kommentar


        • #5
          tut mir leid für die vielen ungereimtheiten....

          ich benutze sonst nie ein forum.

          also vardump hat folgendes ergeben.

          PHP-Code:
          $_POST[bildid]

          array(
          4) {
            [
          0]=>
            
          string(2"31"
            
          [1]=>
            
          string(2"32"
            
          [2]=>
            
          string(2"33"
            
          [3]=>
            
          string(2"34"
          }


          $_POST[loschen]

          array(
          1) {
            [
          0]=>
            
          string(4"true"
          }



          $_POST[bildname]

          array(
          4) {
            [
          0]=>
            
          string(36"31_Half-Life_Counter-Strike JPEG.jpg"
            
          [1]=>
            
          string(36"32_Half-Life_Counter-Strike JPEG.jpg"
            
          [2]=>
            
          string(44"33_half-life counter-strike   the charge.jpg"
            
          [3]=>
            
          string(33"34_Counter-Strike matrix jump.jpg"


          ok ich denke das ich den fehler gefunde habe... und zwar muss im array "$_POST[loschen]" an den stellen an denen vom formular kein true kommt, auch etwas stehen, sonst wird jo wen ich ein bild lösche automatisch nur das erste gelöst, oder wen ich das zweite und das zweitletzte (wen es jez ca. 10bilder häte) löschen möchte würden nur die ersten 2 bilder gelöst, weil im array ja nur die ersten 2felder belegt würde.


          mh.. aber wie umschiff ich das nur....!?

          Kommentar


          • #6
            Original geschrieben von skyjumper
            und zwar muss im array "$_POST[loschen]" an den stellen an denen vom formular kein true kommt, auch etwas stehen,
            Nein! Wie ich schon geschrieben habe, soll dort nicht true stehen, sondern die Bildnummer. Übermittelt werden dann nur diejenigen Nummern, die ausgewählt wurden
            Gruss
            H2O

            Kommentar


            • #7
              sorry hab nicht gesehen das du dein beitrag editirt hast.

              das checked, benötige ich damit die checkbox im formular selectiert ist.
              PHP-Code:
              <input type=\"checkbox\" name=\"verkauf[]\" value=\"checked\" $row[5]>Verkauft<br> 
              deswegen hab ich auch in dieser checkbox den datenbankwert "$row[5]" geschrieben, da drin wird später mal checked stehen wen es ausgewählt wurde. an einer anderen stelle würde dan eine if abfrage ein entsprechenden text ausgeben. das es verkauft ist.


              ich werds jez mal mit der id übergeben.. ich muss aber deswegen den rest ändern... ich schreib dan wider wen es was neues gibt.

              Kommentar


              • #8
                Original geschrieben von skyjumper

                das checked, benötige ich damit die checkbox im formular selectiert ist.
                ...
                da drin wird später mal checked stehen wen es ausgewählt wurde.
                Das ist natürlich nicht so. Damit das Feld ausgewählt ist, gibt es das Attribut checked. Und der Wert des Feldes wird mit value angegeben. Das sieht dann etwa so aus:
                PHP-Code:
                echo "<input type='checkbox' name='verkauf[]' value='$row[5]' checked='checked' />Verkauft<br /> 
                      <input type='checkbox' name='loschen[]' value='
                $row[0]' />L&ouml;schen<br />"
                Aber das sind eigentlich einfachste HTML-Grundlagen.
                Gruss
                H2O

                Kommentar


                • #9
                  (sorry wegen der langsamen reaktionszeit von mir, bin noch an 2 pc's am installieren.)

                  ok hab jez das geändert das die id des bildes mit $_POST[loschen] übergeben wird.
                  es löst jez zumindest den datenbank eintrag richtig.

                  ich muss jez das nur noch mit dem befehl unlink verknüpfen, aber ich denke das schaff ich auch alleine:-).

                  danke noch für den tip mit "checked".

                  werde es entsprechend anpassen.

                  danke noch für eure hilfe

                  gruss skypii^^

                  Kommentar

                  Lädt...
                  X