Just nu i M3-nätverket
Gå till innehåll

Varför fungerar inte...


stena

Rekommendera Poster

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]

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

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?

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

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"]);

 

Länk till kommentar
Dela på andra webbplatser

  • 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

 

Länk till kommentar
Dela på andra webbplatser

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.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...