Her får du hjelp til å lage hjemmeside med video. Alle verktøy og programmer vi bruker til å lage webside er gratis.
Ajax Tooltip script hente inn data fra MySQL
Hei. Jeg driver og tester ut sånn AJAX tooltip v1.2 til mafiaspillet Twilight Mafian.
Men jeg får ikke den til og laste ned data i fra data basen. For jeg hadde tenkt til og ha det sånn at når man tar musa over bruker navnet på en bruker kommer det opp en info boks om brukern. Info boksen skal inne holde brukernavn, Level og masse mere.
Skriptet til infoboksen
Nick: {$r['username']} [{$r['userid']}] $d<br />
Level: $userl<br />
Oppgave: {$r['duties']}<br />
Kjønn: {$r['gender']}<br />
Registrert: $sup<br />
Sist aktiv: $lon<br />
Siste aktivitet: $str<br />
Siste innlogging: $str2<br />
Pålogget: $on<br />Tar i mot all hjelp med åpene armer :)
For å få til det der må du kjenne databasestrukturen i mafiaspillet. De opplysningene du ønsker ligger høyst sannsynlig i databasen.
Du kan så opprette en egen php-fil hvor du kobler til databasen og henter ut og strukturerer informasjonen. Til slutt må du legge inn linken jfr. tooltip scriptet på brukernavnet til brukeren i kodene til mafiaspillet.
Du kan kanskje sende brukerid via querystring for å hente ut informasjon om brukeren man tar musa over, slik:
<a href="#" title="ajax:bruker.php?uid=[brukerid]">[brukernavn]</a>Der [brukerid] må hentes ut fra mafiaspillet (naturligvis uten brakettene).
Saken er her at du fikler med kode verken du eller jeg kjenner til. Mål nummer 1 er at man blir kjent med koden man jobber med, da den skal danne grunnlaget for videre utvikling.
Begynn med det enkleste først, lag f.eks. scriptet "bruker.php" og skriv en vilkårlig setning i det.
Prøv så å bruke ajax tooltip scriptet for å hente inn informasjon fra bruker.php i tooltip. Da er jo første del ferdig, du har klart å få tooltip scriptet til å fungere.
<a href="#" title="ajax:bruker.php">[brukernavn]</a>Deretter blir du kjent med hvor de forskjellige opplysningene du ønsker i tooltipen ligger lagret i databasen, slik at du kan kjøre en query (spørring) for å hente ut data. (i filen bruker.php
.
Når du har klart å hente ut informasjonen du ønsker, så kan du sende brukerid via querystring til bruker.php
for å hente ut info.
... title="ajax:bruker.php?uid=[brukerid]" ...Denne blir så tilgjengelig i scriptet bruker.php
via $_GET['uid'].
Ja, jeg skjønner. Har du funnet ut hvor alle opplysningene ligger lagret i databasen og begynt å lage en query da?
Det er enklere om du spør igjen når du vet hvor informasjon er lagret i MySQL, altså hvilke tables data ligger i og hvilke felter du er interessert i.
Hvis programmereren ikke var opptatt av normalisering, så kan det jo hende man finner all informasjonen i en tabell.
Det der er tatt helt ut av kontekst.
Har du skrevet en SQL query for å hente ut den informasjonen der? Hvor caller du variablene?
Det første du må vite er i hvilken database opplysningene er lagret, samt hvilke tables og felter du er ute etter. For å finne ut ting om og administrere databasen kan du bruke phpMyAdmin.
Deretter må du lære hvordan man kjører en SQL query med PHP. Deretter kan du printe ut opplysninger om brukeren i tooltip scriptet. Gå frem metodisk slik:
- Hvilke data vil jeg ha tak i fra databasen?
- Hvor er data lagret i databasen (tabellnavn & felter)
- Hvordan skriver jeg en SQL query for å hente ut disse
- Hvordan bruker jeg PHP for å sende SQL query
- Hvordan printer jeg ut de korrekte opplysningene
De to første og understrekede poengene er ting jeg ikke kan hjelpe deg med, da jeg ikke kjenner til databasestrukturen for mafiaspillet. Dette må du med andre ord finne ut selv.
Når du vet disse tingene, og har lest de to trådene jeg linker til i begynnelsen kan du begynne å spørre om hvordan du skal utforme scriptet videre, da det er ting jeg kan hjelpe deg med.
For at jeg skal kunne hjelpe deg best mulig er det viktig at du forteller meg hvilke data du skal ha, hvilke tabeller de er lagret i og hva feltene heter.
Dataen i tabellen er forskjellig for hver bruker, men hvis du har phpMyAdmin el.l og kan kjøre SQL-spørringer, så kan du kjøre denne spørringen for å se hvilke data man har i tabellen:
SELECT * FROM users;
Dette vil vise deg alle data som er lagret i tabellen users
. Finn ut hvilke felter du er ute etter i denne tabellen, deretter skriver du ned navnet på feltene, slik at du kan referere til dem senere.
Er brukerid lagret i tabellen users
? I såfall er denne viktig, skriv ned navnet på feltet selvom du ikke trenger i tooltipen. (Vi skal prøve å bruke denne for å hente data fra MySQL senere).
Nei, ikke i dette tilfellet, "Lag PHP kode" lager bare en statisk query, hvilket ikke er nok i ditt tilfelle, du må sende et argument, og dette argumentet må sikres ved hjelp av PHP først.
Har fått med meg at tabellen heter "users", men hvilke felter trenger du fra "users"?
Det kommer ann på hvordan viewuser.php ser ut, og hvordan variabler passes til scriptet. Paste det her, så skal jeg se om jeg kan tyde hvorvidt det er mulig eller ikke.
Tuklet du med scriptet før du pastet det? Det ser ut til at deler av det mangler.
Bruke viewuser.php i tooltip
Hvis scriptet ikke legger inn menyer og annet, så kan du bruke dette, ja. Målet ditt er å passe variabelen 'u' til scriptet, slik:
<a href="#" title="ajax:viewuser.php?u=[brukerid]">[brukernavn]</a>Dette må du gjøre fra de scriptene hvor tooltipen skal komme, skjønner? Du trenger med andre ord variabelen brukerid. Finner du denne i skriptene hvor tooltip skal poppe opp?
Saken er da at det som skjer før ting begynner å printes er at data hentes ut fra databasen. Det er nødvendig å hente ut data før man kan printe dem.
Det du kan gjøre er jo å kopiere scriptet viewuser.php og kalle kopien for tooltipuser.php, deretter kan du modifsere tooltipuser.php slik at det kun printer ut det du ønsker i tooltipen når man tar musa over brukeren.
Bare hyggelig det, Vendetta. :) Det er bare å spørre hvis du trenger hjelp med å endre scriptet for å passe, eller for å implementere det.
Får jeg se dette mafiaspillet ditt eller? Er jo litt gøy å se om du får til tingene. :)
Blir stilig dette, stilig logo.
Er du Heidi, eller er det deg og venninna di som skal mekke dette, og, går det ann å registrere seg nå eller?
Ok, så du er den vesle slaven til Heidi? Haha :)
Har du noe promokode til meg da?
Det sier alle slaver, haha. Jeg er registrert nå, skal gå inn og se litt på det. Vi snakkes ved din neste korsvei :)
Ser i scriptet inne på siden at du bruker "viewuser.php?u=[brukerid]". Er det meningen at du skal bruke viewuser.php?
Ja, ok, det er riktig hvis det er meningen. Men i sin form nå, fremstår denne linken slik:
<a href="viewuser.php?u=[userid]" title="ajax:external.php">[bruker]</a>Hva er external.php
i title attributten? Her vil du jo ha:
title="ajax:tooltipuser.php?u=[userid]"der tooltipuser.php
er scriptet du kopierte fra viewuser.php
og redigerte slik at det kun inneholdt de opplysningene du ønsket.
Jeg har ikke peiling på hva external.php inneholder, jeg har bare sett viewuser.php. Det er ikke rart tooltip ikke fungerer, du har jo ikke gjort noe av det jeg har sagt tidligere?
AJAX tooltip på link
Som jeg har sagt: Du må hente ut informasjon fra databasen (slik viewuser.php gjør), sende brukeriden som variabel til scriptet som inneholder databasequery osv. via title-attributten på linken som skal invoke AJAX-scriptet og vise tooltipen.

