Avatar billede clausga Nybegynder
17. juli 2006 - 23:24 Der er 29 kommentarer og
1 løsning

Kode virker lige pludselig ikke mere ?

$q = mysql_query("(SELECT *, CONCAT(LEFT(info, 150), '...') AS short FROM produkter WHERE gruppe = '$kid' && titel LIKE 'gris%' ORDER by titel DESC)
UNION
(SELECT *, CONCAT(LEFT(info, 150), '...') AS short FROM produkter WHERE gruppe = '$kid' && titel NOT LIKE 'gris%' ORDER by titel DESC)");

<----- dette her virket fint i 1 år nu virker det pludselig ikke mere ?? hvorfor ? jeg får fejl

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Avatar billede jaw Nybegynder
17. juli 2006 - 23:26 #1
Start med at smide or die() på:

...ORDER by titel DESC)") or die(mysql_error());

Så vil du få mysql's fejlmeddelelse. Mit bud er, at $kid pludselig ikke indeholder mere, fordi nogle har pillet ved register_globals på serveren. Så skal du bruge $_GET['kid'] eller $_POST['kid'], hvis kid bliver sendt via en form eller adresselinien.
Avatar billede iss Novice
17. juli 2006 - 23:26 #2
Udskriv mysql_error()
Avatar billede clausga Nybegynder
17. juli 2006 - 23:34 #3
det bliver sendt via adresselinien!

HMM meget mystisk nu virker det igen, hvad kan der være sket ? tror i nogle sidder og roder ved serveren ?
Avatar billede tdafoobar Nybegynder
17. juli 2006 - 23:42 #4
a) flyt ALT din SQL i en $sql variable
b) ændre din mysql_query til mysql_query($sql) or die("Fail in SQL<hr><pre>".$sql."</pre><hr><b>".mysql_error()."</b>");

Og så får du en pæn debug visning :p
Avatar billede iss Novice
17. juli 2006 - 23:42 #5
Som jaw skriver, så er det fordi du nok skal bruge $_GET['kid'] istedet for $kid.
Avatar billede jaw Nybegynder
17. juli 2006 - 23:42 #6
Kan jo være ret svært at sige, hvis det virker igen, uden at du har ændret noget. Sikker på, at du ikke stirrede dig blind på et mærkeligt tegn der havde sneget sind i adresselinien eller lign.?
Avatar billede clausga Nybegynder
17. juli 2006 - 23:47 #7
nej for det var de samme links jeg klikke på før/efter jeg fik fejlen(så samme url), og koden var også den samme!

Jeg har også andre sider som også henter fra adresse linien og de virkede også fint(under forløbbet)(og der blev ikke brugt POST eller GET). Så det burde næsten være noget med koden jeg skrev først... men det hele virker nu, men det var da rart at vide hvad fejlen var ??!!
Avatar billede clausga Nybegynder
17. juli 2006 - 23:57 #8
tdafoobar <- er det kun noget man kan bruge når der er fejl, eller gennemgår den kode for at se om den er ok ?
Avatar billede tdafoobar Nybegynder
17. juli 2006 - 23:59 #9
or die() kan bruges når en funktion eller language construct returnere false i tilfælde af fejl.

mysql_error() fortæller dig EXPLICIT hvor fejlen er i din SQL... Burde du have lært i den tutorial du nu har læst for at lære php&mysql.
Avatar billede clausga Nybegynder
18. juli 2006 - 00:03 #10
ok.... hmm kunne jeg ikke lave sådan at den sendte mig en mail med fejlen i hvis det skete igen ?
Avatar billede tdafoobar Nybegynder
18. juli 2006 - 00:08 #11
tjooo..

<?php

...

$sql = "..din sql..";
$res = mysql_query($sql);
if(!res) {
  $msg  = "Fejl i følgende SQL\n\n";
  $msg += $sql;
  $msg += "\n---------------\n";
  $msg += "Fejlmeddelse:\n";
  $msg += mysql_error();
  mail("din@email.tld","FEJL!",$msg);
}

...

?>
Avatar billede clausga Nybegynder
18. juli 2006 - 00:13 #12
Jeg er ikke helt med på hvad du vi have ind i $sql og hvordan! ?
Avatar billede iss Novice
18. juli 2006 - 00:29 #13
Ville nok hellere lave det som en funktion:
function mailsqlerror() {
  $msg  = "Fejl i følgende SQL\n\n";
  $msg += $sql;
  $msg += "\n---------------\n";
  $msg += "Fejlmeddelse:\n";
  $msg += mysql_error();
  mail("din@email.tld","FEJL!",$msg);
}

