Avatar billede xsix Nybegynder
26. september 2007 - 15:37 Der er 20 kommentarer og
1 løsning

Fra post til php til database

Har den her kode, som gerne skulle kunne lægge en intern mail ind i databasen, men får den her error:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/virtual/xsix.dk/public_html/online/sendmail2.php on line 45
Unknown column 'XsiX' in 'where clause'

Og det skal nok lige tages med at den person jeg prøver at skrive til hedder XsiX.

Koden:

<?php
session_start();
if(!$_SESSION[user_id] > 0) {
header("location:index.php");
exit;
}
?>
<?php

include("connect.php");

$query = mysql_query("SELECT * FROM players WHERE id=$_SESSION[user_id]");
$user_data = mysql_fetch_assoc($query) or die(mysql_error());

$query = mysql_query("SELECT * FROM mail");
$mail_data = mysql_fetch_assoc($query) or die(mysql_error());

$query = mysql_query("SELECT * FROM players WHERE accountname=".$_POST[recipient]);
$recipient2 = mysql_fetch_assoc($query) or die(mysql_error());

$new = '1';
$sender = $user_data['accountname'];
$recipient = $recipient2['id'];
$message = $_POST['message'];
$topic = $_POST['topic'];



mysql_query("INSERT INTO mail (new, sender, recipient,message,topic,time)
VALUES ('$new', '$sender', '$recipient', '$message', '$topic', 'now()')");

echo "Your mail have been send to " . $recipient ;
?>
Avatar billede xsix Nybegynder
26. september 2007 - 15:38 #1
Og det er den her som er linje 45:
$recipient2 = mysql_fetch_assoc($query) or die(mysql_error());
Avatar billede michael_stim Ekspert
26. september 2007 - 15:40 #2
$query = mysql_query("SELECT * FROM players WHERE accountname='".$_POST[recipient]."'");
Avatar billede michael_stim Ekspert
26. september 2007 - 15:41 #3
Men den brokker sig over dit kolonnenavn, som i dette tilfälde er accountname. Hedder kolonnen det? Ingen underscore eller store bogstaver eller lign. i navnet?
Avatar billede xsix Nybegynder
26. september 2007 - 15:43 #4
Altså feltnavnet er "accountname", jeg skal så have fat i id'et på ham der har accountnamet "XsiX".
Avatar billede michael_stim Ekspert
26. september 2007 - 15:47 #5
Kommentar: michael_stim
26/09-2007 15:40:01

Så er det ikke särligt flot at have tre forskellige variabler der hedder det samme ($query) ;o)
Avatar billede xsix Nybegynder
26. september 2007 - 15:47 #6
Men nej der er ingen store bogstaver eller underscore, dette er direkte kopiret fra min database:
      accountname      varchar(18)
Avatar billede xsix Nybegynder
26. september 2007 - 15:48 #7
Men gør det nogen forskel når de med det samme bliver lagt over i en anden variable? ($user_data) ($mail_data) ($recipient2)
Avatar billede michael_stim Ekspert
26. september 2007 - 15:51 #8
Men pröv nu alligevel at kopiere min query ;o)
Avatar billede xsix Nybegynder
26. september 2007 - 15:53 #9
Nu udskriver den slet ikke noget, og der bliver heller ikke lagt noget i databasen.
Avatar billede michael_stim Ekspert
26. september 2007 - 15:54 #10
Men du får ingen fejl ;o)
Avatar billede xsix Nybegynder
26. september 2007 - 15:55 #11
Nope, har endda prøvet at ændre den til:
$query3 = mysql_query("SELECT * FROM players WHERE accountname='".$_POST[recipient]."'") or die(mysql_error());

Men der kommer ingen fejlmeddelse :(
Avatar billede michael_stim Ekspert
26. september 2007 - 15:56 #12
Tips: For at debugge, udskriver man sine variabler og sql-strings.
Avatar billede xsix Nybegynder
26. september 2007 - 15:59 #13
Prøvede at skrive det op sådan her, så jeg kunne se hvor det gik galt:

<?php

include("connect.php");

echo "Your mail have been send to " . $recipient ;

$query = mysql_query("SELECT * FROM players WHERE id=$_SESSION[user_id]");
$user_data = mysql_fetch_assoc($query) or die(mysql_error());

echo "Your mail have been send to2 " . $recipient ;

$query2 = mysql_query("SELECT * FROM mail");
$mail_data = mysql_fetch_assoc($query2) or die(mysql_error());

echo "Your mail have been send to3 " . $recipient ;

$query3 = mysql_query("SELECT * FROM players WHERE accountname='".$_POST[recipient]."'") or die(mysql_error());
$recipient2 = mysql_fetch_assoc($query3) or die(mysql_error());

echo "Your mail have been send to4 " . $recipient ;

$new = '1';
$sender = $user_data['accountname'];
$recipient = $recipient2['id'];
$message = $_POST['message'];
$topic = $_POST['topic'];

echo "Your mail have been send to5 " . $recipient ;

mysql_query("INSERT INTO mail (new, sender, recipient,message,topic,time)
VALUES ('$new', '$sender', '$recipient', '$message', '$topic', 'now()')");

echo "Your mail have been send to6 " . $recipient ;
?>
</p>

Den udskrev det her:

  Your mail have been send to XsiXYour mail have been send to2 XsiX
Avatar billede michael_stim Ekspert
26. september 2007 - 16:02 #14
Du har denne her:

$query2 = mysql_query("SELECT * FROM mail");
$mail_data = mysql_fetch_assoc($query2) or die(mysql_error());

Hvilken formodentlig henter mere end én räkke???
Skal der ikke en WHERE på?
Avatar billede xsix Nybegynder
26. september 2007 - 16:02 #15
Men den udskriver $recipient2['id']; som "X" :S
Avatar billede xsix Nybegynder
26. september 2007 - 16:04 #16
Nej for den bliver slet ikke brugt i denne sammenhænge, men jeg slettede den lige, og nu virker det vist :D Takker :P
Avatar billede michael_stim Ekspert
26. september 2007 - 16:05 #17
Og $query 1 og 3 (formodentlig også 2) kan slås sammen til én.

SELECT * FROM players WHERE accountname='".$_POST[recipient]."' AND id=".$_SESSION['user_id']."
Avatar billede michael_stim Ekspert
26. september 2007 - 16:06 #18
Og dagens sidste tip ;o) Hent kun det data ud som skal bruges. Det nytter ikke noget at man kalder * når man kun skal bruge f ex id.
Avatar billede xsix Nybegynder
26. september 2007 - 16:13 #19
hehe okay, mange tak igen :) Poster du lige et svar for point ;)
Avatar billede michael_stim Ekspert
26. september 2007 - 16:15 #20
Ellers tak, samler ikke på point ;o) Läg selv et svar og accepter.
Avatar billede xsix Nybegynder
26. september 2007 - 17:31 #21
Okay, mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester