Visa fullständig version : PHP hjälp
johnnytex
2005-02-23, 14:31
Nu är nybörjaren igång igen. Jag har ett litet problem med PHP; del av ett skolarbete. Jag har skapat en tabel i MYSQL för interna meddelande mellan användare på min sida (jag använder sessions). När jag ska skriva ut en användares meddelande får jag detta felmeddelande:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/users/XXX/XXX/XXX/public_html/links/meddelande/meddelande.php on line 21
Såhär ser koden ut:
<?php
session_start();
include("../login/conn.php");
?>
<html>
<head>
<title>xxx</title>
<link rel="stylesheet" href="../../css/stylesheet.css" type="text/css">
</head>
<body>
<table align="center" bgcolor="black" width="100%">
<?php
$sqlkod = "SELECT * FROM meddelande WHERE to='{$_GET['idnr']}' ORDER BY meddelande_id";
$result = mysql_query($sqlkod);
while ($row = mysql_fetch_array($result)) {
$rubrik = $row['rubrik'];
echo "<tr>";
echo "<td>".$rubrik."</td>";
echo "</tr>";
}
echo "</table>";
?>
</body>
</html>
Min tabel heter meddelande och innehåller:
meddelande_id int(11) Nej auto_increment
rubrik varchar(20) Nej
to int(11) Nej 0
from int(11) Nej 0
meddelande varchar(200) Nej
Jag förstår inte vad jag gör för fel. Någon som vill/kan hjälpa mig, snälla :cryout:
daggermoon
2005-02-23, 14:51
$sqlkod = "SELECT * FROM meddelande WHERE to='{$_GET['idnr']}' ORDER BY meddelande_id";
Jag är inte hundra men prova att istället för ovanstående skriva:
$sqlkod = "SELECT * FROM meddelande WHERE to=$_GET['idnr'] ORDER BY meddelande_id";
Gissar att citationstecken och måsvingar gör att den tolkar det som en sträng istf int. Hoppas det hjälper.
johnnytex
2005-02-23, 15:22
Jag är inte hundra men prova att istället för ovanstående skriva:
$sqlkod = "SELECT * FROM meddelande WHERE to=$_GET['idnr'] ORDER BY meddelande_id";
Gissar att citationstecken och måsvingar gör att den tolkar det som en sträng istf int. Hoppas det hjälper.
Om jag tar bort citationstecken och måsvingar blir det Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING. *grr27* Det är så frusterande.
Jag hade skrivit koden såhär
<?php
if (!isset($_GET['idnr']) { die('Du har inte angett ett idnr'); /* För att försäkra sig om att idnr existerar! Gör alla andra echo'n efter detta eftersom att annars så får användaren felmeddelandet mitt i koden och detär ju inte så trevligt ;) */}
$id = intval($_GET['idnr']); /* intval eftersom att det måste vara integer, kan göra en extra koll här så att det inte är noll i värsta fall */
echo("<table>");
$sqlkod = "SELECT * FROM meddelande WHERE to=" . $id . " ORDER BY meddelande_id";
$result = mysql_query($sqlkod, MYSQL_ASSOC);
while ($row = mysql_fetch_array($result)) {
echo("<tr>");
echo("<td>" . $row['rubrik'] . "</td>");
echo("</tr>");
}
echo "</table>";
?>
EDIT: La till MYSQL_ASSOC så snabbare det upp koden lite iaf ;)
Jag kan inte php men rekommendera att inte använda to och from som tabellnamn.
Du skriver:WHERE to='{$_GET['idnr']}' ORDEREn annan variant är:WHERE to=" . $_GET['idnr'] . " ORDERJag tycker att det känns enklare, men det är bara en smaksak.
Du har ett fel i mysql_fetch_array. Prova att ändra till:
while ($row=mysql_fetch_array($result, MYSQL_ASSOC)) {
Om du inte redan hittat den bästa PHP-sidan, kan du titta in på:
http://www.php.net
Det är PHP:s motsvarighet till Javas API. MYCKET användbar. Om funktionen mysql_fetch_array står att läsa:
http://se.php.net/mysql_fetch_array
JAM => Exakt de ändringarna finns i mitt inlägg ;)
Nalle_Björn
2005-02-23, 21:20
Eller istället för att använda
mysql_fetch_array($result, MYSQL_ASSOC)
använder du
mysql_fetch_assoc($result)
;)
Megatuttarna
2005-02-23, 21:52
c out int flow overburn massattack >><<
Baah jag ger mig. Propz till alla er som har orken att lära er programmera.
JAM => Exakt de ändringarna finns i mitt inlägg ;)
Hmm, orkade inte läsa igenom alla meddelanden ovanför... :em:
Eller istället för att använda
mysql_fetch_array($result, MYSQL_ASSOC)
använder du
mysql_fetch_assoc($result)
;)
Varför? nu får du allt förklara dig. Det går snabbare att köra bara MYSQL_ASSOC eller MYSQL_NUM. De flesta använder bara MYSQL_ASSOC så varför köra båda? Onödigt att plocka ut information man inte behöver. Dessutom saktar det ner scriptet. Kanske inte spelar så stor roll i en databas med 3rader, men kommer du upp ltie så spelar det roll.
mysql_fetch_array
MYSQL_BOTH: 6.01940000057 secs
MYSQL_NUM: 3.22173595428 secs
MYSQL_ASSOC: 3.92950594425 secs
mysql_fetch_row: 2.35096800327 secs
mysql_fetch_assoc: 2.92349803448 secs
Källa: http://se2.php.net/mysql_fetch_array
johnnytex
2005-02-24, 00:04
Oj, vi hade några grymma PHP-knackare här på brädan, nice.
Jag hade skrivit koden såhär
<?php
if (!isset($_GET['idnr']) { die('Du har inte angett ett idnr'); /* För att försäkra sig om att idnr existerar! Gör alla andra echo'n efter detta eftersom att annars så får användaren felmeddelandet mitt i koden och detär ju inte så trevligt ;) */}
$id = intval($_GET['idnr']); /* intval eftersom att det måste vara integer, kan göra en extra koll här så att det inte är noll i värsta fall */
echo("<table>");
$sqlkod = "SELECT * FROM meddelande WHERE to=" . $id . " ORDER BY meddelande_id";
$result = mysql_query($sqlkod, MYSQL_ASSOC);
while ($row = mysql_fetch_array($result)) {
echo("<tr>");
echo("<td>" . $row['rubrik'] . "</td>");
echo("</tr>");
}
echo "</table>";
?>
EDIT: La till MYSQL_ASSOC så snabbare det upp koden lite iaf ;)
Alltså, jag är kanske dum (eller ja jag suger på detta) för jag får inte det att fungera med din kod heller :em:
Har även testat era andra förslag här - men samma fel. Det är inte så att jag kan ha kodat fel någon annanstans? Eller, ja, jag fattar noll. Vill ni försöka igen, skit sjyst av er att hjälpa mig :)
c out int flow overburn massattack >><<
Hahaha! Shit, du det är precis sådär jag känner mig på programmeringslektionerna. ;)
Oj, vi hade några grymma PHP-knackare här på brädan, nice.
Alltså, jag är kanske dum (eller ja jag suger på detta) för jag får inte det att fungera med din kod heller :em:
Har även testat era andra förslag här - men samma fel. Det är inte så att jag kan ha kodat fel någon annanstans? Eller, ja, jag fattar noll. Vill ni försöka igen, skit sjyst av er att hjälpa mig :)
Hahaha! Shit, du det är precis sådär jag känner mig på programmeringslektionerna. ;)
Du får ett fel i mysql_fetch_array(). Vad får du tillbaka från databasen? Svarar den ens? Skriv ut result innan du går in i whileloopen. Kanske är $result==""?
Kan mycket väl vara så att du inte får använda "to" som kolumnnamn (har inte 100-koll vilka man inte får använda. Testa att skriva:
$sqlkod = "SELECT * FROM meddelande WHERE 'to'=" . $id . " ORDER BY meddelande_id";
Men jag tycker nästan du ska döpa om den kolumnen till to_id.
johnnytex
2005-02-24, 11:44
Kan mycket väl vara så att du inte får använda "to" som kolumnnamn (har inte 100-koll vilka man inte får använda. Testa att skriva:
$sqlkod = "SELECT * FROM meddelande WHERE 'to'=" . $id . " ORDER BY meddelande_id";
Men jag tycker nästan du ska döpa om den kolumnen till to_id.
Korrekt! Efter jag döpte om to till till *rolleyes* istället så fugnerade det.
TACK för all hjälp! Jag har slitit hår, slängt disketer, brukat våld mot tagentbord samt avfyrat allmänna svordommar över detta problem. Men nu blev det löst. :) Tack.
johnnytex
2005-02-24, 15:13
Okey. Nu är jag tillbaka igen. Lovar att detta är min sista fråga - på ett tag. Jag försöker skapa så att man kan svara på meddelande man fått. Enligt kod nedan:
<?php
session_start();
include("../login/conn.php");
if (isset($_POST['submit'])) {
$sql = "INSERT INTO `meddelande` ( `rubrik` , `from` , `till` , `message` , `datum`)
VALUES ('', '{$_POST['rubrik']}', '{$_POST['from']}', '{$_POST['till']}', '{$_POST['message']}', NOW());";
mysql_query($sql);
}
?>
<html>
<head>
<title>xxx</title>
<link rel="stylesheet" href="../../css/stylesheet.css" type="text/css">
</head>
<body>
<?php
echo "<table width=\"100%\">";
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
$result = mysql_query($sql);
while( $rad = mysql_fetch_array( $result ) ) {
echo "<tr>";
echo "<td><h3>".$rad['rubrik']."</h3></td>";
echo "<tr>";
echo "<tr>\n";
echo "<td bgcolor=\"black\">".$rad['message']."</td>";
echo "\n</tr>\n";
}
echo "</table>";
?>
<table>
<form action="meddelande skickat.php" method="post">
<?php
echo "<tr>";
echo "<td>Ämne:</td>";
echo "<td><input type=\"text\" name=\"rubrik\" value=\"RE:\" class=\"skugga\"></td><br />";
echo "</tr>";
echo "<input type=\"hidden\" name=\"from\" value=\"".$_SESSION['sess_id']."\">\n";
echo "<input type=\"hidden\" name=\"till\" value=\"".$rad['from']."\">\n";
?>
<tr>
<td>Medelande:</td><td><textarea name="message" cols="15" rows="10" class="skugga"></textarea></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Svara"></td>
</tr>
</form></table>
</body>
</html>
När jag testkör det så lägg inget nytt meddelande till i min tabel meddelande. *screwy* Vill ni proffs kolla det en gång till, snälla.
Ett tips är att i denna sektionen köra ett echo under debug för att se om den if-satsen fungerar och dessutom kanske byta ut isset($_POST['submit']) mot isset($_POST['message']) eftersom att message ändå alltid måste vara skickad. Du är säker på att du har skriv-rättigheter till databsen också va?
<?
if (isset($_POST['message'])) {
// Se om if-satsen körs och vad som finns i post.
echo("<p><pre><b>POST returnerade följande:</b><br />\r\n");
print_r($_POST);
echo("</pre></p>\r\n");
$sql = "INSERT INTO `meddelande` ( `rubrik` , `from` , `till` , `message` , `datum`)
VALUES ('', '{$_POST['rubrik']}', '{$_POST['from']}', '{$_POST['till']}', '{$_POST['message']}', NOW());";
mysql_query($sql);
if (mysql_errno()) {
// Kontrollerar om det har blivit något fel påvägen!
echo("<p>SQL-satsen fungerar inte: " . mysql_error(). "</p>\r\n");
}
}
?>
Du har helt koll på fälten eller?
rubrik = TOM
from = $_POST['rubrik']
till = $_POST['from']
from = $_POST['till']
message = $_POST['message']
datum = NOW()
Såg även att du verkar ha döpt sidan till "meddelande skickat.php". Är det ändrat när du skickade upp den hit. Annars ska du egentligen bara använda A-Z a-z 0-9 och _ i filnamn. Inga mellanslag!
johnnytex
2005-02-24, 16:04
Jepps jag har skrivrättigheter.
Du har helt koll på fälten eller?
rubrik = TOM
from = $_POST['rubrik']
till = $_POST['from']
from = $_POST['till']
message = $_POST['message']
datum = NOW()
Såg även att du verkar ha döpt sidan till "meddelande skickat.php". Är det ändrat när du skickade upp den hit. Annars ska du egentligen bara använda A-Z a-z 0-9 och _ i filnamn. Inga mellanslag!
Vad menar du nu? Är det satt så i koden att fälten blir det du nämnde. Det är ju fel av mig i så fall. Men Hur blir from=$_POST['rubrik'] har jag nite satt den till session_id? Eller?
FEL MED FÄLTNAMN I MIN FÖRRA POST
$sql = "INSERT INTO `meddelande` ( `rubrik` , `from` , `till` , `message` , `datum`)
VALUES ('', '{$_POST['rubrik']}', '{$_POST['from']}', '{$_POST['till']}', '{$_POST['message']}', NOW());";
mysql_query($sql);
Ser felet nu! Du har 5st fältnamn men 6st värden. Gör så här istället:
$sql = "INSERT INTO `meddelande` ( `rubrik` , `from` , `till` , `message` , `datum`)
VALUES ('{$_POST['rubrik']}', '{$_POST['from']}', '{$_POST['till']}', '{$_POST['message']}', NOW());";
rubrik = $_POST['rubrik']
from = $_POST['from']
till = {$_POST['till']}
message = $_POST['message']
datum = NOW()
Ska man verkligen använda ` tecken? Borde det inte vara ' ? Det är ganska stor skillnad på de knappar.
johnnytex
2005-02-24, 16:16
FEL MED FÄLTNAMN I MIN FÖRRA POST
Ser felet nu! Du har 5st fältnamn men 6st värden. Gör så här istället:
$sql = "INSERT INTO `meddelande` ( `rubrik` , `from` , `till` , `message` , `datum`)
VALUES ('{$_POST['rubrik']}', '{$_POST['from']}', '{$_POST['till']}', '{$_POST['message']}', NOW());";
rubrik = $_POST['rubrik']
from = $_POST['from']
till = {$_POST['till']}
message = $_POST['message']
datum = NOW()
Ah!
Du en dum fråga nu kanske, men fortfarande får jag inte in nåt i min tabel i MySQL. Men när jag satt if-satsten där uppe då kolla den väl aldrig om något har blivit submit:et eftersom den redan gått över if satsen där uppe och sedan så efter man tryckt submit så kommer man ju till meddelande_skickat.php. Jag yrar eller?
Ska man verkligen använda ` tecken? Borde det inte vara ' ? Det är ganska stor skillnad på de knappar.
jag vet inte om något av dem är rätt men phpMyAdmin använder alltid ` istället för ' i tabell- och fältnamn men inte vid värden. Kan hända att det är så enligt SQL, har faktiskt aldrig kollat upp det. Har namn så jag aldrig behöver använda sådana.
johnnytex
2005-02-24, 16:17
Ska man verkligen använda ` tecken? Borde det inte vara ' ? Det är ganska stor skillnad på de knappar.
:confused: Jag har nog blandat en del. Men det verkar funka ändå :D
edit: Okey snubben där uppe fixade ett bättre svar ;)
Ah!
Du en dum fråga nu kanske, men fortfarande får jag inte in nåt i min tabel i MySQL. Men när jag satt if-satsten där uppe då kolla den väl aldrig om något har blivit submit:et eftersom den redan gått över if satsen där uppe och sedan så efter man tryckt submit så kommer man ju till meddelande_skickat.php. Jag yrar eller?
Jag antog att den sidan vi redigerar hette meddelande_skickat.php. PHP-scriptet (inom <? ?>) MÅSTE ligga på den sidna man kommer till. PHP är serverside scripting och kör allting på servern. Det php-scriptet överst kommer inte att köras eftersom att när sidan laddas har inte personen tryckt på submit.
Vet allafall under mina ASP lektioner det svåraste är ändå alla snuff. ASP ska ha sina dubbel och enkelsnuffar, SQL ska också ha. Det sluta med tre snuffar efter varann för att ett fält ska fungera. :D
Vet allafall under mina ASP lektioner det svåraste är ändå alla snuff. ASP ska ha sina dubbel och enkelsnuffar, SQL ska också ha. Det sluta med tre snuffar efter varann för att ett fält ska fungera. :D
PHP är inte så känsligt. Du kan skriva echo("test"); eller echo('test'); Spelar ingen roll. Ända gången det spelar någon roll om du vill ha ny rad med \r\n då du måste ha det inom "test\r\n".
johnnytex
2005-02-24, 16:25
Jag antog att den sidan vi redigerar hette meddelande_skickat.php. PHP-scriptet (inom <? ?>) MÅSTE ligga på den sidna man kommer till. PHP är serverside scripting och kör allting på servern. Det php-scriptet överst kommer inte att köras eftersom att när sidan laddas har inte personen tryckt på submit.
:em: Förstår att det kan vara lite jobbig när jag inte är så hej på det här.
Iaf, klistarade in if-satsen till den sida man kommer till. Jag får följadne utskrift då:
POST returnerade följande:
Array
(
[rubrik] => RE:
[from] => 6
[till] =>
[message] => sdfsdffsd
[submit] => Svara
)
Till tilldelas inget värde :confused: Sedan så tillkommer inget i tablen i MYSQL heller. :(
Om till inte får något värde så skickas inget värde på förra sidan! Då har du alltså fel på denna:
echo "<input type=\"hidden\" name=\"till\" value=\"".$rad['from']."\">\n";
Vill du underlätta lite så kan du skriva
echo("<input type='hidden' name='till' value='" . $rad['from'] . "'>\n");
Och med tanke på att till inte innehåller något så innehåller inte $rad['from'] något. Då kan du göra samma sak överst på sidan med formuläret (där du från början hade det andra php-scriptet) och skriva för att få ut hur $rad ser ut.
<?
echo("<p><pre><b>RAD returnerade följande:</b><br />\r\n");
print_r($rad);
echo("</pre></p>\r\n");
?>
Fick du inget felmeddelande? Det borde du fått om den inte lägger in något.
Kan inte 'from' vara med och spöka här då?
Har haft liknande fel förut, och inte så sällan är det ett felaktigt fältnamn som spökar.
Prova döpa om till 'fran' eller nåt...
Kan inte 'from' vara med och spöka här då?
Har haft liknande fel förut, och inte så sällan är det ett felaktigt fältnamn som spökar.
Prova döpa om till 'fran' eller nåt...
Det ska inte vara några problem när det står inom ''. Men visst, fungerar det inte så är det ju en sak att byta namn på!
johnnytex
2005-02-24, 16:37
Okey. Har byt namn från from till fran. Och så har jag testa:
<?
echo("<p><pre><b>RAD returnerade följande:</b><br />\r\n");
print_r($rad);
echo("</pre></p>\r\n");
?>
Men då får jag ingen utskrift alls :confused: Det saknas fortfarande ett värde på till.
Okey. Har byt namn från from till fran. Och så har jag testa:
<?
echo("<p><pre><b>RAD returnerade följande:</b><br />\r\n");
print_r($rad);
echo("</pre></p>\r\n");
?>
Men då får jag ingen utskrift alls :confused: Det saknas fortfarande ett värde på till.
Har du lagt det på första sidan med formuläret? Du måste ju ha en Array $rad som innehåller ett element som heter from eller fran eller vad du nu kallar det. Detta är antagligen från en databas, eller var kommer det ifrån?
johnnytex
2005-02-24, 16:44
Har du lagt det på första sidan med formuläret? Du måste ju ha en Array $rad som innehåller ett element som heter from eller fran eller vad du nu kallar det. Detta är antagligen från en databas, eller var kommer det ifrån?
Jag har lagt in det på samma sida som formuläret jepps. Koden sitter precis ovanför formuläret. Jag kallar den fran. Ja den heter så i min MYSQL-tabell, eller vad menade du :em: ?
BTW, nu trillar meddelande in i min tabell. Allt är korrekt där förutom att till har tilldelats 0 på alla meddelande.
Det är inte fel på denna? echo("<input type='hidden' name='till' value='" . $rad['fran'] . "'>\n");
Efter som jag inte får ut nåt värde där?
Då funkar den biten ;)
Nu får vi då kolla hur du får fram $rad för den måste ju komma någonstanns ifrån.
Den här biten av kod ska väl alltid bara returnera en rad??
<?php
echo "<table width=\"100%\">";
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
$result = mysql_query($sql);
if (mysql_num_rows($result)==1) { die('Felaktigt antal rader mottagna!'); /* kollar så bara en rad hämtas av frågan*/}
$rad = mysql_fetch_array( $result , MYSQL_ASSOC);
echo "<tr>";
echo "<td><h3>".$rad['rubrik']."</h3></td>";
echo "<tr>";
echo "<tr>\n";
echo "<td bgcolor=\"black\">".$rad['message']."</td>";
echo "\n</tr>\n";
echo "</table>";
?>
<table>
<form action="meddelande skickat.php" method="post">
<?php
echo "<tr>";
echo "<td>Ämne:</td>";
echo "<td><input type=\"text\" name=\"rubrik\" value=\"RE:\" class=\"skugga\"></td><br />";
echo "</tr>";
echo "<input type=\"hidden\" name=\"fran\" value=\"".$_SESSION['sess_id']."\">\n";
echo "<input type=\"hidden\" name=\"till\" value=\"".$rad['from']."\">\n";
?>
<tr>
<td>Medelande:</td><td><textarea name="message" cols="15" rows="10" class="skugga"></textarea></td>
</tr>
<tr>
<td><input type="submit" name="submit" value="Svara"></td>
</tr>
</form></table>
</body>
</html>
Då behöver du inte ha while och då kommer även $rad['fran'] innehålla något för annars kommer hela $rad att vara tom!
johnnytex
2005-02-24, 16:51
Då funkar den biten ;)
Nu får vi då kolla hur du får fram $rad för den måste ju komma någonstanns ifrån.
Den här biten av kod ska väl alltid bara returnera en rad??
Då behöver du inte ha while och då kommer även $rad['fran'] innehålla något för annars kommer hela $rad att vara tom!
Nej, den ska gå igenom hela tabellen och plocka ut alla meddelande smo har samma fran-värde som den inloggade personens session_id. Då räcker det inte med en rad, eller?
Nä då räcker det inte med en rad men enligt denna så hämtar du ju efter meddelande_id och ska inte det vara unikt???
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
Och från vilken rad har du tänkt att den annars ska hämta 'fran' från som ligger utanför while-loopen?
johnnytex
2005-02-24, 16:59
Nä då räcker det inte med en rad men enligt denna så hämtar du ju efter meddelande_id och ska inte det vara unikt???
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
Och från vilken rad har du tänkt att den annars ska hämta 'fran' från som ligger utanför while-loopen?
Jo, meddelande_id är unikt. Men jag fattar inte det sista du menade där vart de ska hämta fran från. Det hämtar den ju från den raden/raderna där till har samma värde som session_id. Eller?
För att citera Megatuttarna: c out int flow overburn massattack >><< :D
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
Den satsen kommer att hämta ETT meddelande med meddelande_id som överinstämmer med id i GET. Alltså skriver man sida.php?id=3 kommer den att hämta posten med id=3. Vill du hämta ALLA meddelanden så får du ändra villkor här.
Och <form> ligger utanför while-loopen och då kommer den inte att loopa runt den. Isåfall måste du lägga den innanför while ($rad=...) { och }
johnnytex
2005-02-24, 17:07
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
Den satsen kommer att hämta ETT meddelande med meddelande_id som överinstämmer med id i GET. Alltså skriver man sida.php?id=3 kommer den att hämta posten med id=3. Vill du hämta ALLA meddelanden så får du ändra villkor här.
Och <form> ligger utanför while-loopen och då kommer den inte att loopa runt den. Isåfall måste du lägga den innanför while ($rad=...) { och }
Ja det har du ju rätt i. :em:
Så, gjorde en del förändring då.
Jag ändrade detta:
echo "<table width=\"100%\">";
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
$result = mysql_query($sql);
while( $rad = mysql_fetch_array( $result ) ) {
$till = $rad['fran'];
echo "<tr>";
echo "<td><h3>".$rad['rubrik']."</h3></td>";
echo "<tr>";
echo "<tr>\n";
echo "<td bgcolor=\"black\">".$rad['message']."</td>";
echo "\n</tr>\n";
}
Så funkade $till variabeln utan för denna sats? Eller? Iaf så fungerar det utmärkt nu :D Fattar inte riktigt varför men.
ETT STORT TACK! Känns gott med lite kunningt folk här på brädan!
Sådär ja, im $till är samma i alla är det ju en utmärkt lösning. Problemet kommer när du inte har några rader att returnera, då kommer den klaga på att $till inte är definierad. ;)
johnnytex
2005-02-24, 17:37
Sådär ja, im $till är samma i alla är det ju en utmärkt lösning. Problemet kommer när du inte har några rader att returnera, då kommer den klaga på att $till inte är definierad. ;)
Vad menade du nu? Till kommer väl alltid vara definerad, eftersom man hämtar ut meddelande som har samma värde som session_id. Eller, jag snurrar i nattmössan nu?
Nalle_Björn
2005-02-24, 19:09
Varför? nu får du allt förklara dig. Det går snabbare att köra bara MYSQL_ASSOC eller MYSQL_NUM. De flesta använder bara MYSQL_ASSOC så varför köra båda? Onödigt att plocka ut information man inte behöver. Dessutom saktar det ner scriptet. Kanske inte spelar så stor roll i en databas med 3rader, men kommer du upp ltie så spelar det roll.
Källa: http://se2.php.net/mysql_fetch_array
Suveränt! Visst inte att fetch_array var snabbare! :thumbup:
Ja det har du ju rätt i. :em:
Så, gjorde en del förändring då.
Jag ändrade detta:
echo "<table width=\"100%\">";
$sql = "SELECT * FROM `meddelande` WHERE meddelande_id='{$_GET['id']}'";
$result = mysql_query($sql);
while( $rad = mysql_fetch_array( $result ) ) {
$till = $rad['fran'];
echo "<tr>";
echo "<td><h3>".$rad['rubrik']."</h3></td>";
echo "<tr>";
echo "<tr>\n";
echo "<td bgcolor=\"black\">".$rad['message']."</td>";
echo "\n</tr>\n";
}
Så funkade $till variabeln utan för denna sats? Eller? Iaf så fungerar det utmärkt nu :D Fattar inte riktigt varför men.
ETT STORT TACK! Känns gott med lite kunningt folk här på brädan!
Bra att det fungerar! Känns dock lite skumt att sätta "till"="från"...
johnnytex
2005-02-24, 21:00
Bra att det fungerar! Känns dock lite skumt att sätta "till"="från"...
Jo, jag vet, jag har en förmåga att snurra till det bland mina koder. Läraren kallar mig "impulskodare" - jag skriver först tänker sedan :D Brukar bli snurrigt i min kod, ingen smo kan komma och ändra i den inte, för det är så ologiskt upplagt.
Men jag är glad ni kan hjälpa mig iaf ;)
Vad menade du nu? Till kommer väl alltid vara definerad, eftersom man hämtar ut meddelande som har samma värde som session_id. Eller, jag snurrar i nattmössan nu?
Det beror på om frågan alltid returnerar rader. Om frågan returnerar 0 rader kommer while-loopen aldrig att köras och $till blir odefinierad senare i koden.
Du kan ju lösa detta genom att antingen bryta koden om den inte returnerar några poster, eller sätta $till till ett annat värde om så är fallet.
if (mysql_num_rows($result)==0) {
// Här kommer om det inte returnerar några rader
$till = 0; // Det värde $till ska få då frågan returnerar 0 rader
die('Frågan returnerade 0 rader och därför avbryts hela scriptet!'); // eller du kan bryta hela scriptet om den inte returnerar något. Du kan ju iofs göra en kombination av $till = 0 och echo('Frågan returnerade inga rader'); också
}
johnnytex
2005-02-24, 21:22
Det beror på om frågan alltid returnerar rader. Om frågan returnerar 0 rader kommer while-loopen aldrig att köras och $till blir odefinierad senare i koden.
Du kan ju lösa detta genom att antingen bryta koden om den inte returnerar några poster, eller sätta $till till ett annat värde om så är fallet.
if (mysql_num_rows($result)==0) {
// Här kommer om det inte returnerar några rader
$till = 0; // Det värde $till ska få då frågan returnerar 0 rader
die('Frågan returnerade 0 rader och därför avbryts hela scriptet!'); // eller du kan bryta hela scriptet om den inte returnerar något. Du kan ju iofs göra en kombination av $till = 0 och echo('Frågan returnerade inga rader'); också
}
Alltså sånt här "säkerhets-tänkande" kommer gå hem hos läraren :thumbup:
Alltså sånt här "säkerhets-tänkande" kommer gå hem hos läraren :thumbup:
Haha så det är ett skolarbete som jag sitter och hjälper dig med. Det anses ju nästan vara fusk ;)
johnnytex
2005-02-24, 21:30
Haha så det är ett skolarbete som jag sitter och hjälper dig med. Det anses ju nästan vara fusk ;)
Oh, nä. Så här ser vi på det: Jag engagerar mig djupt i mitt arbete genom att aktivt söka nya kunskaper på alla tillgänliga forum. Eller är det inte så man skriver i sin rapport sedan :D
Du kan få en signatur på min hemsida sidan, håller på att snickra ihop en tack-sida nämligen. Du kanske vill ha en länk eller nåt, inte för att någon kommer se den men det kanske vore lite ball *rolleyes*
Du har iaf min tacksamhet :bow: Ibland är man bara för frusterad när man kodar.
vBulletin® v3.8.8, Copyright ©2000-2026, Jelsoft Enterprises Ltd.