2013-10-02, 18:36
  #1
Medlem
a) kan man inte köra mysqli_query i php functions?
b) varför?
c) finns det någon annan lösning?

koden blir lite rörig när man klistrar in den på detta viset för att notepad++ automatiskt lägger in en massa tabindex

detta stycke kod fungerar
[PHP]
// Kolla om idioten tryckt på bakåt-knappen
if(isset($_SESSION['inloggad']) && $_SESSION['inloggad'] == true)
{
echo 'Du &auml;r redan inloggad, pucko!<br />Du kan <a href="logga_ut.php">Logga ut</a> om du vill<br /><a href="index.php">Okej!</a>';
}
else
{
// Kolla om idioten dubbelklickat på bakåt-knappen
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
echo 'F&auml;ltet f&ouml;r anv&auml;ndarnamn eller l&ouml;senord &auml;r tomt!<br /><a href="index.php">Okej!</a>';
}
else
{
//Formuläret är skickat, nu kontrollerar vi om användarnamn och lösenord är ifyllt
$errors = array();
if(!isset($_POST['alias']))
{
$errors[] = 'N&aring;gra obligatoriska f&auml;lt &auml;r tomma<br /><a href="' . $_SESSION['senaste_sida'] . '">Okej!</a>';
}
if(!isset($_POST['losenord']))
{
$errors[] = 'N&aring;gra obligatoriska f&auml;lt &auml;r tomma<br /><a href="' . $_SESSION['senaste_sida'] . '">Okej!</a>';
}
if(!empty($errors))
{
echo 'N&aring;gra obligatoriska f&auml;lt &auml;r icke ifyllda!<br /><br />';
echo '<ul>';
foreach($errors as $key => $value)
{
echo '<li>' . $value . '</li>';
}
echo '</ul>';
}
else
{
//Användarnamn och lösenord är iffylt, nu kontrollerar vi om de är korrekta
$sql = "SELECT * FROM Anvandare WHERE Anv_Alias = '" . mysqli_real_escape_string($anslutning , $_POST['alias']) . "' AND Anv_Losenord = '" . sha1($_POST['losenord']) . "'";
$result = mysqli_query($anslutning , $sql);
if(!$result)
{
echo 'N&aring;got gick snett vid inloggningen. F&ouml;rs&ouml;k igen senare<br /><a href="' . $_SESSION['senaste_sida'] . '">Okej!</a>';
}
else
{
if(mysqli_num_rows($result) == 0)
{
echo 'Du har angett fel anv&auml;ndarnamn eller l&ouml;senord. F&ouml;rs&ouml;k igen senare<br /><a href="' . $_SESSION['senaste_sida'] . '">Okej!</a>';
}
else
{
$_SESSION['inloggad'] = true;
while($row = mysqli_fetch_assoc($result))
{
$_SESSION['anvandar_id'] = $row['Anv_ID'];
$_SESSION['alias'] = $row['Anv_Alias'];
$_SESSION['behorighet'] = $row['Anv_Behorighet'];
}
echo 'Tack f&ouml;r att du loggade in, <b>' . $_SESSION['alias'] . '</b> <br /><a href="' . $_SESSION['senaste_sida'] . '">Vidare</a>';
}
}
}
}
}
[/PHP]

men lägger man den i en funtion:
function Logga_In()
{
kodstycket ovan
}

och anropar den:
<?php Logga_In(); ?>

så fungerar den inte. har att göra med queryn eller?
Citera
2013-10-02, 20:10
  #2
Medlem
Tvillingens avatar
Det fungerar inte eftersom inte $anslutning är definierat i funktionen. Inom funktionen kan du definiera variabler med samma namn som utanför funktionen, utan att dessa påverkar varandra. Det är en fördel med funktioner, speciellt när man ska återanvända dessa, för då slipper du tänka på att ett namn på en variabel krockar med ett annat. Nedan kommer exempel på hur du kan läsa det, antingen gör du databasuppkopplingen global inom funktionen eller så skickar du med den som en parameter. Jag föreslår det sista alternativet, för då spelar det inte någon roll vad variabeln för databasuppkopplingen heter, utan du behöver bara skicka med den.

[PHP]<?php
$link = mysqli_connect('localhost', 'root', '' ,'db');

//Fungerar utanför funktionen
$result = mysqli_query($link, 'SELECT * FROM table');
var_dump($result);

//Fungerar inte, $link är ej definierad
function withOutLink() {
$result = mysqli_query($link, 'SELECT * FROM table');
var_dump($result);
}
withOutLink();

//Fungerar, vi skickar med $link
function withLink($link) {
$result = mysqli_query($link, 'SELECT * FROM table');
var_dump($result);
}
withLink($link);

//Fungerar, vi gör $link global
function globalLink() {
global $link;
$result = mysqli_query($link, 'SELECT * FROM table');
var_dump($result);
}
globalLink();
?>[/PHP]
Citera
2013-10-03, 11:45
  #3
Medlem
bra förklarat. jag provade att skriva
[PHP]function Logga_In($anslutning)
{
koden
}
Logga_In($anslutning);[/PHP]

och även

[PHP]function Logga_In()
{
global $anslutning;
koden
}
Logga_In();[/PHP]

jag testade även att ta bort _ i funktionsnamnet. utan resultat, eller nu får jag "serverfel" när jag försöker köra. förut fick jag bara ingenting, alltså sidkällan upphör där funktionen ska in.

och koden fungerar såklart om man jag inte kör den som funktion
Citera
2013-10-03, 13:54
  #4
Medlem
Tvillingens avatar
Citat:
Ursprungligen postat av personkemi2.0
bra förklarat. jag provade att skriva
[PHP]function Logga_In($anslutning)
{
koden
}
Logga_In($anslutning);[/PHP]

och även

[PHP]function Logga_In()
{
global $anslutning;
koden
}
Logga_In();[/PHP]

jag testade även att ta bort _ i funktionsnamnet. utan resultat, eller nu får jag "serverfel" när jag försöker köra. förut fick jag bara ingenting, alltså sidkällan upphör där funktionen ska in.

och koden fungerar såklart om man jag inte kör den som funktion

Testa och se vad du får för för felmeddelande, för gissar på att ditt serverfel refererar till databasen? Då ska du använda dig av mysqli_error().

http://php.net/manual/en/mysqli.error.php
Citera
2013-12-24, 18:54
  #5
Medlem
Mixtapessons avatar
Som tvillingen nämnde. Anslutningen är inte definerad i funktionen. Du borde köra proper OOP och dela in alla dina funktioner i en klass ex. users.class.php, sedan skapar du en egen klass för mysqli anslutningen

[PHP]
class mysqliConnection{

var $con;

public function __construct()
{

$this->con = new mysqli("localhost", "root", "lösen", "db");
}

}


sedan för att inkludera detta i dina funktioner så gör du bara extends mysqliConnection. Du borde läs mer om OOP
[/PHP]
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in