webForumDet fria alternativet

Lätta frågor för den kunnige :o)

PHP

11 svar · 271 visningar · startad av streetrobban

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Tjenare, jag är väldigt ny på det här med PHP och MySQL etc. Läget är detta;
Jag har skapat en ny databas i WinMySQLadmin 1.3, gjort en tabell i den som heter tabell1 (fantasifullt). Sedan har jag lagt till poster i databasen med följande kod (add2.php);

<?php
// Öppna databasen
$open = mysql_connect("localhost","","") or die ("Could not connect");

// Lägg till informationen
$dbinfo = mysql_db_query("test", "INSERT tabell1 (namn, text) VALUES ('$namn' & '$text')");

// Stäng databasen
mysql_close($open);
?>

Sidan för att mata in informationen (formulär sidan) ser ut så här (men det spelar väl ingen roll hur den ser ut) (add.php);

<form method="post" action="add2.php">

Namn<br>
<input type="text" name="namn"><br><br>

Text<br>
<input type="text" name="text"><br><br>

<input type="submit" value=" SKICKA ">

</form>

Slutligen ser koden för att hämta och visa informationen ut så här (view.php);

<?php
// Öppna databasen
$open = mysql_connect("localhost","","") or die ("Could not connect");
echo("Connected successfully");

echo("<br>");

// Hitta rätt tabell
mysql_select_db ("test") or die ("Could not select database");
echo("Database found");

// Välj vad som ska visas
$resultat = mysql_query ("SELECT namn FROM tabell1");

// Skriv ut det på sidan
echo("<br>");
echo("$resultat");

// Stäng databasen
mysql_close($open);
?>

Men när jag kör view.php så skrivs det bara ut följande;

Connected successfully
Database found
Resource id #2

Jag har en till fråga. I WinMySQLadmin 1.3 kan jag ju se vilka databaser jag har. Men kan jag se om informationen ligger där? Som i Access?

Hoppas ni orkar hjälpa mig.

[Redigerat av streetrobban den 17 nov 2001]

Medlem sedan juni 20008 205 inlägg
#2
// Skriv ut det på sidan
echo("<br>");
echo("$resultat");

$resultat är bara en identifierare till resultatet från en MySQL-query, inte själva resultatet. Du skulle få göra något sådant här, typ:

// Skriv ut det på sidan
echo '<br>';
$line = mysql_fetch_array($result); // hämta första raden
if (!$line){
&nbsp;&nbsp;&nbsp;&nbsp;echo 'Inga rader returnerades!';
} else {
&nbsp;&nbsp;&nbsp;&nbsp;echo '<table border="1">';
&nbsp;&nbsp;&nbsp;&nbsp;$fields = array_fields($line);
&nbsp;&nbsp;&nbsp;&nbsp;echo '<tr>';
&nbsp;&nbsp;&nbsp;&nbsp;foreach($fields as $field)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<th>', $field, '</th>';
&nbsp;&nbsp;&nbsp;&nbsp;echo '</tr>', chr(10);
&nbsp;&nbsp;&nbsp;&nbsp;do{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<tr>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach($fields as $field)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '<td>', $line[$field], '</td>';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo '</tr>', chr(10);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$line = mysql_fetch_array($result);
&nbsp;&nbsp;&nbsp;&nbsp;} while ($line);
&nbsp;&nbsp;&nbsp;&nbsp;echo '</table>';
}

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

[Redigerat av spango den 17 nov 2001]

Medlem sedan juni 20008 205 inlägg
#3

Dessutom borde inte detta funka:

// Lägg till informationen
$dbinfo = mysql_db_query("test", "INSERT tabell1 (namn, text) VALUES ('$namn' & '$text')");

Det blåmarkerade &-tecknet borde ställa till problem, byt ut det mot ett kommatecken.

------------------
You can be a coward for a few minutes, or dead forever. /Rincewind

Medlem sedan jan. 20011 140 inlägg
#4

Jag ändrade till den koden du föreslog spango. men jag får bara följande fel.

