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

php και html form με PHP_SELF


nicker

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

Δημοσ.

Καλησπέρα. Προσπαθώ να κάνω ένα online address book σε php για εκπαιδευτικούς λόγους κυρίως.

Έχω κολλήσει στο σημείο που σε ένα αρχείο addContact.php προσπαθώ να εισάγω από μια φόρμα τα στοιχεία μια επαφής και να τα περάσω στην βάση δεδομένων χωρίς να αλλάξω σελίδα. Τι εννοώ:

 

>
<?php
   include 'header.php';
 ?>

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
 
<table>
<tr>
 <td>Name:</td>
 <td><input type="text" name="Surname" /></td>
</tr> 
<tr>
 <td>E-mail:</td>
 <td><input type="text" name="E-mail" /></td>
</tr> 
<tr>
 <td>Tel:</td>
 <td><input type="text" name="Tel" /></td>
</tr>
<tr>
 <td>Address:</td>
 <td><input type="text" name="Address" /></td>
</tr>
<tr>
 <td>Number:</td>
 <td><input type="text" name="Number" /></td>
</tr>
<tr>
 <td>City:</td>
 <td><input type="text" name="City" /></td>
</tr>
<tr>
 <td>Country:</td>
 <td><input type="text" name="Country" /></td>
</tr>
<tr>
 <td>Postal Code:</td>
 <td><input type="text" name="Postal_Code" /></td>
</tr>
<tr>
 <td>Password:</td>
 <td><input type="password" name="Password" /></td>
</tr>
<tr>
 <td colspan="2" align="center"><input type="submit" name="submit" value="Submit" /></td>
</tr> 

</table>
 
</form> 

