Avatar billede cozey Nybegynder
11. april 2009 - 18:09 Der er 20 kommentarer og
1 løsning

fejl i "update_user" script!?

Hej.
Jeg har fundet et script (til at tilføje brugerdata til en DB), som jeg har lidt svært ved at finde hoved og hale i. det hele virker, bortset fra når man vil redigere informationer for en bruger. Følgende er min kode
----------------------------------------
I toppen (over html-tagget) har jeg følgende:

<?php
session_start();
require("./CustomSql.inc.php");

if (!(session_is_registered("CID"))){
    print "<a href=\"login.php\">$front_pleaselogin</a>";
    exit;
}

$db = new CustomSQL($DBName);
$showtable = true;
$errortag = false;
if (!empty($edituser)) {
   
if (empty($email)){
    $errortag = true;
    $errormsg = $error_emailempty;
}

if ($email!=$emailretype){
    $errortag = true;
    $errormsg = $error_emailretypewrong;
}

if (!$errortag){
    $db->edituser($email,$navn,$adresse,$postnr,$by,$telefon,$CID);
    $showtable = false;
}

}

$userinfo = $db->getuserinfobyid($CID);
$email = $userinfo[0]["email"];
$navn = $userinfo[0]["navn"];
$adresse = $userinfo[0]["adresse"];
$postnr = $userinfo[0]["postnr"];
$by = $userinfo[0]["by"];
$telefon = $userinfo[0]["telefon"];

?>

------------------------------------------------------------
Selve formen ser således ud:

          <?php
          if ($showtable){
          ?>                   
<form action="<?php print "$PHP_SELF"; ?>" method="POST">
<table border=0 cellpadding=2 cellspacing=2>
<tr><td width="120"><?php print "$front_email"; ?> : </td><td><input type="text" name="email" value="<?php print "$email"; ?>"> <font color="#FF0000">*</font></td></tr>
<tr><td>Gentag email : </td><td><input type="text" name="emailretype" value=""> <font color="#FF0000">*</font></td></tr>
<tr><td>Navn : </td><td><input type="text" name="navn" value="<?php print "$navn"; ?>"></td></tr>
<tr><td>Adresse : </td><td><input type="text" name="adresse" value="<?php print "$adresse"; ?>"></td></tr>
<tr><td>Postnummer : </td><td><input type="text" name="postnummer" value="<?php print "$postnr"; ?>"></td></tr>
<tr><td>By : </td><td><input type="text" name="by" value="<?php print "$by"; ?>"></td></tr>
<tr><td>Telefonnummer : </td><td><input type="text" name="telefon" value="<?php print "$telefon"; ?>"></td></tr>
<tr><td></td><td><input type="submit" name="edituser" value="Ret information"></td></tr>
</table>
</form>   
          <?php
    }
    else{
    ?>
    <a href="login.php"><?php print "$front_back"; ?></a>
    <?php
    }
    ?>

---------------------------------------------------------
og til sidst har jeg følgende funktion (i en anden fil):

  function getuserinfobyid($customerid)
  {     
      $sql = "select * from customer where customerid='$customerid'";
      $result = $this->select($sql);
      return $result;
  }


OG


  function edituser($email,$navn,$adresse,$postnr,$by,$telefon,$customerid)
  {
      $sql = "update customer set email='$email',navn='$navn',adresse='$adresse',postnr='$postnr',by='$by',telefon='$telefon' where customerid='$customerid'";     
      $results = $this->update($sql);
      return $results;
  }



Den kan sagtens hive resultater ud fra Databasen, men når jeg retter dem og trykker submit retter den intet i databasen.

Håber nogle kan hjælpe mig.

På forhånd tak.

MVH.
Daniel
Avatar billede mibu Nybegynder
11. april 2009 - 19:17 #1
Er ikke selv nogen haj til det her, men har du prøvet at smække >> or die (mysql_error()); << bag på, det har mange gange givet mig en ide om hvor jeg skal finde fejlen.

Ellers har jeg også prøvet at teste om min "Update" virker ved at manuelt indsætte nogle data, noget á la :

{
      $sql = "update customer set email='test',navn='test',adresse='test',postnr='test',by='test',telefon='test' where customerid='Tilfældigt id'";     
      $results = $this->update($sql);
      return $results;
  }
