Komponent-databas och SQL

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Warning: Wrong parameter count for mysql_db_query() on line 6
> $res = mysql_db_query($query); // Kör SQL-satsen

P.g.a fel syntax i anropet. Och $res blir inte definierad till något vettigt.

> Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource on line 10
> while (($row = mysql_fetch_assoc($res))) // Loopar igenom resultaten

P.g.a att $res inte pekar på något korrekt "result set" (p.g.a första felet ovan).
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Innan jag går och lägger mig...

Notera att jag *aldrig* har jobbat med mySQL eller skrivit en
enda rad PHP, jag har bara RTFM, vilket härmed varmt rekomenderas... 8)

Det tog ett par minuter att se "problemet" efter att ha kollat :

http://se2.php.net/mysql_db_query
http://se2.php.net/manual/en/function.m ... ect-db.php
http://se2.php.net/manual/en/function.mysql-query.php
http://se2.php.net/mysql_db_query
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Problemet är att jag DFTFM (didn't found the f***ing manual). :)

Har letat mycket på www.php.net , men det närmaste jag kom var:
http://se2.php.net/manual/sv/index.php
De sidor som du länkade till har jag aldrig hittat. Inte ens nu efter att ha sett adressen kan jag hitta dem från startsidan. Sitemappen hjälpte inte heller. Hur ska man navigera? Visst, du skrev ju länkarna, men det vore intressant att veta hur nära jag var målet. :)


edit: Jag jämförde dina ändringar i koden med "orginalet" och kollade manual-sidorna och förstår nu varför det inte fungerade tidigare. Hade jag bara RTFM så hade jag nog löst det. Men det var skickligt att du fixade det så fort utan att ha programmerat PHP innan. Det lönar sig att kunna läsa manualer. :)
vikingen
EF Sponsor
Inlägg: 167
Blev medlem: 5 februari 2004, 15:39:43
Ort: Orust

Inlägg av vikingen »

Första och sista länken verkar vara samma och den får du genom att söka i function list på mysql_db_query. Jag tycker att sök funtioner är riktigt bra, brukar vara lätt att hitta det man vill för php-funktioner har ofta logiska namn.

Dom två i mitten får du genom att gå in på documentation->View Online, English->XCIV. MySQL Functions, ner en bit på den sidan finns Table of Contents, ->mysql_query alt. ->mysql_select_db
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Så den manualen är nog inte tänkt för nybörjare alltså, för man ska ju inte behöva en manual för att hitta manualen... :)

Sedan verkar man behöva veta vad kommandona heter för att kunna hitta information om hur man använder dem, vilket blir lite meningslöst för en nybörjare som inte vet vilka kommandon som används för att t.ex öppna en databas.. :)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

- Öppna Google.
- Skriv in (t.ex) "mysql_db_query" (som ju var det du hade problem med) och tryck ENTER.
- Klicka på *FÖRSTA* träffen i listan.

Eller...

- Gå till www.php.net
- Ange "mySQL" i "search for" rutan högst upp.
- Nu får du en länk-lista till bl.a dina funktioner.

Verkar otroligt att du inte hittade beskrivningarna...

> Sedan verkar man behöva veta vad kommandona heter...

Man det visste du ju redan från kodexmeplet du hade fått !!??
Sen, när man har hittat ett finns det "See Also" länkar att gå vidare med...
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jo, nu hade jag som sagt redan kodexemplet, men borde man inte kunna hitta manualen utan att redan känna till kommandona? Låt säga att jag vill sortera databasen alfabetiskt efter en viss kolumn. Då måste jag alltså leta upp ett kodexempel och gå igenom det för att hitta rätt kommandon. Eller om man helt enkelt vill titta igenom listan med kommandon som stödjs för att få idéer till hur man ska koda en viss funktion på sin php-sida.

För att jämföra med en annan form av manual: ett PIC-datablad:
"Hm, jag behöver jämföra två signaler.." blädder blädder... "Aha, det finns en komparator!" Det arbetsättet verkar inte fungera på php.net om man redan innan måste veta vad funktionerna/kommandona heter.


Nåväl, problemet är ju löst. Jag är nog bara lite "skadad" av mina arbeten med att göra sajter och arbetsplatser mer lättjobbade och effektivare. :)
idiotdea
Inlägg: 468
Blev medlem: 26 juli 2006, 16:11:34
Ort: Vasa, Finland
Kontakt:

Inlägg av idiotdea »

Jag tycker det är ganska logiskt och bra som det är. Man går in på www.php.net och klickar sig fram: Documentation --> View Online, English --> VI.XCIV MySQL Functions. Då kommer du till huvudsidan för mysql funktionerna. På denna sida finns en kort beskrivning av dom vanligaste funktionerna, och också ett enkelt exempel på hur man använder MySQL ihop med PHP.

"User Contributued Notes" längst ner på sidan brukar också innehålla bra information och exempel på hur man kan utföra lite mera invecklade saker. Om man har en bra sökterm så hittar man oftast ett exempel som är nästan exakt det man vill ha :)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> men borde man inte kunna hitta manualen utan att redan känna till kommandona?

Visst, mitt första exemepl (via Google) fungerar bra när man vet namnet på *en* funktion.
Det andra exemplet (via www.php.net) fungerar i det fall du beskriver ovan.

> Låt säga att jag vill sortera databasen alfabetiskt efter en viss kolumn.

"sorting in sql" i Google ger bl.a en länk till :
http://www.sql.org/sql-database/postgre ... order.html

www.sql.org finns länkar till både några generella turorials och ett antal
länkar till specifik mySQL info :
http://www.sql.org/sql-database/sql-tutorial/
http://www.sql.org/sql-database/mysql/
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

