Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από Akis_gr49 » 19 Μάιος 2008 01:43

Παιδιά καλησπέρα,

Έχω φτιάξει ένα guest book.
Αρχικά θα ήθελα να μου πείτε αν η παρακάτω τεχνική είναι σωστή, δηλαδή όλα σε ένα αρχείο και παίζω με τις if.

Το πρόβλημα όμως είναι ότι με κάθε ανανέωση, αφού πατήσει ο χρήστης submit, ξανα εισάγει τα δεδομένα στην βάση.

Γνωρίζετε τι να κάνω για να το αποτρέπω αυτό;

Ευχαριστώ πολύ παιδιά εκ των προτέρων.

Κώδικας: Επιλογή όλων

<?php 
	include&#40;"connect2db.php"&#41;; 
?>
<div align="center" style="font-weight&#58;bold"><a href="guestbook.php"> Guestbook</a>

<br>
<?php
	if &#40;isset&#40;$_POST&#91;'submit'&#93;&#41;&#41; &#123;
		$datetime=date&#40;"y-m-d h&#58;i&#58;s"&#41;; //date time
		$name = $_POST&#91;'name'&#93;;
		$email = $_POST&#91;'email'&#93;;
		$comment = $_POST&#91;'comment'&#93;;
		$sql="INSERT INTO guestbook &#40;name, email, comment, datetime&#41;VALUES&#40;'$name', '$email', '$comment', '$datetime'&#41;";
		$result=mysql_query&#40;$sql&#41;;
		
&#125;

if&#40;$result&#41;&#123; // an patithike to submit emfanise ta dedomena 
?>
<!--dedomena-->
<?php //dedomena

$sql2="SELECT * FROM guestbook";
$result2=mysql_query&#40;$sql2&#41;;

while&#40;$rows=mysql_fetch_array&#40;$result2&#41;&#41;&#123;
?>


<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td><table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td>ID</td>
<td>&#58;</td>
<td><?php echo $rows&#91;'id'&#93;; ?></td>
</tr>
<tr>
<td width="117">Name</td>
<td width="14">&#58;</td>
<td width="357"><?php echo $rows&#91;'name'&#93;; ?></td>
</tr>
<tr>
<td>Email</td>
<td>&#58;</td>
<td><?php echo $rows&#91;'email'&#93;; ?></td>
</tr>
<tr>
<td valign="top">Comment</td>
<td valign="top">&#58;</td>
<td><?php echo $rows&#91;'comment'&#93;; ?></td>
</tr>
<tr>
<td valign="top">Date/Time </td>
<td valign="top">&#58;</td>
<td><?php echo $rows&#91;'datetime'&#93;; ?></td>
</tr>
</table></td>
</tr>
</table>
<BR>
<?php
&#125; //mysql_close&#40;&#41;;
?>
<!--telos dedomena-->

<?php mysql_close&#40;&#41;; //kleinei i sql pou evale dedomena stin vasi
&#125;

else &#123; //an den patithike to submit ksana vgale tin forma ?> 

<!--forma eisagwgis-->
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form id="form1" name="form1" method="post" action="<? $_SERVER&#91;'PHP_SELF'&#93;; ?>">
<td>
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td width="117">Name</td>
<td width="14">&#58;</td>
<td width="357"><input name="name" type="text" id="name" size="40" /></td>
</tr>
<tr>
<td>Email</td>
<td>&#58;</td>
<td><input name="email" type="text" id="email" size="40" /></td>
</tr>
<tr>
<td valign="top">Comment</td>
<td valign="top">&#58;</td>
<td><textarea name="comment" cols="40" rows="3" id="comment"></textarea></td>
</tr>
<tr>

<td><input type="submit" name="submit" value="submit" />
</td>
</tr>
</table>
</td>
</form>
</tr>
</table>
<table width="400" border="0" align="center" cellpadding="3" cellspacing="0">
<tr></tr>
</table>
<!--telos forma eisagwgis-->


<?php 
	&#125;
?>