<?php
  if(isset($_POST['submit'])
  {
     mysql_query ("INSERT INTO catalog (Surname, E-mail, Tel, Address, Number, City, Country, Postal Code, Password) VALUES ('$Surname', '$E-mail', '$Tel', '$Address', '$Number', '$City', '$Country', '$Postal_Code', '$Password')");
  }

?>

<?php
 include 'footer.php';
 ?>

 

Κάνω χρήση της PHP_SELF γιατί δε θέλω να ανακατευθυνθώ σε άλλη σελίδα αλλά να τρέξει το ερώτημα στην ίδια σελίδα. Προφανώς το λάθος που κάνω είναι στην συνθήκη if και πάνω σε αυτό θα ήθελα τη βοήθεια σας.

Δημοσ.

Προφανώς και δεν ποστάρεις πουθενά τα data που έρχονται από την φόρμα σου.

 

Γενικά, ο πιο απλός τρόπος για να δεις κάτι είναι με το echo.

 

Κάνε echo μέσα στο if Και θα δεις εάν μπαίνεις εκεί.

Κάνε echo το τι query θες να τρέξεις.

Κάνε echo τι ποστάρεις.

 

ΚΑΝΕ echo !!

 

Υ.Γ. μπορείς να γράψεις και

<form name="form1" method="post" action="addContact.php">

για να ποστάρεις ξανά την ίδια σελίδα με τα data

Δημοσ.

 

Υ.Γ. μπορείς να γράψεις και

<form name="form1" method="post" action="addContact.php">

για να ποστάρεις ξανά την ίδια σελίδα με τα data

 

Ναι αλλά επειδή η σελίδα addContact.php χρησιμοποιείται και για να δημιουργήσω την φόρμα και για να δέχομαι τα δεδομένα υποβολής της φόρμας πρέπει με μια συνθήκη if να κάνω 2 μονοπάτια. Αυτό προσπαθώ να κάνω. Με ένα πρόχειρο search σε παρόμοιο θέμα παλιά εδώ στο insomnia βρήκα ένα post του parsifal που λέει ότι χρειάζεται ένα script στην αρχή της σελίδας για να διαχωρίζει τις περιπτώσεις :

 

>if(συνθήκη που ελέγχει αν το script κλήθηκε λόγω POST της φόρμας)
{
   κώδικας που χειρίζεται τα δεδομένα που έγιναν POST
   header("Location: success.php");    // Θα πετύχει μόνο αν στον προηγούμενο κώδικα ΔΕΝ έχεις εντολές που να προκαλούν HTML output
}
else
{
   κώδικας που παράγει τη φόρμα
}

 

όμως αυτή η συνθήκη πρέπει να μπει πριν την ετικέτα html (πριν παραχθεί οτιδήποτε html) ή μετά;

 

Το άλλαξα σύμφωνα με αυτήν την λογική και δεν εμφανίζεται τίποτα :

><?php
   include 'preclude.php'
  if(isset($_POST['submit'] && strlen($_POST['submit']) > 0)
  {
     mysql_query ("INSERT INTO catalog (Surname, E-mail, Tel, Address, Number, City, Country, Postal Code, Password) VALUES ('$Surname', '$E-mail', '$Tel', '$Address', '$Number', '$City', '$Country', '$Postal_Code', '$Password')");
  }


else
{
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="el" lang="el"> 
   <head>
       <title> Online address book! </title>
       <link type="text/css" rel="stylesheet" href="stylesheet.css" />
   </head>
   <body>

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >

<table>
<tr>
 <td>Name:</td>
 <td><input type="text" name="Surname" /></td>
</tr> 
<tr>
 <td>E-mail:</td>
 <td><input type="text" name="E-mail" /></td>
</tr> 
<tr>
 <td>Tel:</td>
 <td><input type="text" name="Tel" /></td>
</tr>
<tr>
 <td>Address:</td>
 <td><input type="text" name="Address" /></td>
</tr>
<tr>
 <td>Number:</td>
 <td><input type="text" name="Number" /></td>
</tr>
<tr>
 <td>City:</td>
 <td><input type="text" name="City" /></td>
</tr>
<tr>
 <td>Country:</td>
 <td><input type="text" name="Country" /></td>
</tr>
<tr>
 <td>Postal Code:</td>
 <td><input type="text" name="Postal_Code" /></td>
</tr>
<tr>
 <td>Password:</td>
 <td><input type="password" name="Password" /></td>
</tr>
<tr>
 <td colspan="2" align="center"><input type="submit" name="submit" value="Submit" /></td>
</tr> 

</table>
 
</form> 
  </body>
</html>
<?php
}
 ?>

Δημοσ.

Ναι αλλά επειδή η σελίδα addContact.php χρησιμοποιείται και για να δημιουργήσω την φόρμα και για να δέχομαι τα δεδομένα υποβολής της φόρμας πρέπει με μια συνθήκη if να κάνω 2 μονοπάτια. Αυτό προσπαθώ να κάνω. Με ένα πρόχειρο search σε παρόμοιο θέμα παλιά εδώ στο insomnia βρήκα ένα post του parsifal που λέει ότι χρειάζεται ένα script στην αρχή της σελίδας για να διαχωρίζει τις περιπτώσεις :

 

όμως αυτή η συνθήκη πρέπει να μπει πριν την ετικέτα html (πριν παραχθεί οτιδήποτε html) ή μετά;

Μη μπερδεύεσαι, αυτή η λογική ισχύει όταν θέλεις να ανακατευθύνεις τον client σε άλλη σελίδα (στο παράδειγμα πιο πάνω, στο success.php) με την εντολή header.

 

 

Στην περίπτωσή σου, είναι πιο απλά τα πράγματα:

><?php
   include 'preclude.php'
   if(isset($_POST['submit'])
   {
       $Surname = $_POST['Surname'];
       $E-mail = $_POST['E-mail'];
       $Tel = $_POST['Tel'];
       $Address = $_POST['Address'];
       $City = $_POST['City'];
       $Country = $_POST['Country'];
       $Postal_Code = $_POST['Postal_Code'];
       $Password = $_POST['Password'];
       // Εδώ κανονικά θα πρέπει να γίνει κι ένα validation
       mysql_query("INSERT INTO catalog(Surname, E-mail, Tel, Address, Number, City, Country, Postal Code, Password) VALUES ('$Surname', '$E-mail', '$Tel', '$Address', '$Number', '$City', '$Country', '$Postal_Code', '$Password')");
   }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="el" lang="el">
   ...
   ...
</html>

 

 

Και πρόσεξε λίγο τα ονόματα των μεταβλητών σου. Αν θυμάμαι καλά, η χρήση του χαρακτήρα παύλα '-' σε PHP μεταβλητές δεν είναι έγκυρη...

Δημοσ.

Μη μπερδεύεσαι, αυτή η λογική ισχύει όταν θέλεις να ανακατευθύνεις τον client σε άλλη σελίδα (στο παράδειγμα πιο πάνω, στο success.php) με την εντολή header.

 

Και πρόσεξε λίγο τα ονόματα των μεταβλητών σου. Αν θυμάμαι καλά, η χρήση του χαρακτήρα παύλα '-' σε PHP μεταβλητές δεν είναι έγκυρη...

 

Το έκανα έτσι ακριβώς όπως το είπες και διόρθωσα και τις μεταβλητές. Δεν εμφανίζεται τίποτα. Αν όμως σβήσω το php κομμάτι με τον έλεγχο η φόρμα εμφανίζεται κανονικά. Επομένως κάτι γίνεται μέσα στην if. Γιατί έβαλα και ένα μήνυμα με echo και δεν εμφανίζεται ούτε αυτό. Επομένως δεν "τρέχει" η συνθήκη καθόλου.

 

><?php
  
  include 'preclude.php'
  if(isset($_POST['submit'] )
  {
     $Surname = $_POST['Surname'] 
     $Email = $_POST['Email']
     $Tel = $_POST['Tel']
     $Address = $_POST['Address']
     $Number = $_POST['Number']
     $City = $_POST['City']
     $Country = $_POST['Country']
     $Postal_code = $_POST['Postal_code']
     $Password = $_POST['Password']
     mysql_query ("INSERT INTO catalog (Surname, Email, Tel, Address, Number, City, Country, Postal_code, Password) VALUES ('$Surname', '$Email', '$Tel', '$Address', '$Number', '$City', '$Country', '$Postal_code', '$Password')");
echo "Your data have been submited";
  }
  
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="el" lang="el"> 
   <head>
       <title> Online address book! </title>
       <link type="text/css" rel="stylesheet" href="stylesheet.css" />
   </head>
   <body>

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >

<table>
<tr>
 <td>Name:</td>
 <td><input type="text" name="Surname" /></td>
</tr> 
<tr>
 <td>E-mail:</td>
 <td><input type="text" name="Email" /></td>
</tr> 
<tr>
 <td>Tel:</td>
 <td><input type="text" name="Tel" /></td>
</tr>
<tr>
 <td>Address:</td>
 <td><input type="text" name="Address" /></td>
</tr>
<tr>
 <td>Number:</td>
 <td><input type="text" name="Number" /></td>
</tr>
<tr>
 <td>City:</td>
 <td><input type="text" name="City" /></td>
</tr>
<tr>
 <td>Country:</td>
 <td><input type="text" name="Country" /></td>
</tr>
<tr>
 <td>Postal Code:</td>
 <td><input type="text" name="Postal_code" /></td>
</tr>
<tr>
 <td>Password:</td>
 <td><input type="password" name="Password" /></td>
</tr>
<tr>
 <td colspan="2" align="center"><input type="submit" name="submit" value="Submit" /></td>
</tr> 

</table>
 
</form> 
  </body>
</html>

Δημοσ.

Αν δεν το κάνεις ήδη, σου προτείνω να χρησιμοποιείς έναν code editor που να διαθέτει syntax highlighting και brace/bracket/parenthesis matching, θα γλυτώσεις πολλά τέτοια λαθάκια στο μέλλον. Σε Windows π.χ., αρκετά καλός είναι ο Notepad++ editor, τον οποίον και χρησιμοποιώ.

Δημοσ.

Αν δεν το κάνεις ήδη, σου προτείνω να χρησιμοποιείς έναν code editor που να διαθέτει syntax highlighting και brace/bracket/parenthesis matching, θα γλυτώσεις πολλά τέτοια λαθάκια στο μέλλον. Σε Windows π.χ., αρκετά καλός είναι ο Notepad++ editor, τον οποίον και χρησιμοποιώ.

 

Ευχαριστώ για την επισήμανση. Συνήθως χρησιμοποιώ άλλα τώρα τελευταία ανακάλυψα μια online υπηρεσία που γράφω κώδικα, έχω phpmyadmin, σετάρω βάσεις κτλ και με βόλεψε πολύ. έχει highlighting αλλά μπερδεύτηκα λίγο. Η υπηρεσία είναι το http://www.kodingen.com για οποιον θέλει να το ελέγξει.

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

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

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