*Nu* såg jag att det andra exemplet (via www.php.net) fungerar som jag vill. Bläddrar man ner till innehållsförteckningen och klickar på någon funktion så kommer den eftersökta manualen upp i vänstra kanten. Nice! Det gäller bara att lära känna sajten och sedan är det lätt. Men sitter man som nyburgare tar det en stund innan lampan ovanför huvudet tänds..

Bra länkar till sql-sajterna! (Jag hade inte sökt efter sortering, det var bara ett exempel som kom upp när jag skrev.)


//Information wants to be found - easy// :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Ledsen att mitt exempel inte fungerade felfritt. Som sodjan skrev så ska det vara mysql_query() istället för mysql_db_query(). Det är dock valfritt om man vill skicka med $db till funktionerna. Gör man inte det används den senast öppnade anslutningen.

Sen måste jag bara säga att PHP:s dokumentation är riktigt bra. Bättre manual har jag inte stött på. Enkelt att hitta är det också. Använd sökraden på sidan eller skriv helt enkelt in adressen php.net/mysql. Då söker den efter MySQL, och hittar rätt direkt. :)
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Nu står det stilla på kontoret igen. Håller på med en sökfunktion, men när jag kör koden så kommer ett felmeddelande:
"Du måste ju söka efter något.
Försök igen!"

Detta meddelande visas alltså direkt, även när jag inte sökt efter något. Provar jag att söka så får jag istället:
"Det returnerades inget resultat. :-/"

Mycket riktigt, efter lite debuggande (med echo-rader precis innan "if ($result" i function-delen) så ser jag att $result inte innehåller något. $query innehåller däremot SELECT * FROM motstand WHERE saljare='Kjell'

Kod: Markera allt

<?
function leta_databasen($search)
{
    //
    // Anslut till databasen
	$db = mysql_connect('localhost', 'user', 'password'); // Ansluter till databasservern
    if (! $db)
	{
        print ("Anslutningen misslyckades");
        exit;
    }	 
	mysql_select_db('komponentlager', $db); // Väljer databas 

	$query = "SELECT * FROM motstand WHERE saljare='$search'"; 

	$result = mysql_db_query($query, $db); 


	if ($result) 
	{ 
		echo "Resultatet av sökningen:<br><br>"; 

		while ($r = mysql_fetch_array($result))
		{ // Begin while 
				$komponent = $r["komponent"];  
				$antal = $r["antal"];  
				$artnr = $r["artnr"]; 
				$saljare = $r["saljare"]; 
				echo "<tr>";
				echo "<td>$komponent</td>";
				echo "<td>$antal</td>";
				echo "<td>$artnr</td>";
				echo "<td>$saljare</td></tr>";
		}; //end while
		echo "</table>"; 
	}
	else { echo "Det returnerades inget resultat.  :-/"; } 
} 
?>


<html> 
<head><title>Sök Motstånd</title> 
</head> 
<body bgcolor=#ffffff> 
<h1>Sök i databasen</h1> 
<form action="<?echo $_SERVER['PHP_SELF']?>" method="POST">
<table width=90% align=center> 
<tr><td>Sök efter:</td><td><input type='text' name='sok_motstand' size="60" maxlength="255"></td></tr> 
<td></td><td><input type="submit"></td></tr> 
</table> 
</form> 

<? 
//Spara undan variabeln från &_POST (från formuläret)
$search = $_POST['sok_motstand'];


if ($search) leta_databasen($search) ;// Sök bara om det skrevs något i textfältet.
else { echo "Du måste ju söka efter något. <br> Försök igen!"; } 
?> 

</body> 
</html> 
sprawl
Inlägg: 299
Blev medlem: 9 juni 2004, 13:01:33
Ort: Göteborg

Inlägg av sprawl »

har du något i databasen då? Och isåfall med en säljare som heter exakt 'Kjell'? Vet iofs inte om mysql är case(in)sensitive by default.

Du kan använda like om du vill ha wildcardsök, som kanske kan vara smidigt?

WHERE saljare='%$search%'
% motsvarar vad * oftast är i en wildcardsök. Man ska även kunna göra en mer fuzzy sökning i mysql om jag inte minns fel. Minns dock inte hur :D

/a
offe
Inlägg: 152
Blev medlem: 30 december 2003, 21:16:14
Ort: Stockholm

Inlägg av offe »

Nope, sökningar i mysql är inte case sensitive "by default".

En annan sak att tänka på är att om man bygger en sådan är applikation och den kommer att publiceras externt (dvs Internet) är att kontrollera indata innan det processas server-side. Nu är det ju kanske inte aktuellt i detta fall, men bra att tänka på ändå... Bad things (TM) may happen... :twisted: :twisted:

/offe
Användarvisningsbild
JimmyAndersson
Inlägg: 26417
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

sprawl:
Jodå, jag har lagt in grejjer i databasen. Test-artiklar med olika säljare. Flera stycken från olika tillverkare däribland Kjell. (som jag stavat rätt.)

offe:
Precis. Jag har ju t.ex inget filter som tar bort oönskade tecken, så det går troligen att skriva grejjer så att det rasar ihop. :)


Felet verkar bero på den här raden:
$result = mysql_db_query($query, $db);
eftersom $result blir tom. $query och $db innehåller rätt data vad jag kan se.



edit: www.php.net verkar ha tagit sovmorgon. Det går inte att komma in på den sajten nu. :roll:


edit 2: Problemet är löst. Det hade smugit sig in en db i kommandot. Det ska ju vara såhär:
$result = mysql_query($query, $db);
Skriv svar