Avatar billede cozey Nybegynder
11. april 2009 - 20:08 #2
Hvor skal jeg sætte (mysql_error());  ind henne?... synes det giver fejl uanset hvor jeg forsøger.
Avatar billede CCodam Nybegynder
11. april 2009 - 21:46 #3
Ligger dine 2 funktioner i filen CustomSql.inc.php? eller en helt tredje fil?
Avatar billede cozey Nybegynder
11. april 2009 - 22:01 #4
De ligger begge i den... sammen med en del andre funktioner.
Avatar billede dkfire Nybegynder
11. april 2009 - 23:19 #5
Hvordan ser din update metode ud for din CustomSQL class ?
Avatar billede cozey Nybegynder
12. april 2009 - 01:44 #6
dkfire: Er ikke lige helt med på hvad du mener...?
Avatar billede encorez Nybegynder
12. april 2009 - 10:47 #7
Jeg synes du skal starte med at sætte dine egne statiske data ind i updaten.
Som her under.
Ret selv hvis nogle af variablerne skal være tal. og customerid skal måske være andet end 10.

$sql = "update customer set email='test',navn='test',adresse='test',postnr='test',by='test',telefon='test' where customerid='10'";     
      $results = $this->update($sql);
      return $results;

Det er bare et sted at starte for at se om det er din funktionalitet mod databasen den er galt med eller om det er et sted mellem formen og update-funktionen der ikke virker.
Avatar billede macho Praktikant
12. april 2009 - 12:19 #8
Det er ikke helt nemt at finde ud af fejlen, hvis ikke vi kan se filerne i deres fulde længde.

Har du mulighed for at lægge et link til filerne (i .txt format), så vil jeg kikke på det.

Dog ser det ikke ud som om, at du får sendt din customerid med over fra formen? Du bør tilføje et hidden field i formen, som f.eks.:

<input type="hidden" name="costumerid" value="<?php print "$costumerid"; ?>">

Bare et forslag?
Avatar billede cozey Nybegynder
12. april 2009 - 12:59 #9
macho>>>
Jeg har lige prøvet et hidden field, desværre uden held. Her er de fulde filer:

ret_info.php:
-----------------------------------------------------------------

<?php
session_start();
require("./CustomSql.inc.php");

if (!(session_is_registered("CID"))){
    print "<a href=\"login.php\">$front_pleaselogin</a>";
    exit;
}

$db = new CustomSQL($DBName);
$showtable = true;
$errortag = false;
if (!empty($edituser)) {
   
if (empty($email)){
    $errortag = true;
    $errormsg = $error_emailempty;
}

if ($email!=$emailretype){
    $errortag = true;
    $errormsg = $error_emailretypewrong;
}

if (!$errortag){
    $db->edituser($email,$navn,$adresse,$postnr,$by,$telefon,$CID);
    $showtable = false;

}
}

$userinfo = $db->getuserinfobyid($CID);
$email = $userinfo[0]["email"];
$navn = $userinfo[0]["navn"];
$adresse = $userinfo[0]["adresse"];
$postnr = $userinfo[0]["postnr"];
$by = $userinfo[0]["by"];
$telefon = $userinfo[0]["telefon"];

?>
<HTML>
<HEAD>
<TITLE>Ret dit kodeord</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=<?php print "$front_charset"; ?>">
<link rel="stylesheet" href="./style/style.css" type="text/css">
<style>
a:link
{
color: black;
text-decoration: none;
font-family: tahoma;
}

a:visited
{
color: black;
text-decoration: none;
font-family: tahoma;
}

a:hover
{
color: black;
text-decoration: underline;
font-family: tahoma;
}

