Just nu i M3-nätverket
Jump to content

Varför fungerar inte...


stena

Recommended Posts

Jag har använt detta PHP-script i åratal för att hämta namn ur MySQL, plötsligt hämtas inga namn, i alla fall skrivs de inte ut på webbsidan. Det går bra att söka direkt i MySQL så det måste vara tolkningen av scriptet som blir fel. Använder MySQL version 4.1.20 och PHP version 4.3.9

 

Inga felmeddelanden dyker upp.

 

Var finns felet tro?

 

<? mysql_connect(localhost, användarnamn, lösenord);

$query = "SELECT namn FROM tabell";

$result = mysql_db_query("databas", $query);

 

while ($r = mysql_fetch_array($result))

{

$namn = $r["namn"];

echo "$namn";

}

mysql_free_result = ($result);

?>

 

Detta script lägger in data i databasen utan vidare:

 

<?

mysql_connect(localhost, användarnamn, lösenord);

mysql_select_db (databas);

$result = mysql_query ("INSERT INTO tabell (namn, adress) VALUES ('$namn', '$adress')

");

?>

 

 

[inlägget ändrat 2009-01-08 09:37:53 av stena]

[inlägget ändrat 2009-01-08 12:38:25 av stena]

Link to comment
Share on other sites

Använder du scripet under samma förutsättningar som de andra gånger som du gjort samma sak?

 

Gör felsökning; vad blir $result? Vad blir $r?

 

Link to comment
Share on other sites

Svårt att säga.

 

Men jag blir väldigt förvirrad när jag läser koden. Vad har du i databesen egentligen Ren text lagrad enligt ISO8859-1 eller nåt? Eller har du färdig HTML-kod i fälten?

 

Det normala är väl att man har ren text i databasen, tex kodad enligt ISO8859-1. Men det en webbläsare vill ha är ju text kodad enligt HTML (som i sin tur ska vara kodad enligt lämplig teckentabell). Alltså du borde verkligen skriva:

echo mysql_real_escape_string($r["namn"]);

eller nåt.

 

Sorry att jag gnäller på detta, som ju inte kanske är vad du frågar om. Men jag har lite svårt att läsa kod som är helt ologisk. Det låter som ren tur om den har fungerat tidigare. Ren tur att ingen hetat tex

<Tage

 

Hur ser HTML-källkoden ut som når webbläsaren?

 

Link to comment
Share on other sites

Oavsett detta ska väl variabeln namn skrivas ut på webbsidan, även om man naturligtvis kan lägga in den i en html-miljö.

 

Ingen som kan hjälpa till med detta, t ex en kodslinga som ekar innehållet i tabellentill en webbsida...? Frågan är alltså varför inte variabeln namn ekas ut som tidigare.

 

Link to comment
Share on other sites

Innehållet ur namnfältet bör skickas till webbläsaren oavsett, ja. Men om innehållet är <Tage så kommer det inte visas något i webbläsaren, då webbläsaren tolkar det som en inledande tagg. Men det borde i så fall synas om du visar html-koden som nått webbläsaren.

 

Link to comment
Share on other sites

Vet om detta kan ha något med saken att göra.

 

Men en skillnad i dina två exempel är ju att du använder mysql_select_db(databas) i det ena och inte i den andra.

 

Jag skulle nog skriva:

mysql_connect(localhost, användarnamn, lösenord);

mysql_select_db (databas);

$query = "SELECT namn FROM tabell";

$result = mysql_query($query);

while ($r = mysql_fetch_array($result))

...

 

Funktionen mysql_db_query rekommenderas inte längre, och kan kanske generera nåt fel?

 

Link to comment
Share on other sites

Bra info om funktionen mysql_db_query, tack.

Bytte ut den funktionen samt bytte echo mot print så löste det sig. Förstår dock inte var du hittar vänsterhaken i ursprungskoden?

 

[inlägget ändrat 2009-01-09 11:02:46 av stena]

Link to comment
Share on other sites

Ok, nej den har inget med PHP-koden att göra. Den var ett exempel på vad som kan ligga i namn-fältet i databasen.

 

Och matar du bara ut saker från databasen rakt ut till webbläsare kan ju den bli väldigt förvirrad när det kommer en person som heter <Tage

 

Tyvärr slarvade jag själv i farten när jag skrev detta. Funktionen mysql_real_escape_string som jag nämnde ska användas när du ska bygga ihop frågor som ska ställas till databasen. Fel av mig.

 

Den funktion jag menade heter htmlspecialchars.

 

Alltså:

 

echo htmlspecialchars($r["namn"]);

 

Link to comment
Share on other sites

  • 1 month later...

Är databasen inställd för svenska tecken ?

samt klarar din PHP svenska tecken ? &auml OSV....

 

kanske i början av PHP skriptet

<?php header("Content-Type: text/html; charset=ISO-8859-1"); ?>

 

eller nått liknande

 

och Db´n instäld med

--default-character-set latin1_swedish_ci

 

Link to comment
Share on other sites

Jag vill bara förtydliga att

<?php header("Content-Type: text/html; charset=ISO-8859-1"); ?>

inte har ett dugg med hur PHP hanterar svenska tecken att göra, vilket man kanske annars lätt kunde tro.

 

Nej den kodraden matar bara ut instruktioner till webläsaren (i http-headern) så att webbläsaren vet enligt vilken teckentabell själva HTML-koden kommer att skickas över.

 

PHP har jag för mig är ganska transparent och hanterar all text som 8-bitars-strömmar. Och skiter med andra ord helt i vad som är inkodat i strängarna och hur.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...