1. #1

    Registered
    01/08/02
    Posts
    134
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2

    thumbnailer bij edit in cms

    Hey iedereen

    Ik zit met een klein probleem i.v.m. de edit-functie in mijn CMS-script.
    Eerste en vooral : ik heb php geleerd door zelf veel uit te vinden, te zoeken, te lezen etc. Mijn manier van werken en schrijven zal dus waarschijnlijk enkele mensen grijs haar bezorgen

    PHP Code:

    /* Edit huidige actie berichten */

    if($action == "edit") {

        
    $resultaat mysql_query("SELECT * FROM ".$table." WHERE ID=".$id."");
            while (
    $row mysql_fetch_object($resultaat)) {
                
    $edit_naam "".$row->auteur."";
                
    $edit_titel_nl "".$row->titel_nl."";
                
    $edit_datum "".$row->datum."";
                
    $edit_bericht_nl "".$row->bericht_nl."";
                
    $edit_status "".$row->status."";    
                
    $edit_img_omschrijving "".$row->fotoalt."";
                
    $edit_foto "".$row->foto."";
                            
            }


        if(
    $_SERVER["REQUEST_METHOD"] == 'POST') {
            
            
            
    /* Variables voor textarea en textfields */
            
            
    $titel_nl escape_quotes($_POST['titel_nl']);    
            
    $auteur $_SESSION['s_gebruiker'];    
            
    $datum escape_quotes($_POST['datum']);    
            
    $bericht_nl escape_quotes($_POST['bericht_nl']);
            
    $status $_POST['status'];
            
    $img_omschrijving escape_quotes($_POST['img_omschrijving']);
            
            
    /* Variables voor file upload */
            
            
    $bestand_naam $_FILES['bestandsnaam']['name']; 
            
    $bestand_grootte $_FILES['betandsnaam']['size'];
            
    $bestand_temp $_FILES['bestandsnaam']['tmp_name'];
            
    $bestand_type strrchr($bestand_naam,'.');
            
    $extensie strtolower($bestand_type);
                
            
    $map "uploads/acties/";
            
    $thumbm "thumbs/";
            
    $doelmap $map.basename$_FILES['bestandsnaam']['name']); 
            
    $thumbmap $map.$thumbm.basename$_FILES['bestandsnaam']['name']); 
            
    $max_grootte 2097152
            
    $toegestane_bestandsextensies = array('.jpg','.jpeg','.gif','.png','.PNG','.JPEG','.GIF',);
            
            
    $th_breedte  =         200
            
    $th_hoogte     =         200
            
    $thumb_extensies = array(".jpg",".png",".jpeg",".bmp");
            
    $kwaliteit 75
            
            
    /* Errors voor textarea en textfields */
            
            
    if(empty($titel_nl)) { $error "<p class=\"warning\">Gelieve een juiste titel voor dit bericht in te geven.</p>"; }
            if(empty(
    $datum)) { $error .= "<p class=\"warning\">Gelieve een datum voor dit bericht te kiezen.</p>"; }
            if(empty(
    $bericht_nl)) { $error .= "<p class=\"warning\">Gelieve de inhoud voor dit bericht in te geven.</p>"; }
            if(!isset(
    $status)) { $error .= "<p class=\"warning\">Gelieve aan te duiden of dit bericht een kladversie is of het gepubliceerd mag worden.</p>"; }                


                    
            if(empty(
    $error)) {
                
                if(empty(
    $bestand_naam)) {
                
                    
    $sql mysql_query("UPDATE ".$table." SET titel_nl ='".$titel_nl."', auteur ='".$auteur."', datum ='".$datum."', bericht_nl ='".$bericht_nl."', status='".$status."', fotoalt='".$img_omschrijving."' WHERE ID='".$id."'") or die(mysql_error());
                    
                    
    $error "<p class=\"berichtOK\">Uw actie werd aangepast.</p>";
                    
    header("Location: index.php?page=".$page."&sub=".$sub."");
                
                }else{
                
                    
    thumbnailer($bestand_temp$extensie$th_breedte$th_hoogte$thumbmap$kwaliteit$thumb_extensies);
                
                    
    $image_location "uploads/acties/";
                    
    $thumbs_location "uploads/acties/thumbs/";
                            
                    
    // $name = $row->naam;
                    
    $thumb_name $edit_foto;
                            
                    
    // $deldoel = realpath ("".$images_location.$name."");
                    
    $deldoel_thumb realpath ("".$thumbs_location.$thumb_name."");
                            
                    
    // if (file_exists($deldoel)) unlink($deldoel);
                    
    if (file_exists($deldoel_thumb)) unlink($deldoel_thumb);                        
                    
                    
                    
    $sql mysql_query("UPDATE ".$table." SET titel_nl ='".$titel_nl."', auteur ='".$auteur."', datum ='".$datum."', bericht_nl ='".$bericht_nl."', status='".$status."', fotoalt='".$img_omschrijving."', foto='".$bestand_naam."' WHERE ID='".$id."'") or die("<p class=\"warning\">De gegevens konden niet worden gewijzigd.  Indien dit een blijvend probleem is, neem contact op via bram@bubblefish.be</p>");
                
        
                    
    $error "<p class=\"berichtOK\">Uw actie werd aangepast.</p>";
                    
    header("Location: index.php?page=".$page."&sub=".$sub."");
                    
                }
                
            }
            
        }



    Het probleem :
    Bij het invoeren van een nieuwe actie is het mogelijk om info en een afbeelding in te voegen. Dit lukt allemaal. Als ik echter de ingevoerde info en afbeelding wil wijzigen loopt het script vast bij de thumbnailer functie. Als het input veld voor de afbeelding leeg blijft, geen probleem. Dan blijft gewoon de oude foto. Wordt er een nieuwe foto opgegeven, moet hij dus een thumbnail maken van de nieuwe foto en de oude foto verwijderen. Hij doet alles behalve de thumbnail functie toepassen. Neem ik de functie weg, werkt alles perfect, behalve de herschaling natuurlijk.

    De thumbnailer functie werkt, want ik gebruik ze ook bij het nieuw ingeven van een actie. Kan de plaatst in het script verkeerd zijn?

    Iemand die raad weet?

    Alvast bedankt!
    {Designing your digital home} bubblefish.be {Design and illustration}
    no votes  

  2. #2

    Registered
    01/08/02
    Posts
    134
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2

    opgelost

    Probleem ondertussen opgelost. Met een 'frisse kop' er nog eens op gezocht :
    Er was een conflict tussen 2

    PHP Code:
    if($_SERVER["REQUEST_METHOD"] == 'POST') { 
    eenmaal in mijn edit en eenmaal in mijn gewone upload.

    PHP Code:
    if(!isset($action)) { 
    toegevoegd aan de gewone upload en alles werkt...

    Bedankt aan wie de tijd heeft genomen om de code even te lezen.
    {Designing your digital home} bubblefish.be {Design and illustration}
    no votes  

  3. #3
    Curahee Q's Avatar
    Registered
    07/12/07
    Location
    Hoogstraten
    Posts
    854
    iTrader
    0
    Mentioned
    0 Post(s)
    Ik heb PHP ook geleerd door zelf te doen en te lezen maar toch wil ik dingen aanhalen die in mijn ogen toch ECHT foutief zijn.


    Nummer 1
    Volgende code slaagt echt op niks
    PHP Code:
    $edit_naam "".$row->auteur.""
    Je zegt toch ook niet
    PHP Code:
    $naam "" "little" ""
    Beter is het gebruik van mysql_fetch_assoc() omdat deze sneller is en dus niet mysql_fetch_object(). *_assoc() geeft een array terug dus die code zou worden

    PHP Code:
    $edit_naam $row['auteur']; 

    Nummer 2
    Waarom maak je je variabelen aan in een while-lus? De naam while lus is een lus en zegt dus zelf al dat het een lus is. Bedoelt om meerdere keren doorlopen te worden. Aangezien jij maar 1 resultset terugkrijgt wordt de code als volgt.

    PHP Code:
    $resultaat mysql_query("SELECT * FROM ".$table." WHERE ID=".$id);
    $row mysql_fetch_assoc($resultaat);

    $edit_naam $row['auteur'];
    $edit_titel_nl $row['titel_nl'];
    $edit_datum $row['datum'];
    $edit_bericht_nl $row['bericht_nl'];
    $edit_status $row['status'];
    $edit_img_omschrijving $row_fotoalt;
    $edit_foto $row['foto']; 
    Beter zou ook zijn om hetvolgende te schrijven

    PHP Code:
    <?php
    if($_SERVER["REQUEST_METHOD"] == 'POST') {
        
    $action $_GET['action'];

        if(isset(
    $action) && $action == "edit") {
            
    // al uw code
        
    }
    }
    ?>
    Nummer 3
    Beter is om rond een lap tekst single quotes te gebruiken in plaats van dubbele quotes. Hierbij doel ik bijvoorbeeld op

    PHP Code:
    $error "<p class=\"warning\">Gelieve een juiste titel voor dit bericht in te geven.</p>"
    Als je single quotes gebruikt moet je
    a) Niet escapen
    b) Werkt sneller omdat PHP in single quotes geen variabele omzet naar zijn waarde. Als je hier niet snapt wat ik bedoel en het je echt interesseert vraag je het maar, geen zin om alles uit te typen op dit moment .

    Dus de code wordt bijgevolg

    PHP Code:
    $error '<p class="warning">Gelieve een juiste titel voor dit bericht in te geven.</p>'
    no votes  

  4. #4

    Registered
    01/08/02
    Posts
    134
    iTrader
    0
    Mentioned
    0 Post(s)
    Reputation
    2/2
    Curahee, bedankt voor de reactie en de tips.

    bij nummer 1 :

    Ik heb een lange tijd mysql_fetch_assoc() gebruikt , maar ben dan overgestapt naar mysql_fetch_object() omdat dit gebruikt werd in een cms dat ik toenmalig gebruikte. Maar blijkbaar is mysql_fetch_assoc() toch een betere keuze. Zal ik zeker onthouden voor de toekomst.

    bij nummer 2 :
    De bedoeling is dat ik de waarden uit de db haal. Als ik dit zonder een while lus zou moeten doen, wat moet ik dan wel gebruiken? ( for ? )

    bij nummer 3 :
    volledige akkoord. Ik weet dat dit niet de beste manier , maar dat is zo iets dat blijft plakken . Ik keer altijd terug op deze manier van schrijven. 'Slechte' macht der gewoonte vrees ik...
    {Designing your digital home} bubblefish.be {Design and illustration}
    no votes  

  5. #5
    Curahee Q's Avatar
    Registered
    07/12/07
    Location
    Hoogstraten
    Posts
    854
    iTrader
    0
    Mentioned
    0 Post(s)
    nummer 1
    *_assoc() is inderdaad beter dus gebruik die maar. Als ze het bij een cms gebruiken werk er dan even mee omdat het 'moet' maar meer ook niet.

    nummer 2
    Waarom in godsnaam een lus willen gebruiken? Je haalt toch maar 1 record op dus moet je helemaal GEEN lus gebruiken.

    Dit is dus de correcte code.
    PHP Code:
    $resultaat mysql_query("SELECT * FROM ".$table." WHERE ID=".$id);
    $row mysql_fetch_assoc($resultaat);

    $edit_naam $row['auteur'];
    $edit_titel_nl $row['titel_nl'];
    $edit_datum $row['datum'];
    $edit_bericht_nl $row['bericht_nl'];
    $edit_status $row['status'];
    $edit_img_omschrijving $row_fotoalt;
    $edit_foto $row['foto']; 
    Bij je query kun je nog discussieren. Een * om alles op te halen gebruik je eigenlijk best nooit. Je wilt nooit ALLE data ophalen maar meestal maar enkele kolommen. Gebruik in dat geval geen * maar enkel de kolomnamen die je wilt hebben.
    Je selecteert op id, welke uniek is, maar toch zet ik daar steeds LIMIT 1 achter. Niet echt noodzakelijk maar dan is het voor andere duidelijk waarom je geen while-lus gebruikt omdat er toch maar 1 record is.

    PHP Code:
    $resultaat mysql_query("SELECT * FROM ".$table." WHERE ID=" $id " LIMIT 1"); 
    Komt je id trouwens van een URL? Indien de gebruiker deze kan manipuleren, kijk je deze na of het wel hetgene is wat je wenst door te krijgen? Aangezien het een numiereke waarde is zet je dus ook best

    PHP Code:
    $id $_GET['id'];

    if(!
    ctype_digit($id)) {
           
    $id 1;   // een default waarde

    Enkel nodig indien deze uit een url of dergelijke komt.
    no votes  

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  

Log in

Log in