Προς το περιεχόμενο

php - html form. να μην ανοίγει καινούργια σελίδα


pseudonymos

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους,

 

έχω το αρχείο Site.html και μέσα σε αυτό έχω την εξής φόρμα:

<form method="post" action="HandleForm.php" >

....

....

</fom>

 

Το αρχείο HandleForm.php παίρνει τα δεδομένα απο την φόρμα και τα αποθυκεύει σε μια βάση δεδομένων.

Όταν ο χρήστης παταέι το κουμπί submit και στέλνει τη φόρμα τότε η php ανοίγει καινούγια σελίδα.

 

Πως γίνεται να πατάει ο χρήστης submit και να μένει στην ίδια σελίδα??

Κάτι θα πρέπει να αλλάξω στο πεδίο action="..."?

Δημοσ.

Με βάση αυτά που λες και τη δομή της φόρμας, δεν δικαιολογείται να ανοίγει σε νεα σελίδα. Μήπως συμβαίνει κάτι άλλο; Κάποιο ξεχασμένο javascript; Κάποια παράβλεψη στον κώδικα της html; Κάποια περίεργη ρύθμιση στον browser; Επισης βλέπω οτι έχεις γράψει < / f o m > αντί για < / f o r m >. Μήπως έχεις το ίδιο και στη σελίδα σου και κάποιο javascript κάνεις popup κάποιο παράθυρο; Μήπως το παράθυρο το ανοίγει η HandleForm.php

 

Επίσης κάνε την εξής δοκιμή. Στη φόρμα αντί για action="HandleForm.php" βάλε action="" ώστε να δεις αν το νεο παράθυρο οφείλεται στην φόρμα ή στο HandleForm.php

Δημοσ.

Δοκίμασα να αφήσω το πεδίο κενό και δεν άνοιξε σε καμία σελίδα που σημαίνει οτι δεν πρέπει να έχει να κανει με javascript.

Το είδα το λάθος αλλά στο αρχείο είναι σωστά.

Η καινούργια σελίδα που ανοίγει εχει το όνομα HandleForm.php .

Αυτό που θέλω να κάνω είναι να παραμένει στο Site.html .

Δηλαδή μετά το submition να μην φεύγει απο τη σελίδα που είναι.

Κάπου είδα για μία μεταβλητή $_SERVER["PHP_SELF"] αλλά δεν με βοήθησε και πολύ.

Δημοσ.

Δοκίμασα το να προσθέσω header('Location: ....') αλλά συνέχισε να ανοίγει σε άλλη σελίδα.

Η αλήθεια είναι οτι Ajax δε έχω κοιτάξει ακόμα οπότε δεν ξέρω τι ακριβώς να κάνω. Θα κάτσω να το κοιτάξω.

Οπότε μόνο με Ajax γίνεται??

Υπάρχει μήπως κάποιο καλό tutorial με Ajax για τον σκοπό που το θέλω??

Δημοσ.
Δοκίμασα το να προσθέσω header('Location: ....') αλλά συνέχισε να ανοίγει σε άλλη σελίδα.

Μήπως πριν από την εντολή αυτή, το script έχει παράγει οποιουδήποτε είδους output που στέλνεται στον browser; Αν ναι, τότε είναι δώρον άδωρον γιατί η εντολή αγνοείται και οι headers του output ήταν αυτοί που είχαν οριστεί μέχρι το σημείο που άρχισε να στέλνεται το output αυτό.

 

 

Η αλήθεια είναι οτι Ajax δε έχω κοιτάξει ακόμα οπότε δεν ξέρω τι ακριβώς να κάνω. Θα κάτσω να το κοιτάξω.

Οπότε μόνο με Ajax γίνεται??

Υπάρχει μήπως κάποιο καλό tutorial με Ajax για τον σκοπό που το θέλω??

Υπάρχουν ένα σωρό. Για δες αυτό που χρησιμοποιεί jQuery: http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/

Δημοσ.

Για παράδειγμα στον παρακάτω κώδικα που είναι η θέση για το header("....") ?

Αν γράψω τον κώδικα στο τέλος δεν κάνει τίποτα.

Αφου είπες για το output τον τοποθέτησα στην πρώτη γραμμή και δούλεψε.

 

Αλλά θέλω να ρωτήσω ποια είναι η πιο σωστή θέση? Output παράγει η εντολή echo?

Απλά διάβασα το manual για την header και εξηγούσε για output αλλά δεν κατάλαβα ακριβώς.

 

><?php
$date = $_POST["date"];
$description = $_POST["description"];
$article = $_POST["article"];

$cnx = mysql_connect(localhost,root,root); 
if( !$cnx ) 
{
die('Could not connect: ' . mysql_error()); 
exit();
}

mysql_select_db("roh",$cnx);

mysql_query( "insert into posts (date,description,article) values ('$date','$description','$article')",$cnx);

$result = mysql_query("select * from posts",$cnx);

while( $row = mysql_fetch_array($result) )
{
echo "On:".$row["date"]."<br/>Description:".$row["description"]."<br/>Article:".$row["article"]."<br/>"; 
}
mysql_close();

?>

Δημοσ.

Για παράδειγμα στον παρακάτω κώδικα που είναι η θέση για το header("....") ?

Αν γράψω τον κώδικα στο τέλος δεν κάνει τίποτα.

Αφου είπες για το output τον τοποθέτησα στην πρώτη γραμμή και δούλεψε.

Στο συγκεκριμένο παράδειγμα κώδικα, πουθενά νομίζω! Γιατί χρησιμοποιείς echo και για να την αφαιρέσεις, θα πρέπει να αναδιοργανώσεις τον κώδικα PHP σου για να έχεις το ίδιο αποτέλεσμα.

 

Γενικά, να έχεις υπ' όψιν σου ο,τι η συνύπαρξη στο ίδιο PHP script μίας header εντολής σε μεταγενέστερο σημείο από μία εντολή που παράγει output έχει νόημα μόνο όταν η δεύτερη βρίσκεται μέσα σε κάποιο if block και η πρώτη στο else block της if (υπάρχει μία μικρή εξαίρεση σε αυτό, αλλά ας μη σε μπερδέψω περισσότερο γιατί δεν έχει σχέση με το πρόβλημά σου).

 

 

Output παράγει η εντολή echo?

Μεταξύ άλλων και η echo.

Δημοσ.

Όμως όταν έβαλα την header στην πρώτη γραμμή οι καταχωρήσεις στην mysql γίνονται κανονικά.

Δηλαδή όταν εισάγω στην φόρμα στοιχεία αυτά καταχωρούνται κανονικά.

Βέβαια output στην οθόνη δεν έχω αν εννοείς αυτό. Οπότε το κώδικα για το output τον έγραψα σε ξεχωριστό div στο αρχείο Site.html και τα εμφανίζει κανονικά(οπότε ίσως να έχεις δίκιο αυτό που λες).

Πάντως όπως κατάλαβα ο κώδικας αυτός ( που τον βρήκα σχεδόν έτοιμο ) είναι "εκπαιδευτικού" χαρακτήρα και θα πρέπει να γράψω άλλο αν θέλω να τον αναπτύξω πιο πολύπλοκα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...