a:active
{
color: black;
text-decoration: none;
font-family: tahoma;
}
</style>
<script language="JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->
</script>
</HEAD>
<BODY BGCOLOR=#FFFFFF LEFTMARGIN=0 TOPMARGIN=0 MARGINWIDTH=0 MARGINHEIGHT=0>
<CENTER>
<TABLE WIDTH=700 BORDER=0 CELLPADDING=0 CELLSPACING=0>
    <TR>
        <TD COLSPAN=8>
            <a href="http://www.vindue.proinmotion.dk/" border="0"><IMG SRC="images/top.gif" border="0" WIDTH=700 HEIGHT=139 ALT=""></a></TD>
    </TR>
    <TR>
        <TD COLSPAN=8>
            <IMG SRC="images/menu_over.gif" WIDTH=700 HEIGHT=7 ALT=""></TD>
    </TR>
    <TR>
        <TD COLSPAN=2>
            <IMG SRC="images/navigering.gif" WIDTH=146 HEIGHT=21 ALT=""></TD>
        <TD>
            <a href="http://www.vindue.proinmotion.dk/tilmeld.php" border="0"><IMG SRC="images/tilmeld.gif" border="0" WIDTH=64 HEIGHT=21 ALT=""></a></TD>
        <TD>
            <a href="http://www.vindue.proinmotion.dk/konceptet.php" border="0"><IMG SRC="images/konceptet.gif" border="0" WIDTH=84 HEIGHT=21 ALT=""></a></TD>
        <TD>
            <a href="http://www.vindue.proinmotion.dk/kontakt.php" border="0"><IMG SRC="images/kontakt.gif" border="0" WIDTH=62 HEIGHT=21 ALT=""></a></TD>
        <TD>
            <a href="http://www.vindue.proinmotion.dk/login.php" border="0"><IMG SRC="images/menu_05.gif" border="0" WIDTH=209 HEIGHT=21 ALT=""></a></TD>
        <TD>
            <a href="http://www.proinmotion.dk/" border="0"><IMG SRC="images/pim.gif" border="0" WIDTH=122 HEIGHT=21 ALT=""></a></TD>
        <TD>
            <IMG SRC="images/menu_07.gif" WIDTH=13 HEIGHT=21 ALT=""></TD>
    </TR>
    <TR>
        <TD COLSPAN=8>
            <IMG SRC="images/menu_under.gif" WIDTH=700 HEIGHT=11 ALT=""></TD>
    </TR>
    <TR>
        <TD>
            <IMG SRC="images/main_11.gif" WIDTH=140 ALT=""></TD>
        <TD COLSPAN=6 WIDTH=547 valign="top" align="center">
<FONT face="tahoma" size="2">
<?php
include("a_menu.php");
?>
<BR>
<center><U>Ret dine personlige informationer</U></center><BR><BR>
<center>

<table border="0" cellspacing="0" cellpadding="4" width="60%">
        <tr>
          <td bgcolor="#F2F2F2" class="menu_in">::<?php print "$front_modiinfo"; ?>&nbsp;&nbsp;&nbsp;<font color="#FF0000">*</font>&nbsp;<?php print "$front_requiredinfo"; ?></td>
        </tr>
        <?php
        if ($errortag){
        ?>
        <tr>
          <td><font color="#FF0000"><?php print "$errormsg"; ?></font></td>
        </tr>
        <?php
        }
        ?>
        <tr>
          <td>
          <?php
          if ($showtable){
          ?>                   
<form action="<?php print "$PHP_SELF"; ?>" method="POST">
<table border=0 cellpadding=2 cellspacing=2>
<tr><td width="120"><?php print "$front_email"; ?> : </td><td><input type="text" name="email" value="<?php print "$email"; ?>">&nbsp;<font color="#FF0000">*</font></td></tr>
<tr><td>Gentag email : </td><td><input type="text" name="emailretype" value="">&nbsp;<font color="#FF0000">*</font></td></tr>
<tr><td>Navn : </td><td><input type="text" name="navn" value="<?php print "$navn"; ?>"></td></tr>
<tr><td>Adresse : </td><td><input type="text" name="adresse" value="<?php print "$adresse"; ?>"></td></tr>
<tr><td>Postnummer : </td><td><input type="text" name="postnr" value="<?php print "$postnr"; ?>"></td></tr>
<tr><td>By : </td><td><input type="text" name="by" value="<?php print "$by"; ?>"></td></tr>
<tr><td>Telefonnummer : </td><td><input type="text" name="telefon" value="<?php print "$telefon"; ?>"></td></tr>
<input type="hidden" name="costumerid" value="<?php print "$costumerid"; ?>">
<tr><td></td><td><input type="submit" name="edituser" value="Ret information"></td></tr>
</table>
</form>   
          <?php
    }
    else{
    ?>
    <a href="login.php"><?php print "$front_back"; ?></a>
    <?php
    }
    ?>
          </td>
        </tr>
        <tr>
          <td align="right">&nbsp; </td>
        </tr>
      </table>

