[php/mysql]link naar db weggevallen na "function"?

Pagina: 1
Acties:

  • jwbagger
  • Registratie: Februari 2001
  • Laatst online: 11-08 15:50

jwbagger

,.-~'`'~-.,

Topicstarter
PROBLEEM IS NU OPGELOST, SCROLL EEN PAAR POSTS NAAR BENEDEN VOOR DE OPLOSSING DIE IK HEB GEVONDEN

heel vaag, eerst deed het hele script het wel (wat precies de werking moet zijn is hier volgens mij niet terzake doend)....

Maar ik was het script aan het omschrijven van weinig naar meerdere bestanden door middel van wat include commando's erin te gooien, en daarin weer aparte function zooi gedefinieerd.

Voordat ik begon werkte alles perfect, en nu krijg ik opeens foutmeldingen van mysql :? Hij doet nu alsof ik niet ingelogd zou zijn ofzo...

ok, hier ff de bestanden met daarin (een deel van) hun inhoud:


common.php :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
function dbconnect(){
    $dbHost = "localhost";
    $dbName = "doel";
    $dbUser = "";
    $dbPass = "";
    $link = @mysql_connect($dbHost, $dbUser, $dbPass);
    if (!$link) {
        fout ("Database-fout","Kan geen verbinding maken met de database server.");
    }
    if (!$dblink = @mysql_select_db($dbName)){
        fout ("Database-fout","Kan database <I>$dbName</I> niet vinden.");
    }
    return ($link);
}


function authcrypt($username, $password){
    $query = "SELECT userID FROM users WHERE username='$username' AND password = '$password'";
    $result = mysql_query($query);
    if (mysql_num_rows($result)==1){
        $user = mysql_fetch_array($result);
        $userID = $user['userID'];
    }else{
        $userID = -1;
    }
    return $userID;
}
?>

berichten.php :
PHP:
1
2
3
4
5
6
7
8
<?
include ('common.php');
include ('berichten/common.php');

if ($new){
  newmsg($sendto,$title,$message,"","");
}
?>

berichten/common.php :
PHP:
1
2
3
4
5
6
<?
function newmsg($sendto,$title,$message,$nosend,$sendtoID){
    include ('berichten/newmsg.php');
}
//let ff niet op al die zooi van parameters erachter, dat boeit voor dit mysql-probleem niet echt....
?>

berichten/newmsg.php :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
if (!$nosend){
  if ($message){
      $link=dbConnect();
      $userID = authcrypt ("$doel[username]", "$doel[password]");
      if ($userID==-1){fout("fout","Je kan geen berichten sturen omdat je niet bent ingelogd");}
        $link=dbconnect();
        sendmsg($sendto,$title,$message,$userID);
      mysql_close($link);
  }
}
//en daaronder weer wat verdere statements, waar de error niet vandaan komt...
?>

In het laatste bestand blijkt dus de $userID gelijk te zijn aan -1 ....

Oftewel, bij authcrypt is de uitkomst uit de database anders dan één regel....

Heb dat probleem wel meer meegemaakt tijdens 't maken van 't script, en dat lag toen aan het feit dat ik geen $link=dbconnect() had gedaan... Maar dat heb ik nu wél gedaan, en hij deed het eerst ook gewoon goed, maar sinds ik alles zo heb opgesplitst begint hij opeens moeilijk te doen???

Waar kan dit nou aan liggen :? :? wát zie ik over het hoofd :?

Verwijderd

krijg je errors? wat heb je verder gedaan om te debuggen?
print $doel["username"] en $doel["password"] eens uit, plaats ze eerst in een normale string voordat je ze in de functie gebruikt enz.

  • jwbagger
  • Registratie: Februari 2001
  • Laatst online: 11-08 15:50

jwbagger

,.-~'`'~-.,

Topicstarter
Op zaterdag 09 februari 2002 21:09 schreef jurriebur het volgende:
krijg je errors? wat heb je verder gedaan om te debuggen?
print $doel["username"] en $doel["password"] eens uit, plaats ze eerst in een normale string voordat je ze in de functie gebruikt enz.
Ik krijg geen expliciete errors van php of mysql. De enige error die ik krijg is de error "je bent niet ingelogd" uit m'n eigen script, terwijl ik dat volgens andere delen van de scripts wél ben :?

De variabelen $doel["username"] en $doel["password"] bevatten na een print-controle inderdaad de waardes die ze moeten bevatten (het zijn cookies bytheway).
Plaatsen hiervan in een normale string kan volgens mij niet helpen, want toen ik ze op dezelfde manier had gebruikt toen ik het script in minder bestanden had verdeeld, werkte het wél op deze manier... Lijkt me dus niet de oorzaak?

De fout ligt volgens mij bij de $link=dbconnect(); - statement. Het lijkt erop dat hij deze connect niet meepakt naar de functie authcrypt(). De mysql-query lijkt daardoor opeens geen regels te produceren, terwijl dat dus wél het geval zou moeten zijn.

maar hoe kan ik dat verhelpen :? ik zie blijkbaar iets totaal over het hoofd, maar kom er niet uit wát :?

  • OxiMoron
  • Registratie: November 2001
  • Laatst online: 27-06 10:54
ehh als je variabelen van buiten de functie wilt gebruiken heb je 2 opties:

1. meegeven
2. in de funtie global $variabele; neerzetten

