rzrMedlem sedan apr. 20045 inlägg Hejsan!
Blev tipsad om det här forumet av en kompis och tänkte kolla om någon här kan hjälpa mig med ett problem som jag har brottats med ett tag. :)
Håller på att lära mig php både i skolan och på fritiden och sitter nu och håller på med ett projekt, där jag hade tänkt mig att göra ett community. Dock så har jag fastnat på en sak där jag har letat efter felet tills ögonen blöder utan att kunna hitta det.
Det är tänkt att man ska kunna gå till en 'egen sida' (krypin, om ni så vill ;)), men när man har fyllt i ett fält (har bara ett att testa med just nu) och trycker på uppdatera så får jag fram ett fel som jag inte hittar så mycket information om, nämligen:
Warning: Supplied argument is not a valid MySQL-Link resource in /var/www/projekt/change.php on line 34
Det enda jag hittar om detta är att det är någon vajsing på databaskopplingen, men eftersom den infon ligger i en include-fil och funkar på de andra sidorna så kan jag inte fatta vad felet är.
Så är det någon som känner för att kolla igenom koden och säga vad det är jag har gjort fel på? Kan tillägga att jag är total nybörjare fortfarande, vilket säkerligen kommer att synas. :D
Först databaskopplingen:
<?php
$mysql_server = "localhost";
$mysql_user = "user";
$mysql_password = "pass";
$mysql_database = "databas";
$conn = mysql_connect($mysql_server, $mysql_user, $mysql_password);
mysql_select_db($mysql_database, $conn) or die(mysql_error());
?>
Och sedan sidan som det blir fel på. Rad 34 är SQL-satsen i Updatefunktionen:
<?php
session_start();
// Kollar om användaren är inloggad, annars skickas han tillbaks till indexsidan
if (!isset($_SESSION['sess_user']))
{
header("Location: index.php");
exit;
}
include "conn.php";
if (isset($_POST['submit']))
{
Update($usr, $inf);
//header("Location: home.php");
}
echo "<h3>";
echo $_SESSION['sess_user'];
echo "</h3>";
function Update($usr, $inf)
{
$sql = "UPDATE info SET fakta=\"$inf\" WHERE user=\"$usr\"";
mysql_query($sql);
echo $inf; // för felsökning
echo mysql_error($sql);
//header("Location: home.php");
}
$usr = $_SESSION['sess_user'];
$sql = "SELECT * FROM info WHERE user='$usr'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
$inf = $row['fakta'];
$namn = $row['name']; //används inte än
?>
<head>
<link rel="stylesheet" href="look.css">
</head>
<form action="change.php" method="post">
<table width="200" border="0">
<tr>
<td>
Name:
<br>
<input type="text" name="name" class="skugga">
</td>
<td>
Gender:
<br>
<input type="text" name="gender" class="skugga">
</td>
</tr>
<tr>
<td>
Mail:
<br>
<input type="text" name="mail" class="skugga">
</td>
<td>
Age:
<br>
<input type="text" name="age" class="skugga">
</td>
</tr>
</table>
<br>
<textarea name="info" rows="15" cols="50" wrap="virtual" class="skugga"><?=$row['fakta'] ?></textarea>
<br><br>
<input type="submit" name="submit" value="Ok">
</form>
MatteMedlem sedan aug. 20002 975 inlägg Någon skillnad om du skriver
mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
Men detta felmeddelande brukar man se vid mysql_result(), mysql_fetch_assoc() eller lioknande, så det kan inte eventuellt vara några rader ner, där du kan testa med:
$result = mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
rzrMedlem sedan apr. 20045 inlägg Testade att ändra på båda ställena, men det kommer inte fram några mer felmeddelanden. :l
PeeerMedlem sedan mars 20025 907 inlägg Eftersom sql-satsen ligger i en funktion så är inte variabeln $conn nåbar. Prova att göra variabeln global innan du försöker köra sql-satsen
function Update($usr, $inf)
{
global $conn;
$sql = "UPDATE info SET fakta=\"$inf\" WHERE user=\"$usr\"";
mysql_query($sql);
echo $inf; // för felsökning
echo mysql_error($sql);
//header("Location: home.php");
}
rzrMedlem sedan apr. 20045 inlägg Ah, det funkade bättre. Nu visas felen i 'or die()' i alla fall :)
Nu visas det här istället:
SQL: UPDATE info SET fakta= WHERE user=''
You have an error in your SQL syntax near 'WHERE user=''' at line 1
Så jag testade att göra $inf och $usr globala med, men det gjorde ingen skillnad. Testade också att sätta variablerna över funktionen, och då fick jag ett annat fel, nämligen:
SQL: UPDATE info SET fakta=testar WHERE user='test'
Unknown column 'testar' in 'field list'
Då visas i alla fall variablerna, även att fakta= visar vad som stod innan jag uppdaterade. Fast om jag har fattar rätt så ska funktioner alltid vara överst i koden, eller är det bara för att det ser bättre ut?
UlfTMedlem sedan maj 20018 027 inlägg
rzr skrev:
SQL: UPDATE info SET fakta=testar WHERE user='test'
Unknown column 'testar' in 'field list'
Pröva att stoppa in ytterliggare några apostrofer:
UPDATE info SET fakta='testar' WHERE user='test'
rzrMedlem sedan apr. 20045 inlägg Sådärja, äntligen hemma igen. Har varit iväg ett par dagar, därför jag inte har kunnat svara :l
Hursomhelst, nu funkar det äntligen. Gjorde $conn global och testade att ändra
mysql_query($sql) or die("SQL: $sql <br>".mysql_error());
till:
mysql_query($sql, $conn) or die("SQL: $sql <br>".mysql_error());
Tack för hjälpen allhihopa :)
[Edit]
Kan passa på att fråga om en sak till som jag har fastnat på ( :e )
Håller på att göra en sida där man kan se alla användares profiler. Först så går man in på sidan och så visas alla medlemmar med hjälp av:
while ($row = mysql_fetch_row($result))
echo "<a href=\"members.php?check={$row[1]}\">$row[1]</a><br>\n";
Sedan när man trycker på användarens namn så ska det visas lite olika fält med fakta, men det skrivs inte ut. Antar att felet ligger här nånstans, och såhär ser det ut:
<?
if(isset($_GET['check']))
{
$sql = "SELECT * FROM info WHERE user='$row[1]'";
$result = mysql_query($sql);
$row2 = mysql_fetch_assoc($result);
echo "<h3>";
echo $row2[1];
echo "</h3>";
?>
<body>
<table width="200" border="0">
<tr>
<td>
Name:
<br>
<input type="text" name="name" readonly class="skugga" value="<?=$row2['name'];?>">
</td>
osv...
<?
}
?>
Och det funkade tydligen inte speciellt bra.. :)
Hur gör man för att skicka med en hel array till den funktionen?
MatteMedlem sedan aug. 20002 975 inlägg Testa
$sql = "SELECT * FROM info WHERE user='{$_GET['check']}'";