</center>
</FONT>
            </TD>
        <TD>
            <IMG SRC="images/main_13.gif" WIDTH=13 HEIGHT=504 ALT=""></TD>
    </TR>
    <TR>
        <TD COLSPAN=8>
            <IMG SRC="images/main_14.gif" WIDTH=700 HEIGHT=18 ALT=""></TD>
    </TR>
    <TR>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=140 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=6 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=64 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=84 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=62 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=209 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=122 HEIGHT=1 ALT=""></TD>
        <TD>
            <IMG SRC="images/spacer.gif" WIDTH=13 HEIGHT=1 ALT=""></TD>
    </TR>
</TABLE>
</CENTER>
</BODY>
</HTML>


Og customSQl.inc.php:
-----------------------------------------------------------------
<?php



require("./DbSql.inc.php");

Class CustomSQL extends DBSQL
{
  // the constructor
  function CustomSQL($DBName = "")
  {
      $this->DBSQL($DBName);
  }

  function checkusername($username)
  {     
      $sql = "select customerid from customer where username='$username'";
      $result = $this->select($sql);
      return $result;
  } 
 
  function adduser($username,$password,$email,$homepage,$icq,$aol,$yahoo,$msn,$location,$occupation,$interests,$biography)
  {     
      $sql = "insert into customer (username,password,email,homepage,icq,aol,yahoo,msn,location,occupation,interests,biography) values ('$username','$password','$email','$homepage','$icq','$aol','$yahoo','$msn','$location','$occupation','$interests','$biography')";
      $result = $this->insert($sql);
      return $result;
  }
 
  function logincheck($username,$password)
  {     
      $sql = "select customerid from customer where username='$username' and password='$password'";     
      $result = $this->select($sql);
      if (empty($result)) {
      return 0;
      }else{
      $CID = $result[0]["customerid"];
      return $CID;
      }
  }
 
  function checkpassword($customerid,$password)
  {     
      $sql = "select customerid from customer where password='$password' and customerid='$customerid'";
      $result = $this->select($sql);
      if (empty($result)) {
      return 0;
      }else{
      $CID = $result[0]["customerid"];
      return $CID;
      }
  }
 
  function emailcheck($email)
  {     
      $sql = "select password from customer where email='$email'";
      $result = $this->select($sql);
      if (empty($result)) {
      return 0;
      }else{
      $password = $result[0]["password"];
      return $password;
      }
  }
 
  function getuserinfobyid($customerid)
  {     
      $sql = "select * from customer where customerid='$customerid'";
      $result = $this->select($sql);
      return $result;
  }
 
  function edituser($email,$navn,$adresse,$postnr,$by,$telefon,$customerid)
  {
      $sql = "update customer set email='$email',navn='$navn',adresse='$adresse',postnr='$postnr',by='$by',telefon='$telefon' where customerid='$customerid'";     
      $results = $this->update($sql);
      return $results;
  }

  function showuser($email,$navn,$adresse,$postnr,$by,$telefon,$customerid)
  {
      $sql = "update customer set email='$email',navn='$navn',adresse='$adresse',postnr='$postnr',by='$by',telefon='$telefon',vaerdi='$vaerdi',tjent='$tjent',periode='$periode',samlet_p='$samlet_p',billede1='$billede1',billede2='$billede2',billede3='$billede3',billlede4='$billede4' where customerid='$customerid'";     
      $results = $this->update($sql);
      return $results;
  }
 
  function modifypass($password,$customerid)
  {
      $sql = "update customer set password='$password' where customerid='$customerid'";     
      $results = $this->update($sql);
      return $results;
  }
 
}

?>


Håber det hjælper.
Avatar billede macho Praktikant
12. april 2009 - 13:16 #10
Når du vil rette info på ret_info.html, står data så korrekt i felterne, som de skal, og er det så først når du trykker på "Ret information", at data ikke bliver opdateret?
Avatar billede cozey Nybegynder
12. april 2009 - 17:27 #11
ja, lige præcis... den hiver det helt korrekt og fint ud.
Avatar billede dkfire Nybegynder
12. april 2009 - 22:17 #12
Hvordan ser funktionen update ud ??

Og så lige en forklaring: En metode er en funktion i en klasse.
Avatar billede cozey Nybegynder
13. april 2009 - 22:48 #13
funktionen?... jamen det er jo den her (den er også postet i toppen)

function edituser($email,$navn,$adresse,$postnr,$by,$telefon,$customerid)
  {
      $sql = "update customer set email='$email',navn='$navn',adresse='$adresse',postnr='$postnr',by='$by',telefon='$telefon' where customerid='$customerid'";     
      $results = $this->update($sql);
      return $results;
  }