Albert Einstein: A question that sometime drives me hazy: Am I or are the others crazy?


  • jwbagger
  • Registratie: Februari 2001
  • Laatst online: 11-08 15:50

jwbagger

,.-~'`'~-.,

Topicstarter
Op zaterdag 09 februari 2002 22:21 schreef OxiMoron het volgende:
ehh als je variabelen van buiten de functie wilt gebruiken heb je 2 opties:

1. meegeven
2. in de funtie global $variabele; neerzetten
optie 2 heb ik geprobeerd, maar dat hielp dus niet ;(

ik heb: global $link; bij de functie authcrypt in common.php gezet. Daar moet hij dan toch komen :?

Trouwens, authcrypt is altijd al een aparte functie geweest, en werkte voorheen gewoon zónder dat ik een global had gedefinieerd :?

Overigens, het gaat nu niet echt om de variabele $link geloof ik, maar eerder om het feit of PHP nog wel een verbinding heeft met MYSQL of niet... Dat zit niet in variabelen volgens mij? Maar hij raakt die verbinding ergens blijkbaar toch kwijt ofzo... :?

Verwijderd

PHP:
1
2
3
<?
$userID = authcrypt ("$doel[username]", "$doel[password]");
?>

die regel, maak die es ::
PHP:
1
2
3
<?
$userID = authcrypt($doel['username'], $doel['password']);
?>

en voer hem dan nog eens uit. (niet getest ofzo, maar dit leek mij de fout )

Verwijderd

Op zaterdag 09 februari 2002 22:21 schreef OxiMoron het volgende:
ehh als je variabelen van buiten de functie wilt gebruiken heb je 2 opties:

1. meegeven
2. in de funtie global $variabele; neerzetten
als je daarmee de mysql link identifier bedoelt ( $link hierzo ) dan hoeft dat niet.
het is namelijk zo dat mysql_query() altijd de query uitvoert op de link die het laatst gemaakt is ( PHP handelt dit zelf af namelijk )
bij andere variabelen moet je dit wel doen jah :)

  • jwbagger
  • Registratie: Februari 2001
  • Laatst online: 11-08 15:50

jwbagger

,.-~'`'~-.,

Topicstarter
Op zaterdag 09 februari 2002 22:58 schreef TheViP het volgende:
PHP:
1
2
3
<?
$userID = authcrypt ("$doel[username]", "$doel[password]");
?>

die regel, maak die es ::
PHP:
1
2
3
<?
$userID = authcrypt($doel['username'], $doel['password']);
?>

en voer hem dan nog eens uit. (niet getest ofzo, maar dit leek mij de fout )
klinkt aannemelijk jah... heb 't veranderd, maar blijkbaar was 't allbei even goed :)

want nu doet hij 't nog steeds niet, hij zegt nog steeds dat ik niet ben ingelogd ;(

Verwijderd

Ik zou dbconnect() aanroepen vanuit authcrypt().
(Persoonlijke keus, zou eigenlijk niet uit moeten maken)

En als het dan nog niet werkt, probeer dan dan eens
PHP:
1
2
3
4
<?
$result = mysql_query($query)
    or die (mysql_error());
?>

Geeft meestal wel nuttige hints wat er mis is.

  • jwbagger
  • Registratie: Februari 2001
  • Laatst online: 11-08 15:50

jwbagger

,.-~'`'~-.,

Topicstarter
Op zondag 10 februari 2002 10:41 schreef peidor het volgende:
Ik zou dbconnect() aanroepen vanuit authcrypt().
(Persoonlijke keus, zou eigenlijk niet uit moeten maken)
Idd, het maakte niet uit ;(
En als het dan nog niet werkt, probeer dan dan eens
PHP:
1
2
3
4
<?
$result = mysql_query($query)
    or die (mysql_error());
?>

Geeft meestal wel nuttige hints wat er mis is.
ik heb nu
PHP:
1
2
3
<?
$result = mysql_query($query) or die (mysql_error());
?>

maar daar fietst hij gewoon vrolijk overheen. De query wordt dus wel uitgevoerd, maar levert 0 resultaten op, lijkt wel...

Om daarvan zeker te zijn, heb ik de proef op de som genomen:
PHP:
1
2
3
<?
die (mysql_num_rows($result));
?>

En inderdaad, er kwam een 0 uit.

Dat zette me aan het denken. De query werd dus wél uitgevoerd, maar de username/password combinatie leek opeens onjuist te zijn en daardoor geen resultaten op te leveren. Hmmm....

Heb er een halfuurtje over na moeten denken, tot ik er eindelijk achter was waar nou het probleem zat, en wat ik nou over het hoofd had gezien:

in berichten/newmsg.php :
PHP:
1
2
3
<?
global $doel;
?>

De cookie $doel was niet global gemaakt |:( Daardoor kon newmsg.php geen juiste uitvoer geven natuurlijk....

Heb de $doel nu global gemaakt, en er komt weer een 1 uit de mysql_num_rows :) :)

* jwbagger is weer helemaal happy :) en bedankt iedereen met het hoofdbreken over dit stomme probleem :)

moraal van het verhaal: check altijd of iedere variabele die je bebruikt, wel daadwerkelijk in die functie voorkomt! Door includes kan je (= ik dus :P ) het overzicht een "beetje" kwijtraken, en daardoor niet meer zien waar alle variabelen zijn gebleven :)

tnx nogmaals iedereen :)
Pagina: 1