Άβαταρ μέλους
chchrist
Δημοσιεύσεις: 924
Εγγραφή: 28 Ιουν 2003 20:25
Επικοινωνία:

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από chchrist » 19 Μάιος 2008 13:08

Κάντο με switch case και αναλόγως κάνε include την φόρμα.

Άβαταρ μέλους
MaZz
Script Master
Δημοσιεύσεις: 345
Εγγραφή: 20 Ιούλ 2005 19:41
Τοποθεσία: Beyond the dark sun
Επικοινωνία:

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από MaZz » 19 Μάιος 2008 23:55

Χρησιμοποίησε ξεχωριστά scripts, άλλο για submit και άλλο για την προβολή των μηνυμάτων.
Δηλαδή με το που κάνει submit ο χρήστης θα κάνεις redirect στο άλλο script.

Το πρόβλημα είναι ότι με την ανανέωση της σελίδας ξαναστέλνει ο browser το post request στον server με αποτέλεσμα να ξαναεισάγάγονται τα δεδομένα στη βάση (είναι δηλαδή σαν να πατάς για δεύτερη φορά submit με τα ίδια δεδομένα που εισήγαγες στη φόρμα). Με τη χρησιμοποίηση δύο ξεχωριστών scripts, όπως προανέφερα, λύνεται αυτό το πρόβλημα.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από Apostolis_38 » 20 Μάιος 2008 13:37

Η μπορείς να πάρεις ένα πεδίο σαν μοναδικό (πιθανώς κάποιο id_number), να το βάζεις να ψάχνει αν η εγγραφή υπάρχει ήδη και ανάλογα να αποτρέπει την διπλή καταχώρηση. Θέλει λίγο κώδικα παραπάνω βέβαια αλλά νομίζω οτι έτσι είναι καλύτερα. Εγώ έτσι φτιάχνω τα script μου για κάθε ενδεχόμενο.

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από Akis_gr49 » 20 Μάιος 2008 13:46

Ναι αλλά αν ξανακάνω refresh δεν θα ξαναπερνάει τα δεδομένα με διαφορετικό id;

Άβαταρ μέλους
MaZz
Script Master
Δημοσιεύσεις: 345
Εγγραφή: 20 Ιούλ 2005 19:41
Τοποθεσία: Beyond the dark sun
Επικοινωνία:

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από MaZz » 20 Μάιος 2008 13:55

Γιατί τώρα τα περνάει με το ίδιο id?
Δείξε μας αν θες τη δομή του πίνακά σου.

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από Akis_gr49 » 20 Μάιος 2008 14:08

MaZz το έχω κάνει έτσι όπως μου το είχες πει πριν, με διαφορετικά scripts, και δουλεύει τέλεια.

Δεν το δοκίμασα έτσι όπως το λέει ο Αποστόλης.

Αυτό που είχα κάνει στην αρχή (βλέπε στην αρχή το script) έκανα μια χαρά το submit, εισάγωντας τα δεδομένα στην βάση, και έπειτα όταν έκανα refresh ξαναπερνούσε τα ίδα δεδομένα αλλά με διαφορετικό id.

Tο πρόβλημα μου, ήταν ότι τα ήθελα να έχω όλα σε ένα αρχείο, και όχι σε edit.php,delete.php,data.php κτλ.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από Apostolis_38 » 20 Μάιος 2008 14:27

Αφού το έλυσες το θέμα όλα εντάξει.
Πάντως (για να το έχεις υπόψη σου για άλλη φορά) θα μπορούσες να επιλέξεις κάποιο πεδίο (π.χ. το name ή κάποιο non auto_increment id), αναλόγως με το ποιό σε βολεύει να κρατήσεις σαν μοναδικό, και να κάνεις τον έλεγχο να δεις αν υπάρχει ήδη.

Akis_gr49
Δημοσιεύσεις: 266
Εγγραφή: 07 Ιουν 2007 13:49

Με κάθε ανανέωση έπειτα από το Submit ξανα εισάγει δεδομένα

Δημοσίευση από Akis_gr49 » 20 Μάιος 2008 14:32

Ευχαριστώ πολύ παιδιά! Να στε καλά!

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες