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

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 και τα εμφανίζει κανονικά(οπότε ίσως να έχεις δίκιο αυτό που λες).

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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