Katman21 Δημοσ. 3 Νοεμβρίου 2013 Δημοσ. 3 Νοεμβρίου 2013 Γεια σας,Προσπαθώ εδώ και ώρες να καταλάβω που βρίσκετε το πρόβλημα και δεν τα έχω καταφέρει ακόμα δυστυχώς..Όταν γίνετε διόρθωση αποθηκεύονται όλα τα στοιχεια μαζί και εικόνα όταν όμως ξαναπάω για να κάνω διόρθωση και διορθώσω μονο τον τίτλο και όχι την εικόνα τότε η εικόνα εξαφανίζεται τελείως από την καταχώρηση αλλα υπάρχει η εικόνα ακόμη στο φάκελο upload και επίσης φαίνεται μέσα από τον πηγαίο κώδικα που δηλώνω το value. Μήπως γνωρίζουμε τι ακριβώς γίνετε?Ευχαριστώ! PHP CODE: <?php $id =$_REQUEST['id']; $result = mysql_query("SELECT * FROM articles WHERE id = '$id'"); $test = mysql_fetch_array($result); if (!$result) { die("Error: Data not found.."); } $id=$test['id'] ; $title= $test['title'] ; $image= $test['image'] ; if(isset($_POST['save'])) { $id = $_POST['id']; $title = $_POST['title']; $image=$_FILES['image']['tmp_name']; $image= basename(($_FILES['image']['name'])); move_uploaded_file($_FILES["image"]["tmp_name"],"../upload" . $_FILES["image"]["name"]); $target="../upload" . $_FILES["image"]["name"]; mysql_query("UPDATE articles SET title ='$title', image ='$image', WHERE id = '$id'") or die(mysql_error()); echo "Saved!"; header("Location: listarticles.php"); } ?> HTML CODE: <form method="POST" enctype="multipart/form-data"> <input type="hidden" name="id" value="<?php echo $id ?>"/> Title: <input type="text" name="title" id="title" value="<?php echo $title ?>"> Image: <input type="file" name="image" id="image" value="<?php echo $image ?>"> <button type="submit" name="save" >Save</button> </form>
bnvdarklord Δημοσ. 4 Νοεμβρίου 2013 Δημοσ. 4 Νοεμβρίου 2013 Δεν ξερω php, αλλα αν δεν βαλεις εικονα, το image select input δινει στο post ενα κενό string, οπότε κανεις insert αυτό. Ενα if σε περιπτωση που ειναι κενο και αναλογη αλλαγή του sql statement λογικα αρκούν.
Moderators Praetorian Δημοσ. 4 Νοεμβρίου 2013 Moderators Δημοσ. 4 Νοεμβρίου 2013 Στο input file upload element για λόγους ασφαλείας δεν μπορείς να ενημερώσεις/να θέσεις εσύ server-side, την τιμή του (value). Οπότε ξέχνα το να κρατάς την τιμή του μεταξύ POST. Εγώ θα πρότεινα να κάνεις κάτι αντίστοιχο με το upload new avatar που έχουν τα forum. Δείξε σε ένα thumbnail ή με ένα http link δίπλα στο uplload πεδίο, την εικόνα που ήδη υπάρχει στη βάση (αν υπάρχει), και ενημέρωσε την εικόνα μόνο αν έχει μπει κάποιο νέο αρχείο για upload explicitly από τον χρήστη.
defacer Δημοσ. 4 Νοεμβρίου 2013 Δημοσ. 4 Νοεμβρίου 2013 Πολλά, πάρα πολλά λάθος πράγματα σ' αυτό το script: 1. Σταμάτα να χρησιμοποιείς το mysql_ extension. 2. Υπάρχει δυνατότητα "να σε χακέψουν" με SQL injection αν δε λάβεις τα μέτρα σου. Συγκεκριμένα μπορεί να σου το κάνει και πρόγραμμα αυτό, δε χρειάζεται καν να ασχοληθεί άνθρωπος. Fix it. 3. Κατά τη διάρκεια του development, error_reporting στο τέρμα και display_errors on. To script σου κάνει πράγματα που δεν έχουν νόημα (π.χ. παίρνει τιμές μεταβλητών που ενδεχομένως δεν υπάρχουν) και είτε δεν τα βλέπεις είτε τα βλέπεις αλλά δε μας τα αναφέρεις. Και στις 2 περιπτώσεις κακώς. 4. Καθάρισέ το λίγο. Δεν είναι προφανές ότι αυτό δεν έχει κανένα νόημα; $image=$_FILES['image']['tmp_name']; $image= basename(($_FILES['image']['name'])); 5. Όσον αφορά το πρόβλημά σου, όταν δεν επιλέξεις εικόνα για upload τότε μέσα στο $_FILES δεν υπάρχει τίποτα. Επομένως θα πρέπει να προσαρμόσεις το query σου ανάλογα για να μην ενημερώνει την τιμή του αντίστοιχου πεδίου σ' αυτή την περίπτωση.
Katman21 Δημοσ. 4 Νοεμβρίου 2013 Μέλος Δημοσ. 4 Νοεμβρίου 2013 @defacer Δηλαδή τι ακριβώς πρέπει να αλλάξω στο οποιο να μην είναι ευάλωτο προς έναν εξυπνούλη?
vacilis Δημοσ. 4 Νοεμβρίου 2013 Δημοσ. 4 Νοεμβρίου 2013 Αρχικά θα σου πρότεινα να χρησιμοποιησεις PDO ή mysqli για την σύνδεση στην βάση δεδομενων, η mysql_ extension.ειναι παλια και πολη ευάλωτη. θα το κοιταξω το υπολοιπο πιο μετα για να σου πω ακριβως που ειναι το προβλημα...
defacer Δημοσ. 5 Νοεμβρίου 2013 Δημοσ. 5 Νοεμβρίου 2013 @defacer Δηλαδή τι ακριβώς πρέπει να αλλάξω στο οποιο να μην είναι ευάλωτο προς έναν εξυπνούλη? Τα links στην προηγούμενη απάντησή μου δεν τα έβαλα για μένα. Τα διάβασες; Έχεις κάποια απορία;
Katman21 Δημοσ. 5 Νοεμβρίου 2013 Μέλος Δημοσ. 5 Νοεμβρίου 2013 Τα links στην προηγούμενη απάντησή μου δεν τα έβαλα για μένα. Τα διάβασες; Έχεις κάποια απορία; Τα διάβασα αλλα αν κατάλαβα καλά επειδή λες ότι ο συγκεκριμένος κώδικας είναι ευάλωτος λόγο του mysql_ extension προφανώς όπως λέει και ο φίλος παραπάνω ότι χρειάζομαι mysqli στο οποιο να είναι πιο ασφαλές σωστά?
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα