[php] IE wil niet "quoten"

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Ibex
  • Registratie: November 2002
  • Nu online

Ibex

^^ met stom.

Topicstarter
Het probleem komt voor bij het maken van een gastenboek met reactiemogelijkheid. De gebruiker heeft de beschikking over 2 velden, een naamveld en een berichtveld. Naast elk reeds geplaatst bericht staat een quote knop. Wanneer de gebruiker daarop klikt, wordt dat bericht gequoted, en in het berichtveld geplaatst.
Nu, dit werkt in Firefox en Opera, maar blijkbaar niet in IE. Waarom is mij een raadsel. De gegenereerde html is xhtml 1.1 strickt, en volgens mij zitten er ook geen fouten in de phpcode. Een vriend van mij die een goede kennis php heeft zag ook niet echt fouten.

Een schaamteloze copieractie van mijn phpcode:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<? 

// het includen van connectie, navigatie, header, ... 
// welkom-tekst.

if ($_GET['type'] == "archief") {
  $archief = true;
} else {
  $archief = false;
}

if (!$archief) {
  // blaattekst dat de bezoeker het arctief kan bezoeken
  // op gastenboek.php?type=archief
}

$naamfout = false;
$berichtfout = false;
$zendfout = false;
if (trim($_POST['naam']) == "") { $naamfout = true; }
if (trim($_POST['bericht']) == "") { $berichtfout = true; }
if (trim($_POST['zend']) == "") { $zendbericht = true; }

if (!$naamfout && !$berichtfout && !$zendfout) {
  $addnaam = trim($_POST['naam']);
  $addbericht = trim($_POST['bericht']);
  $addnaam = filteruser($addnaam);
  $addbericht = filteruser($addbericht, $addnaam);
  $time = date("YmdHis");
  $q = "insert into gastenboek (timestamp, naam, bericht) ".
  "values ('$time', '$addnaam', '$addbericht')";
  $r = mysql_query($q);
}

?>

<form action="/gastenboek.php#formulier" method="post">

<?

$q = "select * from gastenboek order by timestamp desc";
$r = mysql_query($q);

$i = 1;
while ($data = mysql_fetch_row($r)) {
  $sec = substr($data[1], 12, 2);
  $min = substr($data[1], 10, 2);
  $uur = substr($data[1], 8, 2);
  $dag = substr($data[1], 6, 2);
  $maa = substr($data[1], 4, 2);
  $jaa = substr($data[1], 0, 4);
  if ($i > 15 && !$archief) { break; }
  if ($i <= 15 && $archief) {
    $i++;
    continue;
  }
  echo "  <h4 class=\"nodot\"><span class=\"fill\">".$data[2].
       " schreef op $dag/$maa/$jaa om $uur:$min:$sec</span>".
       "<input type=\"image\" name=\"quote\" src=\"/images/quote.gif\" alt".
       "=\"quote\" value=\"".$data[0]."\" /></h4>\n";
  echo "  <div class=\"accent\">\n";
  echo "    ".parse($data[3], 4, $data[2])."\n";
  echo "  </div><div><br /></div>\n\n";
  $i++;
}

$ster = "<span class=\"accent\">*</span>";

if (!$archief) {
  // blaattekst dat de bezoeker het arctief kan bezoeken
  // op gastenboek.php?type=archief
}

if ($naamfout || $berichtfout || $zendfout) {

  $postedbericht = $_POST['bericht'];
  $q = "select * from gastenboek where id='".$_POST['quote']."'";
  $r = mysql_query($q);
  while ($data = mysql_fetch_row($r)) {
    $sec = substr($data[1], 12, 2);
    $min = substr($data[1], 10, 2);
    $uur = substr($data[1], 8, 2);
    $dag = substr($data[1], 6, 2);
    $maa = substr($data[1], 4, 2);
    $jaa = substr($data[1], 0, 4);
    $postedbericht .= "\r\n[quote=".$data[2].$dag/$maa/$jaa".
    "."$uur:$min:$sec]".filterquote($data[3]).
    "[/quote]\r\n";
  }
  if (!$archief) {

?>

<p>
  Hieronder de benodigde velden om het gastenboek te tekenen. Velden met
  een <span class="accent">*</span> moeten worden ingevuld. <a id="formulier"></a>
</p>

  <h4>Voeg toe:</h4>
  <div class="accent">
    <div class="formelement">
      <label for="naam">Naam:</label>
      <input type="text" id="naam" name="naam" value="<? echo $_POST['naam']; ?>" />
      <? if ($naamfout) { echo $ster; } ?>
    </div>
    <div class="formelement">
      <label for="bericht">Bericht:</label>
      <textarea id="bericht" name="bericht" rows="7" cols="40">
      <? echo $postedbericht; ?>
      </textarea> <? if ($berichtfout) { echo $ster; } ?>
    </div>
    <div class="formelement">
      <input type="submit" name="zend" value="zend" class="submit" />
    </div>
  </div>
<?

  }
}

?>
</form>
<?

if ($naamfout || $berichtfout || $zendfout) {
  if (!$archief) {

?>

<p>
  Gastenboek v0.8 [img]"/images/dot.png"[/img]
</p>

<?

  } else {
    // blaattekst dat de terug kan naar de gewone
    // niet-archiefweergave op gastenboek.php
  }
}

?>

      </div>
<?
// include van andere zooi zoals footer
?>

Om eerlijk te zijn, ik zie hier geen fouten in. Misschien weten jullie waarom net IE hiermee niet overweg kan?

Alles staat online op *knip*
Je mag gerust tests doen, ik verwijder die wel achteraf :).

[ Voor 176% gewijzigd door Ibex op 21-06-2004 11:51 ]

Archlinux - Rode gronddingetjes zijn lekker - Komt uit .be


Acties:
  • 0 Henk 'm!

  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 17-09 20:25
zou je volgende keer misschien de breedte van je code in de gaten willen houden?

edit: laat maar

[ Voor 11% gewijzigd door stp_4 op 21-06-2004 10:02 ]

stp - PSN ID: stp_4


Acties:
  • 0 Henk 'm!

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
Waarom ga je voor een serverside oplossing?? Dit kun je toch makkelijk doen met javascript??

HTML:
1
2
3
  <div id="reactie-reactieID">
    je tekst
  </div>

- let op! een ID in html mag niet met een nummertje beginnen


JavaScript:
1
2
3
4
function quote(reactieID){
  var bron = document.getElementById('reactie-'+reactieID).innerHTML;
  document.getElementById('quotearea').value = bron;
}


disclaimer: niet getest

[ Voor 11% gewijzigd door faabman op 21-06-2004 10:08 ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


Acties:
  • 0 Henk 'm!

  • Ibex
  • Registratie: November 2002
  • Nu online

Ibex

^^ met stom.

Topicstarter
faabman schreef op 21 juni 2004 @ 10:06:
Waarom ga je voor een serverside oplossing?? Dit kun je toch makkelijk doen met javascript??

HTML:
1
2
3
  <div id="reactie-reactieID">
    je tekst
  </div>

- let op! een ID in html mag niet met een nummertje beginnen

JavaScript:
1
2
3
4
function quote(reactieID){
  var bron = document.getElementById('reactie-'+reactieID).innerHTML;
  document.getElementById('quotearea').value = bron;
}


disclaimer: niet getest
Dit omdat ik geen javascript wil gebruiken in die zin; het kan altijd uitgeschakeld zijn en niet elke browser heeft javascript e.d. Ik wil het gewoon proberen zonder :).

Archlinux - Rode gronddingetjes zijn lekker - Komt uit .be


Acties:
  • 0 Henk 'm!

  • TafkaT
  • Registratie: Januari 2000
  • Laatst online: 02-08 11:40
de verklaring:
http://groups.google.com/...h=e5f4dc91c1b1eda2&rnum=1

de oplossing (nou ja, workaround/ie-hack)
geef je var mee aan de name= en niet aan de value=

edit: trouwens geen nette oplossing, misschien dat javascript toch fijner is.
Je kan natuurlijk microsoft mailen en vragen of ze zich eens aan de standaarden willen houden.

[ Voor 80% gewijzigd door TafkaT op 21-06-2004 10:38 ]


Acties:
  • 0 Henk 'm!

  • Ibex
  • Registratie: November 2002
  • Nu online

Ibex

^^ met stom.

Topicstarter
TafkaT schreef op 21 juni 2004 @ 10:21:
de oplossing (nou ja, workaround/ie-hack)
geef je var mee aan de name= en niet aan de value=
Stel dat ik alle quote-knoppen een verschillende name meegeef. Hoe kan ik dan onderscheid maken tussen een knop die is ingedrukt, en een knop die niet is ingedrukt?

Archlinux - Rode gronddingetjes zijn lekker - Komt uit .be


Acties:
  • 0 Henk 'm!

  • TafkaT
  • Registratie: Januari 2000
  • Laatst online: 02-08 11:40
via ISSET in een for loopje zou ik zeggen.

heb even geen tijd om het uit te werken, maar misschien later nog ;)

edit:
zoiets?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function quotezoek(){
$max_x = 10;  //aantal items in gastenboek
for ($x = 0; $x < $max_x; $x++) {
        $var = "quote" . $x;
        if (isset($_POST[$var])) {
            $quote = $x;
            }
}
return $quote;}

$quote = quotezoek();
print $quote;

edit2: gedebugged.
lees net dat er zelfs niets geset wordt door ie, dus dit gaat ook niet werken, dan moet het toch anders ben ik bang.
update: werkt inderdaad niet in ie, wel in andere browsers

[ Voor 162% gewijzigd door TafkaT op 21-06-2004 11:53 ]


Acties:
  • 0 Henk 'm!

  • Ibex
  • Registratie: November 2002
  • Nu online

Ibex

^^ met stom.

Topicstarter
TafkaT schreef op 21 juni 2004 @ 11:04:
via ISSET in een for loopje zou ik zeggen.

heb even geen tijd om het uit te werken, maar misschien later nog ;)

edit:
zoiets?
PHP:
1
2
3
4
5
6
7
8
9
10
function quotezoek($x){
$max_x = 200  //aantal items in gastenboek
for ($x = 0; $x < $max_x; $x++) {
        $var = "quote" . $x;
        if (isset($_GET['$var'])
          {
            $quote = $x;
            }
}
return $quote;}

edit2: grote bug verwijderd, vraag me echter nog steeds af of het werkt.

lees net dat er zelfs niets geset wordt door ie, dus dit gaat ook niet werken, dan moet het toch anders ben ik bang.
Inderdaad. Ik was dan van plan om het eventueel met GET's te doen, maar dan verlies ik de waarde die de bezoeker reeds in zijn velden had ingevuld.

Ik heb besloten om gewoon een waarschuwing te zetten dat internet explorer niet correct met input type="image" omgaat. Het is me beu om zoveel te moeten zitten wroeten omdat IE zich niet aan een standaard houdt.

Archlinux - Rode gronddingetjes zijn lekker - Komt uit .be

Pagina: 1