Og så kalde den:
$res = mysql_query($sql) or mailsqlerror();
Avatar billede jaw Nybegynder
18. juli 2006 - 00:33 #14
Og hvad angår $sql, så se tdafoobar's indlæg kl. 23:42:00 ->

I stedet for:

$query = mysql_query("SELECT ......");

Så:
$sql = "SELECT .....";
$query = mysql_query($sql) or mailsqlerror();
Avatar billede clausga Nybegynder
18. juli 2006 - 00:37 #15
Så det bliver sådan her ?:

$sql = "(SELECT *, CONCAT(LEFT(info, 150), '...') AS short FROM produkter WHERE gruppe = '$kid' && titel LIKE 'gris%' ORDER by titel DESC) UNION (SELECT *, CONCAT(LEFT(info, 150), '...') AS short FROM produkter WHERE gruppe = '$kid' && titel NOT LIKE 'gris%' ORDER by titel DESC)";

$query = mysql_query("$sql") or mailsqlerror();

eller ?
Avatar billede iss Novice
18. juli 2006 - 00:38 #16
Ja, og så husk at have:
function mailsqlerror() {
  $msg  = "Fejl i følgende SQL\n\n";
  $msg += $sql;
  $msg += "\n---------------\n";
  $msg += "Fejlmeddelse:\n";
  $msg += mysql_error();
  mail("din@email.tld","FEJL!",$msg);
}
Med et eller andet sted, evt i en fil du includer.
Avatar billede clausga Nybegynder
18. juli 2006 - 00:44 #17
Ja den sender en mail hvis der opstår en fejl...men der stod bare 0 i mailen (ændrede WHERE gruppe.... til WHERE gru)
Avatar billede jaw Nybegynder
18. juli 2006 - 00:47 #18
Kan du ikke paste lidt af den kode du har?
Avatar billede clausga Nybegynder
18. juli 2006 - 00:49 #19
Koden er jo lige som i mit svar 00:37:24

+

Mail funktionen

hvilken anden kode tænker du på ?
Avatar billede iss Novice
18. juli 2006 - 00:50 #20
function mailsqlerror($sql) {
  $msg  = "Fejl i følgende SQL\n\n";
  $msg .= $sql;
  $msg .= "\n---------------\n";
  $msg .= "Fejlmeddelse:\n";
  $msg .= mysql_error();
  mail("din@email.tld","FEJL!",$msg);
}
Og kaldes:
$query = mysql_query($sql) or mailsqlerror($sql);
Avatar billede jaw Nybegynder
18. juli 2006 - 00:51 #21
Skulle lige til at rette + til . :)
Avatar billede clausga Nybegynder
18. juli 2006 - 00:57 #22
så virker det, så må vi se om fejlen dukker op igen:

Fejlmeddelse:
Unknown column 'grupe' in 'where clause'

Men skal det ikke være:
$query = mysql_query("$sql") or mailsqlerror("$sql"); istedet for
$query = mysql_query($sql) or mailsqlerror($sql);

Altså med "" ?
Avatar billede jaw Nybegynder
18. juli 2006 - 00:58 #23
Nej, ".." skal ikke med, når det er en variabel du indsætter. Og hvad fejlmeddelelsen angår, skulle der så ikke stå "gruppe" med 2 p'er? Eller det var måske en provokeret fejl? :) Men godt at det virker!
Avatar billede iss Novice
18. juli 2006 - 00:59 #24
Næææ, $sql er en string...
Avatar billede clausga Nybegynder
18. juli 2006 - 01:00 #25
Ok kan se det virker både med og unden ;) nå men nu er det bare at vente og se om det dukker op igen...tak for hjælpen smid svar!
Avatar billede clausga Nybegynder
18. juli 2006 - 01:07 #26
Ja det var for at se om jeg kunne få en fejl frem :)
Avatar billede jaw Nybegynder
18. juli 2006 - 01:10 #27
Ok :) Ved ikke hvem du ønsker svar fra, dit oprindelige spørgsmål var der jo egentlig ikke nogen af os, der kunne hjælpe med?! Jeg smider et svar, så afviser du bare, hvis du mener det - selv tak!

Og ja, det virker også med "..", men det er syntaxmæssigt forkert, og en stramt opsat server, vil opfatte det som en fejl.
Avatar billede jaw Nybegynder
18. juli 2006 - 01:10 #28
Hov, her kommer så det svar...
Avatar billede clausga Nybegynder
18. juli 2006 - 01:13 #29
Nej det var heller ikke et nemt problem at finde en løsning på da det forsvandt igen, men nu har i dag hjulpet med at kunne opdage den igen hvis den kommer ;)

så point til: jaw, iss & tdafoobar ;)
Avatar billede iss Novice
18. juli 2006 - 08:49 #30
Nej, 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