Merk dog at bildet ovenfor ikke inneholder helt riktig kommando for title-attributten, da illustrasjonen kun er en modell for å vise hvordan ting fungerer. Title attributten skal se slik ut:
title="ajax:tooltipuser.php?u=uid"der uid
er brukeriden til den aktuelle brukeren.
Det kan du ikke ha gjort, for title attributten inneholder ikke en query string som sender brukerid via 'u'.
Det er ikke noe forandring inne i spillet. Linken ser fortsatt slik ut:
<a href="viewuser.php?u=[userid]" title="ajax:external.php">[bruker]</a>Nei, jeg ser det, men nå vet vi i alle fall at linken er riktig. Så fra nå av er ikke den noe tema lenger. For å kvalitetssikre endringer heretter, sjekk kilden. Hehe.
Kan du paste hele innholdet av external.php?
Nei, det var ikke noe galt med pastingen din, det var heller at scriptet er utformet feil og har mangler.
Du har blant annet utelatt en viktig fil, nemlig
<?php
include "globals.php";
?>Som jeg tror kan inneholde diverse ressurser, blant annet tilkobling til databasen.
Prøv å putte dette i external.php
<?php
error_reporting(E_ALL);
include "globals.php";
$_GET['u'] = abs((int) $_GET['u']);
if(!$_GET['u'])
{
print "Ugyldig bruk";
}
else
{
$q=$db->query("SELECT u.*,us.*,c.*,h.*,g.*,f.* FROM users u LEFT JOIN userstats us ON u.userid=us.userid LEFT JOIN cities c ON u.location=c.cityid LEFT JOIN houses h ON u.maxwill=h.hWILL LEFT JOIN gangs g ON g.gangID=u.gang LEFT JOIN fedjail f ON f.fed_userid=u.userid WHERE u.userid={$_GET['u']}");
if($db->num_rows($q) == 0)
{
print "Sorry, vi kan ikke finne den du leter etter, sjekk om du har rett ID.";
}
else
{
$r=$db->fetch_row($q);
if($r['user_level'] == 1) { $userl="Medlem"; } else if($r['user_level'] == 2) { $userl="Admin"; } else if ($r['user_level'] == 3) { $userl="Moderator"; } else if($r['user_level'] == 0) { $userl="NPC"; } else {$userl="Support"; }
$lon=($r['laston'] > 0) ?date('F j, Y g:i:s a',$r['laston']) : "Aldri";
$sup=date('F j, Y g:i:s a',$r['signedup']);
$ts=$r['strength']+$r['agility']+$r['guard']+$r['labour']+$r['IQ'];
$d="";
if($r['laston'] > 0)
{
$la=time()-$r['laston'];
$unit="seconds";
if($la >= 60)
{
$la=(int) ($la/60);
$unit="minutes";
}
if($la >= 60)
{
$la=(int) ($la/60);
$unit="hours";
if($la >= 24)
{
$la=(int) ($la/24);
$unit="days";
}
}
$str="$la $unit ago";
}
else
{
$str="--";
}
if($r['last_login'] > 0)
{
$ll=time()-$r['last_login'];
$unit2="seconds";
if($ll >= 60)
{
$ll=(int) ($ll/60);
$unit2="minutes";
}
if($ll >= 60)
{
$ll=(int) ($ll/60);
$unit2="hours";
if($ll >= 24)
{
$ll=(int) ($ll/24);
$unit2="days";
}
}
$str2="$ll $unit2 ago";
}
else
{
$str2="--";
}
print "Nick: {$r['username']} [{$r['userid']}] $d</a><br />";
print "Level: $userl<br />";
print "Oppgave: {$r['duties']}<br />";
print "Kjønn: {$r['gender']}<br />";
print "Registrert: $sup<br />";
print "Sist aktiv: $lon<br />";
print "Pålogget: $on<br />";
print "Gjeng: ";
if($r['gang'])
{
print "<a href='gangs.php?action=view&ID={$r['gang']}'>{$r['gangNAME']}</a>";
}
else
{
print "N/A";
}
}
}
?>external.php
FJERN ALT ANNET, BRUK BARE DET JEG SKREV OVENFOR.
NÅ HAR DU PLUTSELIG ENDRET TIL TOOLTIPUSER....
Hva er inneholdet i tooltipuser.php? Jeg prøver å debugge jeg også, men når du skifter navn på alt mulig hele tiden, så blir det helt umulig for meg. Kan vi prøve å holde dette noe strømlineformet, slik at vi begge er i samme tenkebane?
Nå har jeg nemlig mine anelser om at innholdet i tooltipuser.php ikke er eksakt det jeg la inn ovenfor. Hvis jeg går direkte til tooltipuser.php kommer jeg nemlig en side som er identisk til viewuser.php
Fra nå av heter filen vi skal bruke external.php og den skal KUN inneholde det jeg pastet ovenfor. Inget mer, intent mindre.
Det er fordi du ikke kan skrive. Jeg bad deg om å kvalitetssikre det du hadde gjort ved å sjekke kilden.
title='ajax:extrenal.php?u=[uid]'>Det er external.php, ikke extrenal.php
Vi kommer likevel til å møte på et nytt problem når dette er gjort, fordi det virker som om det er et templatesystem som kickes inn.
Det er her vi kommer inn på hvordan mafiasystemet er bygget opp, hvilket jeg ikke kjenner til. Men vi har hittil fått til det viktigste, nemlig å sikre oss at tooltipen fungerer, og at vi henter ut de korrekte opplysningene fra databasen.
Det neste som blir å gjøre nå, er følgende.
- Lag en kopi av globals.php, kall den globals-external.php
- Inkluder den nye kopien av globals-external.php i external.php.
Dette gjør du på linje #3 i external.php - Gjør endringer i globals-external.php, slik at templatesystemet ikke kicker inn.
Jfr. pkt. 2, bytter du ut
<?php
include "globals.php";
?>med
<?php
include "globals-external.php";
?>Det er ikke sikkert du har gjort noe feil, greia her er at vi ikke kjenner oppbyggingen av spillet. Dette var også drunnen til at jeg ønsket at vi skulle bygge opp innholdet av tooltipen fra bunn. (Da jeg nevnte at vi skulle finne ut hvilke felter som inneholdt hva osv i databasen).
Fordi jeg er lei nå postulerer jeg følgende forslag: Vi bygger opp external.php til å bli et uavhengig script. Det første du må gjøre da er å finne frem brukernavn, passord, databasenavn og databasehost til databasen. Si ifra når du har gjort det.
Nei, i ett av scriptene har dere skrevet inn databaseinformasjonen for MySQL. Dette inkluderer brukernavn, passord, databasenavn og host til databaseserveren.
Når du har disse opplysningene klare, så skal jeg fortelle deg hva du gjør videre.
Ok, følg disse anvisningene til punkt og prikke.
Opprett en ny fil som heter db-access.php
. I den fila paster du inn kodene nedenfor, men bytter ut verdiene med dine databasedetaljer.
<?php
// Host til MySQL
$db_host = 'localhost';
// Databasenavn i MySQL
$db_name = 'ditt_databasenavn';
// MySQL bruker
$db_user = 'ditt_brukernavn';
// MySQL passord
$db_pass = 'ditt_passord';
// Kobler til MySQL
$db_connection = mysql_connect($db_host, $db_user, $db_pass);
// Velger database i MySQL
mysql_select_db($db_name, $db_connection);
?>Deretter åpner du external.php
, fjerner alt innhold og paster inn dette:
<?php
require('db-access.php');
$_GET['u'] = abs((int) $_GET['u']);
if(!$_GET['u'])
{
print "Ugyldig bruk";
}
else
{
$q=sprintf('SELECT u.*,us.*,c.*,h.*,g.*,f.* FROM users u LEFT JOIN userstats us ON u.userid=us.userid LEFT JOIN cities c ON u.location=c.cityid LEFT JOIN houses h ON u.maxwill=h.hWILL LEFT JOIN gangs g ON g.gangID=u.gang LEFT JOIN fedjail f ON f.fed_userid=u.userid WHERE u.userid=\'%s\'',
mysql_real_escape_string($_GET['u']));
$q = mysql_query($q, $db_connection) or die(mysql_error());
if(mysql_num_rows($q) == 0)
{
print "Sorry, vi kan ikke finne den du leter etter, sjekk om du har rett ID.";
}
else
{
$r=mysql_fetch_assoc($q);
if($r['user_level'] == 1) { $userl="Medlem"; } else if($r['user_level'] == 2) { $userl="Admin"; } else if ($r['user_level'] == 3) { $userl="Moderator"; } else if($r['user_level'] == 0) { $userl="NPC"; } else {$userl="Support"; }
$lon=($r['laston'] > 0) ?date('F j, Y g:i:s a',$r['laston']) : "Aldri";
$sup=date('F j, Y g:i:s a',$r['signedup']);
$ts=$r['strength']+$r['agility']+$r['guard']+$r['labour']+$r['IQ'];
$d="";
if($r['laston'] > 0)
{
$la=time()-$r['laston'];
$unit="seconds";
if($la >= 60)
{
$la=(int) ($la/60);
$unit="minutes";
}
if($la >= 60)
{
$la=(int) ($la/60);
$unit="hours";
if($la >= 24)
{
$la=(int) ($la/24);
$unit="days";
}
}
$str="$la $unit ago";
}
else
{
$str="--";
}
if($r['last_login'] > 0)
{
$ll=time()-$r['last_login'];
$unit2="seconds";
if($ll >= 60)
{
$ll=(int) ($ll/60);
$unit2="minutes";
}
if($ll >= 60)
{
$ll=(int) ($ll/60);
$unit2="hours";
if($ll >= 24)
{
$ll=(int) ($ll/24);
$unit2="days";
}
}
$str2="$ll $unit2 ago";
}
else
{
$str2="--";
}
print 'Nick: ' . $r['username'] . '[' . $r['userid'] . ']' . $d . '</a><br />';
print 'Level: ' . $userl . '<br />';
print 'Oppgave: ' . $r['duties'] . '<br />';
print 'Kjønn: ' . $r['gender'] . '<br />';
print 'Registrert: ' . $sup . '<br />';
print 'Sist aktiv: ' . $lon . '<br />';
print 'Pålogget: ' . $on . '<br />';
print 'Gjeng: ';
if($r['gang'])
{
print '<a href="gangs.php?action=view&ID=' . $r['gang'] . '">' . $r['gangNAME'] . '</a>';
}
else
{
print 'N/A';
}
}
}
?>Last opp filene på webhotellet, og så ser vi om det fungerer.
Ja, jeg hadde en typo i external.php scriptet. kopier det igjen nå, har rettet den.
Det er fordi variabelen $on som sier hvorvidt man er pålogget eller ikke ikke er en del av dette scriptet. Den defineres en annen plass i mafiaspillet, høyst sannsynlig i globals.php eller en av skriptene som importeres i globals.php. Selv ville jeg fjernet denne.
Gjeng er i databasen, men er høyst sannsynlig ikke satt for min bruker, og derfor fikk jeg N/A.
Vi har i alle fall løst problemet ditt, videre utforsking på denne arena får du nå stå for selv, da dette er ditt mafiaspill,og jeg ikke har tid til å sette meg inn i et helt nytt system, bare for å løse småproblemer.
Da må du forme query slik at også denne inkluderes i resultatene fra databasen. Nå har du jo queryen i external.php, samt. at du ser hvordan man printer ut innhold fra databasen. Ergo skulle alt du trenger å vite være tilgjengelig for deg, og du kan skreddersy og forme ut dette ved hjelp av egne eksperimenter.
Jeg har jo vært veldig grei med deg og laget et script som henter ut flere av detaljene og fått funksjonaliteten til å fungere nå. Da får opprydding o.l. bli på din kappe. :)
Hvis dette var mitt mafiaspill så hadde jeg formet om hele greia, slik at det som dukket opp i tooltipen var endel av systemet, dermed hadde jeg sluppet å bruke "db-access.php".
Men hvordan du gjør dette får altså bli opp til deg. Som jeg sa har jeg ikke tid (eller lyst) til å sette meg inn i kildekoden til et helt spill. Det er bedre at du lærer deg de mest grunnleggende delene av PHP, slik at du kan tolke hva som skjer hvor i scriptene. Det gjør jobben din 10x lettere, enn om du må tumle deg gjennom problem etter problem.
Det er bare hyggelig å hjelpe. Så får jeg få opp noen donasjonsknapper her etterhvert, slik at du og Heidi kan sende 20-30% av inntektene fra mafiaspillet deres til meg for innkjøp av urge og grandis all den tiden jeg har hjulpet dere. Haha
Ha en god natt videre du også :)
Er du så rik? Haha

Ja har endra slik at den "boksen" som du sier at jeg må kjenne database strukturen min. Driver og "blir kjent med den"
Ola @ Gangs Of Norway