Avatar billede ofirpeter Nybegynder
21. marts 2004 - 21:02 Der er 13 kommentarer og
2 løsninger

Find fejlen ( i mysql_fetch_row )

Jeg har lavet et simpelt login script, hvor man bare skal taste en kode for at komme ind, men det virker ikke efter hensigten.
Hvis man taster rigtigt virker det, men hvis koden ikke findes, skriver den:

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/web/gb1404/tilfreds/index.php on line 10

Scriptet ser således ud:

$kode_tjek = mysql_query("SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'");
if($r = mysql_fetch_row($kode_tjek)){

    $raekke = mysql_fetch_array($kode_tjek);                                           
    $_SESSION['kode'] =  $raekke['kode'];
    header("Location: index1.php");         
                       
}else{
$fejl = "Du har indtastet en forkert kode";
}}
Avatar billede fangel Nybegynder
21. marts 2004 - 21:05 #1
ændre

$kode_tjek = mysql_query("SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'");

til

$kode_tjek = mysql_query("SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'")or die(mysql_error());

så, hvis mysql_query fejl, vil du se MySQL fejlmeddelse - og du kan derved finde fejlen...

Morten
Avatar billede melange Nybegynder
21. marts 2004 - 21:07 #2
den klager jo over at $kode_tjek ikke kan puttes ind i mysql_fetch_row().
Prøv lige at spytte din query ud, så du er sikker på den virkelig indeholder, det den burde indeholde :)

altså:
$query = "SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'";
echo $query;
$kode_tjek = mysql_query($query);
if($r = mysql_fetch_row($kode_tjek)){
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 21:11 #3
dea_pg så fortæller den mig jo bare at $kode ikke findes. Og det er jo også rigtig nok.. Men så ville jeg bare gerne have den til at skrive en fejlmeddelse!


melange: Mener du således? Der er ingen forskel, den skrive stadig samme fejl..

$kode_tjek = mysql_query("SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'");
echo $query;
$kode_tjek = mysql_query($query);
if($r = mysql_fetch_row($kode_tjek)){

    $raekke = mysql_fetch_array($kode_tjek);                                           
    $_SESSION['kode'] =  $raekke['kode'];
    header("Location: index1.php");         
                       
}else{
$fejl = "Du har indtastet en forkert kode";
}}
Avatar billede fangel Nybegynder
21. marts 2004 - 21:15 #4
peter -> øhhhh, laver den en "Notice: undefined variable", eller hvad? - for forskellen på mit og dit er bare at min udskriver MySQL fejl hvis dit SQL-query ikke er et "lovligt" SQL-kald...

Morten
Avatar billede fangel Nybegynder
21. marts 2004 - 21:18 #5
prøv lige følgende:

---
if(isset($kode)){
  $query = "SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'";
  $kode_tjek = mysql_query($query)or die("MySQL brokkede sig over linien:<br>" . $query . "<br>MySQL sagde:<br>" . myqsl_error());
  if(mysql_num_rows($kode_tjek) > 0){

    $raekke = mysql_fetch_row($kode_tjek);                                         
    $_SESSION['kode'] =  $raekke[0];
    header("Location: index1.php");       
  }
  else{
    $fejl = "Du har indtastet en forkert kode";
  }
}
else{
  echo "Din ged, du har ikke sat \$kode til noget...";
}
---

og skriv output fra det...

Morten
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 21:18 #6
Nåh, Den skriver præcist Table 'gb1404.tilfreds_hng_kode' doesn't exist
Avatar billede fangel Nybegynder
21. marts 2004 - 21:22 #7
og hvad betydder det... "tabellen 'tilfreds_hng_kode' i databasen 'gb1404' findes ikke"... så der har du din fejl... tabellen findes ikke, og du kan derfor ikke hente nogle rækker...

Morten
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 21:22 #8
Så får jeg: Fatal error: Call to undefined function: myqsl_error() in /home/web/gb1404/tilfreds/index.php on line 10

Du får lige hele scriptet for en sikkerheds skyld :)

<?php
session_start();
if(isset($_REQUEST['Submit'])) {
require("conn.php");
$input = $_REQUEST['input'];
$navnekode = substr("$input", 0, 3); // Skriver firmakoden
$kode = substr("$input", 3, 8); // Skriver de 7 variable tegn

  $query = "SELECT kode FROM tilfreds_".$navnekode."_kode WHERE kode='$kode'";
  $kode_tjek = mysql_query($query)or die("MySQL brokkede sig over linien:<br>" . $query . "<br>MySQL sagde:<br>" . myqsl_error());
  if(mysql_num_rows($kode_tjek) > 0){

    $raekke = mysql_fetch_row($kode_tjek);                                         
    $_SESSION['kode'] =  $raekke[0];
    header("Location: index1.php");       
  }
  else{
    $fejl = "Du har indtastet en forkert kode";
  }
}
else{
  echo "Din ged, du har ikke sat \$kode til noget...";
}

?>
Avatar billede fangel Nybegynder
21. marts 2004 - 21:33 #9
du må godt gætte selv... det skader ikke... det skal selvfølgelig være mysql_error() istedet for myqsl_error())

MEN, fejlen er, som skrevet 21:22:23 (fedt tidspunkt forresten), at tabellen ikke findes

Morten
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 21:37 #10
Det er jeg ked af, den havde jeg ikke set.

Jamen, det er jo netop det der er pointen, når tabelen ikke findes, så skal den skrive fejlmeddelsen.
Avatar billede fangel Nybegynder
21. marts 2004 - 22:04 #11
det er væsenligt sværre at tjekke om tabeller findes - så din opbygning er helt forkert - tabelnavne bør aldrig være dynamisk... man bør have en fåtal af tabeller og så lidt flere felter i disse...

Morten
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 22:38 #12
Men jeg er bange for at få alt for mange rækker i hver tabel, jeg får nemt 10000 eller 50000 rækker? Bliver dette ikke problematisk?
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 23:00 #13
Nå. Søgte lidt rundt og fandt ud af det faktisk ikke var noget problem. Håber det er ok jeg tager halvdelen selv.
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 23:00 #14
-
Avatar billede ofirpeter Nybegynder
21. marts 2004 - 23:02 #15
Ej det var egentlig ikke særlig fair: http://www.eksperten.dk/spm/480237
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