Αποστολή φόρμας

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

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

Απάντηση
kostaspel
Δημοσιεύσεις: 86
Εγγραφή: 04 Μαρ 2008 12:38

Αποστολή φόρμας

Δημοσίευση από kostaspel » 09 Απρ 2011 21:29

Βοήθεια!!!
έχω φτιάξει μία φόρμα που παίρνει κάποια δεδομένα από το χρήστη και όταν την κάνει post θέλω να στέλνει μία φόρμα σε μορφή table που θα παίρνει κάποια δεδομένα από τη βάση.

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

$headers ="MIME-Version: 1.0\n"; 
$headers .="Content-type: text/html; charset=utf-8; \n"; 
$headers .= "From: $email"; 

	mail("$mail", $subject, ("
<table width="400" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td>όνομα</td>
    <td>e-mail</td>
	<td>διεύθυνση</td>
  </tr>
  <? $q = "SELECT COUNT&#40;*&#41; FROM table WHERE cat='$cat' AND send=''";

	$r = mysql_query&#40;$q&#41;;
	list&#40;$num&#41; = mysql_fetch_array&#40;$r, MYSQL_NUM&#41;;
	mysql_free_result&#40;$r&#41;;
	$start = 0;
	while&#40;"$num" > $start&#41;&#123;
	if&#40;"$start" == 0&#41;&#123;
	$limit = 'LIMIT 1';
	&#125;else&#123;
	$limit = 'LIMIT '."$start".',1';
	&#125;
	
	 $sqltable = "select * from table WHERE cat='$cat' AND send='' order by id $limit";
	$rs = mysql_query&#40;$sqltable&#41;;
for&#40;$i=0; $reg = mysql_fetch_assoc&#40;$rs&#41;; $i++&#41; &#123;
$email = "$reg&#91;email&#93;";
$name = "$reg&#91;name&#93;";
&#125;
 $sqltable1 = "select * from  table2 WHERE mail='$email'";
	$rs = mysql_query&#40;$sqltable1&#41;;
for&#40;$i=0; $reg = mysql_fetch_assoc&#40;$rs&#41;; $i++&#41; &#123;
$address = "$reg&#91;address&#93;"; ?>
  <tr>
    <td>$name</td>
    <td>$email</td>
	<td>$address</td>
  </tr>
  <? &#125;
  $start = $start+1;
  &#125; ?>
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
	<td>&nbsp;</td>
  </tr>
</table>
"&#41;, $headers&#41;;
ο κώδικας δεν λειτουργεί έτσι και θέλω τη βοήθεια σας στο πως μπορώ να κάνω αναζήτηση δεδομένων από πίνακα μέσα στη mail;

ευχαριστώ για το χρόνο και τις γνώσεις σας!

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Αποστολή φόρμας

Δημοσίευση από jpk » 10 Απρ 2011 06:08

Ο κώδικας αυτός (ακόμα και με <?php στην αρχή και ?> στο τέλος) δεν θα μπορούσε να λειτουργήσει γιατί έχει συντακτικά λάθη και η PHP δεν μπορεί να τον κάνει parse. Πολύ γρήγορα (αν υποθέσουμε ότι το $headers ="MIME-Version: 1.0\n"; είναι η γραμμή 2).

Γραμμή 7 ξαναχρησιμοποιείς " στο width="400" ενώ ήδη έχεις βρίσκεσαι μέσα σε double quotes. Αν θέλεις να χρησιμοποιήσεις double quotes μέσα σε άλλα βάλε \". Γραμμή 13 , ανοίγεις short tag <? Ενώ βρίσκεσαι ήδη μέσα σε κώδικα PHP (ορίζεις το message στην mail από την γραμμή 6.

Τι editor χρησιμοποιείς; Ειδικά στις μέρες μας δεν υπάρχει λόγος να ανακαλύπτεις την Αμερική μόνος ενώ υπάρχουν πολλοί καλοί editors. To Eclipse Helios for PHP Developers είναι ένας από αυτούς που θα σου κοκκίνιζε τα errors και θα σου έλεγε γιατί.

kostaspel
Δημοσιεύσεις: 86
Εγγραφή: 04 Μαρ 2008 12:38

Αποστολή φόρμας

Δημοσίευση από kostaspel » 10 Απρ 2011 20:51

Εγκατέστησα το eclipse και διόρθωσα τα λάθει που μου επισήμανες, παραθέτω και το κώδικα διορθωμένο.


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

<?php 
$headers ="MIME-Version&#58; 1.0\n"; 
$headers .="Content-type&#58; text/html; charset=utf-8; \n"; 
$headers .= "From&#58; $email"; 

   mail&#40;"$mail", $subject, &#40;" 
<table width='400' border='0' cellspacing='0' cellpadding='0'> 
  <tr> 
    <td>όνομα</td> 
    <td>e-mail</td> 
   <td>διεύθυνση</td> 
  </tr> 
   $q = \"SELECT COUNT&#40;*&#41; FROM table WHERE cat='$cat' AND send=''\"; 

   $r = mysql_query&#40;$q&#41;; 
   list&#40;$num&#41; = mysql_fetch_array&#40;$r, MYSQL_NUM&#41;; 
   mysql_free_result&#40;$r&#41;; 
   $start = 0; 
   while&#40;\"$num\" > $start&#41;&#123; 
   if&#40;\"$start\" == 0&#41;&#123; 
   $limit = 'LIMIT 1'; 
   &#125;else&#123; 
   $limit = 'LIMIT '.\"$start\".',1'; 
   &#125; 
    
    $sqltable = \"select * from table WHERE cat='$cat' AND send='' order by id $limit\"; 
   $rs = mysql_query&#40;$sqltable&#41;; 
for&#40;$i=0; $reg = mysql_fetch_assoc&#40;$rs&#41;; $i++&#41; &#123; 
$email = \"$reg&#91;email&#93;\"; 
$name = \"$reg&#91;name&#93;\"; 
&#125; 
 $sqltable1 = \"select * from  table2 WHERE mail='$email'\"; 
   $rs = mysql_query&#40;$sqltable1&#41;; 
for&#40;$i=0; $reg = mysql_fetch_assoc&#40;$rs&#41;; $i++&#41; &#123; 
$address = \"$reg&#91;address&#93;\"; 
  <tr> 
    <td>$name</td> 
    <td>$email</td> 
   <td>$address</td> 
  </tr> 
   &#125; 
  $start = $start+1; 
  &#125; 
  <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
   <td>&nbsp;</td> 
  </tr> 
</table> 
"&#41;, $headers&#41;; 
  ?>
ούτε τώρα δουλεύει.
Αυτό που θέλω να κάνει είναι να φέρνει όσες έγραφες υπάρχουν στη βάση και να τις εμφανίζει σαν σειρές στον πίνακα.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Αποστολή φόρμας

Δημοσίευση από jpk » 10 Απρ 2011 22:16

Για να μην παρεξηγηθώ αυτό που σου γράφω δεν είναι αυτό που θεωρώ σωστό αλλά ο δικός σου κώδικας συντακτικά διορθωμένος. Επίσης δεν μπορώ να έχω εικόνα για το αν δουλεύει καθώς υπάρχουν αρκετές μεταβλητές που προφανώς τις ορίζεις σε προγενέστερο σημείο.

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

<?php
$headers ="MIME-Version&#58; 1.0\n";
$headers .="Content-type&#58; text/html; charset=utf-8; \n";
$headers .= "From&#58; $email";

$message = "<table width='400' border='0' cellspacing='0' cellpadding='0'>
  <tr>
    <td>όνομα</td>
    <td>e-mail</td>
   <td>διεύθυνση</td>
  </tr>";

$q = "SELECT COUNT&#40;*&#41; FROM table WHERE cat='$cat' AND send=''";
$r = mysql_query&#40;$q&#41;;
list&#40;$num&#41; = mysql_fetch_array&#40;$r, MYSQL_NUM&#41;;
mysql_free_result&#40;$r&#41;;
$start = 0;
while&#40;$num > $start&#41;
&#123;
	if&#40;$start == 0&#41;
	&#123;
		$limit = 'LIMIT 1';
	&#125;
	else
	&#123;
		$limit = 'LIMIT '.$start.',1';
	&#125;

	$sqltable = "select * from table WHERE cat='$cat' AND send='' order by id $limit";
	$rs = mysql_query&#40;$sqltable&#41;;
	for&#40;$i=0; $reg = mysql_fetch_assoc&#40;$rs&#41;; $i++&#41;
	&#123;
		$email = $reg&#91;email&#93;;
		$name = $reg&#91;name&#93;;
	&#125;
	$sqltable1 = "select * from  table2 WHERE mail='$email'";
	$rs = mysql_query&#40;$sqltable1&#41;;
	for&#40;$i=0; $reg = mysql_fetch_assoc&#40;$rs&#41;; $i++&#41;
	&#123;
		$address = $reg&#91;address&#93;;
		$message .= "<tr>
    								<td>$name</td>
    								<td>$email</td>
   									<td>$address</td>
  								 </tr>";
	&#125;
	 
	$start = $start+1;
&#125;

$message .= "<tr>
    					<td>&nbsp;</td>
    					<td>&nbsp;</td>
   						<td>&nbsp;</td>
  					</tr>
					</table>";


mail&#40;$mail, $subject, $message, $headers&#41;;
?>
Τα arrays που χρησημοποιείς π.χ. $reg[address] τί είναι; Έχεις κάνει πουθενά define την address μεταβλητή και έχει γίνει constant;

kostaspel
Δημοσιεύσεις: 86
Εγγραφή: 04 Μαρ 2008 12:38

Αποστολή φόρμας

Δημοσίευση από kostaspel » 10 Απρ 2011 22:31

Με μπέρδεψες..
Γιατί δηλώνεις δύο φορές το $message

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Αποστολή φόρμας

Δημοσίευση από jpk » 11 Απρ 2011 00:43

Μία φορά το δηλώνω $message = (γραμμή 6) μετά απλά του «προσθέτω» (π.χ. γραμμή 41) $message .=

kostaspel
Δημοσιεύσεις: 86
Εγγραφή: 04 Μαρ 2008 12:38

Αποστολή φόρμας

Δημοσίευση από kostaspel » 11 Απρ 2011 19:08

Σε ευχαριστώ πολύ.
Δούλεψε!!

Απάντηση

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

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

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