Warning: Supplied argument is not a valid MySQL result resource in c:\program\apache group\apache\htdocs\view.php on line 17
Inga rader returnerades!

Line 17 ser för mig ut så här:

$line = mysql_fetch_array($result); // hämta första raden
Medlem sedan dec. 200012 464 inlägg
#5

Är det det här som du gör innan?

$resultat = mysql_query ("SELECT namn FROM tabell1");

i så fall så skall din rad 17 se ut så här

$line = mysql_fetch_array($resultat); // hämta första raden

Du måste ha samma namn vid dessa anrop.

------------------
essentitia preter non sans multiplicandum

Medlem sedan jan. 20011 140 inlägg
#6

Så här ser koden ut för hela sidan view.php

<?php
// Öppna databasen
$open = mysql_connect("localhost","","") or die ("Could not connect");
echo("Connected successfully");

echo("<br>");

// Hitta rätt tabell
mysql_select_db ("test") or die ("Could not select database");
echo("Database found");

// Välj vad som ska visas
$hamta = mysql_query ("SELECT namn, text FROM tabell1");

// Skriv ut det på sidan
while($info = mysql_fetch_array($hamta))

{

$namn=$info["namn"];
$text=$info["text"];

echo("<br><br>");
$i = 1;
while ($i <= 10) {
echo("$i $namn - $text<br>");
$i++;
} 

echo("<br><br>");
echo "$namn - $text";
echo("<br>");

}

// Stäng databasen
mysql_close($open);
?>
Medlem sedan dec. 200012 464 inlägg
#7

Om du lägger till lite felhantering så kanske du får fram någon ledtråd

$hamta = mysql_query ("SELECT namn, text FROM tabell1") or die mysql_error());

------------------
essentitia preter non sans multiplicandum

Medlem sedan jan. 20011 140 inlägg
#8

Ok LarsG, det hjälpte lite grann. Om jag använder mig av:

$hamta = mysql_query("SELECT text FROM tabell1") or die ("Fel i SELECT");

Så funkar det inte. Men om jag däremot använder mig av:

$hamta = mysql_query("SELECT namn FROM tabell1") or die ("Fel i SELECT");

Så skriver den ut ett namn. Kan man inte använda "text" eller? Är namnet upptaget?

Jag skulle gärna testa att byta namn på "text" i "tabell1" men jag vet inte hur man gör :) Någon som vet en bra sida där man kan läsa hur man göra för att ändra i MySQL databaser?

Medlem sedan mars 20007 896 inlägg
#9

text är ett reserverat ord i SQL. Använd klamrar för att råda bot på det :)

SELECT [text] FROM tabell1

------------------
SPiN, bjorne.w@telia.com

-- Tekniska framsteg är som en yxa i händerna på en kriminell galning / Albert Einstein --

Medlem sedan dec. 200012 464 inlägg
#10

Mysql använder ` för ange en delimited identifier

SELECT * from `select` where `select`.id > 100;

Om man kör mysql i ANSI-mod så kan man använda " (enligt standard)

SELECT * from "select" where "select".id > 100;

Det kanske är enklast att bytta namn på kolumnen

OT:
[] för att ange namn är specifikt för Access mfl.

OT:
Text är inte reserverat i standard sql utan det är ett påhitt av Mysql (plus några till)

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20007 896 inlägg
#11

Aha, så [] används bara i Access? Skulle gissa för SQL Server då också?

Man lär sig nåt nytt varje dag, och ofta av LarsG! :D

------------------
SPiN, bjorne.w@telia.com

-- Tekniska framsteg är som en yxa i händerna på en kriminell galning / Albert Einstein --

Medlem sedan dec. 200012 464 inlägg
#12

Jo Access/Sybase och SQL server tillåter syntaxen med [] för att quota identierare.

I SQL server 2000 så har dom ändrat så att " används defaultmässigt för att quota identifierare och inte som strängavgränsare.

streetrobban

Du får bättre felmeddelanden om du anropar funktionen mysql_error istf att skriva ut en egen text

$resultat = mysql_query("select * from t) or die(mysql_error());

------------------
essentitia preter non sans multiplicandum

252 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)