Avatar billede dkfire Nybegynder
14. april 2009 - 00:35 #14
Det er ikke den funktion jeg spørger om. Du har en update funktion i klassen DBSQL, hvordan ser den ud ?

Det er den funktion du kalder med:
$this->update($sql);
Avatar billede cozey Nybegynder
16. april 2009 - 13:02 #15
hele SBSQL ser sådan ud:

<?php

include("const.inc.php");

Class DBSQL
{
   
  function DBSQL($DBName)
  {   
      global $DBHost,$DBUser,$DBPassword;
      $conn=mysql_connect($DBHost,$DBUser,$DBPassword);
      mysql_select_db($DBName,$conn);
      $this->CONN = $conn;
      return true;
  }
 
  function select($sql="")
  {
      if (empty($sql)) return false;
      if (empty($this->CONN)) return false;
      $conn = $this->CONN;
      $results = mysql_query($sql,$conn);
      if ((!$results) or (empty($results)))
      {     
        return false;
      }
      $count = 0;
      $data = array();
      while ($row = mysql_fetch_array($results)) {
        $data[$count] = $row;
        $count++;
      }
      mysql_free_result($results);
      return $data;
  }

 
  function insert($sql="")
  {
      if (empty($sql)) return false;
      if (empty($this->CONN)) return false;

      $conn = $this->CONN;
      $results = mysql_query($sql,$conn);
      if (!$results) return false;
      $results = mysql_insert_id();
      return $results;
  }

 
  function update($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn);
      return $result;
  }

 
  function delete($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn);
      return $result;
  }
 
  function createtable($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn);
      return $result;
  }
 
  function droptable($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn);
      return $result;
  }
 
  function createindex($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn);
      return $result;
  }
 
  function dropindex($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn);
      return $result;
  }

}

?>
Avatar billede macho Praktikant
16. april 2009 - 14:25 #16
Jeg beklager, men jeg selv kan nok ikke hjælpe dig mere på vej, m prøv lige at kikke på denne side, hvor en anden har samme problem:
http://www.dynamicdrive.com/forums/archive/index.php/t-29840.html

Måske det kan hjælpe dig mere på vej?
Avatar billede dkfire Nybegynder
16. april 2009 - 19:33 #17
Du kan starte med at sætte "or die(mysql_error())" efter din mysql kald, så det bliver til:

function update($sql="")
  {
      if(empty($sql)) return false;
      if(empty($this->CONN)) return false;

      $conn = $this->CONN;
      $result = mysql_query($sql,$conn) or die(mysql_error());
      return $result;
  }

Du bliver også nød til at lave en variabel som hedder CONN for din klasse.
Class DBSQL
{
    private $CONN;

    function DBSQL($DBName)
    {
Avatar billede cozey Nybegynder
17. april 2009 - 11:16 #18
Hvor skal det sidste sættes ind henne? Altså:

Class DBSQL
{
    private $CONN;

    function DBSQL($DBName)
    {


Og den sidste tuborgklamme skal vel vendes den anden vej?
Avatar billede cozey Nybegynder
17. april 2009 - 11:19 #19
den giver forresten følgende fejl efter jeg har indsat "or die(mysql_error())" :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'by='Roskilde',telefon='5366354' where customerid='1'' at line 1
Avatar billede dkfire Nybegynder
17. april 2009 - 21:45 #20
Ja se så kom vi frem til noget der kan hjælpe os. "by" er et reserveret ord i sql og derfor er det en meget dårlig idé at have det som kolonnenavn. Enten skal du ændre kolonnenavnet eller også skal du tilføje ` rundt om navnet i din sql sætning ( læg mærke til hvilken vej ` vender).

Og til dit andet spørgsmål, så er det tilladt at tænke lidt selv. Jeg har kun skrevet starten af din DBSQL klasse da jeg kun tilføjede noget til starten. Jeg forsøgt at gøre det klart hvor i din klasse du skulle sætte "private $CONN;" henne.
Avatar billede cozey Nybegynder
18. april 2009 - 14:07 #21
Så virkede det sgu. Tusind tak for hjælpen.

Ja, jeg burde nokk have tænkt mig lidt bedre om, men havde bare forsøgt 1000 ting, og turde ikke risikere at gøre noget forkert igen ;-)

Men tak til jer alle for hjælpen.
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