Avatar billede tvilling53 Seniormester
02. marts 2015 - 15:31 Der er 12 kommentarer og
2 løsninger

Update mysqli

Hej eksperter
Min kode ser sådan ud:
<?php session_start();
include ('tilslut.php');
$gl_kode=$_POST['gl_kode'];
$kode1=$_POST['kode1'];
$kode2=$_POST['kode2'];
$navn=$_SESSION['brugerskat_navn'];

if($kode1===$kode2)
  {$ny_kode=$kode1;
  if($stmt=$mysqli->prepare('SELECT id,kode FROM brugerskat WHERE navn=?'))
    { $stmt->bind_param('s',$navn);
      $stmt->execute();
      $stmt->bind_result($id,$brugerskat_kode);
      $stmt->fetch();
      //$stmt->close();
    } echo'<br>Brugerskat_kode er = '.$brugerskat_kode;
    echo '<br>Id er = '.$id;
  } 

if($gl_kode===$brugerskat_kode)
  {
    echo '<br>Koder er ens';
    if($stmt= $mysqli->prepare('UPDATE brugerskat SET kode=? WHERE Id=?'))
      {$stmt->bind_param('i',$id);
      $ny_kode=$kode1;
      $stmt->execute();
      $stmt->close();
      }echo '<br> Ny kode indsat';
  }
  echo'<br>Brugerskat_navn er = '.$navn;

  echo'<br>gl_kode er = '.$gl_kode;
  echo'<br>kode1 er = '.$kode1;
  echo'<br>kode2 er = '.$kode2;
  echo'<br>ny_kode er = '.$ny_kode;
?>

og det giver dette :
Brugerskat_kode er = trumf
Id er = 2
Koder er ens
Ny kode indsat
Brugerskat_navn er = tvilling53
gl_kode er = trumf
kode1 er = qwe
kode2 er = qwe

men adgangskoden i databasen bliver ikke ændret....så hvad har jeg gjort forkert?????

Thomas V
Avatar billede arne_v Ekspert
02. marts 2015 - 16:12 #1
if($stmt= $mysqli->prepare('UPDATE brugerskat SET kode=? WHERE Id=?'))
      {$stmt->bind_param('i',$id);

ser forkert ud - SQL har 2 parametre - du angiver kun 1 !!

Maaske:

if($stmt= $mysqli->prepare('UPDATE brugerskat SET kode=? WHERE Id=?'))
      {$stmt->bind_param('si',$ny_kode, $id);
Avatar billede tvilling53 Seniormester
02. marts 2015 - 16:29 #2
Hej
har lige ændret som du har skrevet, men koden ændre sig ikke i databasen.
Thomas V
Avatar billede arne_v Ekspert
02. marts 2015 - 16:34 #3
Proev at teste for og udskrive fejl besked hvis prepare eller execute giver en fejl.

Og check om alle variable indeholder hvad de skal indeholde.
Avatar billede tvilling53 Seniormester
02. marts 2015 - 16:45 #4
Hej
alle echo giver giver det de skal. Men hvordan tester man over prepare eller execute giver fejl???

Thomas V
Avatar billede arne_v Ekspert
02. marts 2015 - 16:56 #5
if($stmt = $con->prepare(...)) {
        if($stmt->execute()) {
            ...
        } else {
            die($con->error);
        }
    } else {
        die($con->error);
    }
Avatar billede tvilling53 Seniormester
02. marts 2015 - 17:43 #6
Hej

dette er jeg har skrevet:

if($stmt=$con->prepare('UPDATE brugerskat SET kode=? WHERE id=?'))
    {  $stmt->bind_param('si',$ny_kode,$id);
    if($stmt->execute())
      {
          ???Hvad skal stå her??? 
      }
      else
      { die($con->error);
      }
    }
  else
    { die($con->error);
    }
     
    }
giver disse meldinger:
Undefined variable: con in  og
Call to a member function prepare() on a non-object in

Det virker meget tungt for mig så!!!

Thomas V
Avatar billede olsensweb.dk Ekspert
03. marts 2015 - 00:15 #7
>giver disse meldinger:
>Undefined variable: con in  og

$con er din database connection !! du kalder din connection for $mysqli så ret
 
if($stmt=$con->prepare('UPDATE brugerskat SET kode=? WHERE id=?'))
    {  $stmt->bind_param('si',$ny_kode,$id);
    if($stmt->execute())
      {
          ???Hvad skal stå her???
      }
      else
      { die($con->error);
      }
    }
  else
    { die($con->error);
    }
   
    }


til (utested)

<?php
if ($stmt = $mysqli->prepare('UPDATE brugerskat SET kode=? WHERE id=?')) {
    $stmt->bind_param('si', $ny_kode, $id);
    if ($stmt->execute()) {
        // ???Hvad skal stå her???
        // du skal vel bare lukke dit statement
        $stmt->close();
    }
    else {
    // http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
        // http://php.net/manual/en/mysqli-stmt.error.php
        die($stmt->error);
    }
}
else {
    die($mysqli->error);
}
?>


tag et kig på OleBole's guide http://www.eksperten.dk/guide/1480


>Det virker meget tungt for mig så!!!
drop mysqli og anvend PDO istedet, der kan du også anvende Prepare Statement, men det er mere udviklet.
Avatar billede tvilling53 Seniormester
03. marts 2015 - 13:31 #8
Hej

Jeg fandt en fejl i SELECT hvor linien $stmt->close(); var blokket ud.

Nu ser koden sådan ud:

{
  if($stmt=$mysqli->prepare('UPDATE brugerskat SET kode=? WHERE id=?'))
    {  $stmt->bind_param('si',$ny_kode,$id);
      if($stmt->execute())
          {
            echo '<br>STMT close';
            $stmt->close();     
          }
      else
          { echo '<br>stmt dør';
            die($stmt->error);
          }
    }
  else
    {
      echo '<br>mysql dør';
      die($mysqli->error);
    }
     
  }
Nu bliver koden skiftet i databasen så problemet blev løst. #ronols smid et svar og hvis du ved om nogle gode bøger på dansk om mysqli og PDO så vil jeg blive glad.

Thomas V
Avatar billede olsensweb.dk Ekspert
03. marts 2015 - 14:24 #9
det bliver nok svært at finde noget på dansk ud over den jeg linkede til som olebole lavede, men her er en video om det

har hørt nogle tale om dette, men ikke selv set de(n/m)
http://www.nemprogrammering.dk/Tutorials/MySQL/mysqli_kursus.php
men har ikke selv set det
de har en pandang i PDO
http://www.nemprogrammering.dk/Tutorials/PDO/PDO-kursus-tutorials-guides.php
som du også kunne kigge på

hverken mysqli eller PDO kræver man anvender PP (Prepared statements), men man kan vinde på sikkerheden og nogle gange også i hastigheden.


jeg vil nu nok mene arne_v fik hjulpet dig godt på vej, så det må være en deler, jeg fin pudsede bare Arne_v's eks

@arne_v: smid et svar også
kender du nogle tut om PP på dansk  ??
kender du nogle gode på engelsk (PDO, MYSQLI) ??
Avatar billede tvilling53 Seniormester
03. marts 2015 - 18:32 #10
hej
det videokursus på nemprogrammering er rigtig godt til at starte på men den vej her med at fange fejl er ikke med så man kommer ud på herrens mark.
Det er helt i orden med mig at dele point så @arne_v smid et svar også.
Mange tak for hjælpen til jer begge.

Thomas V
Avatar billede arne_v Ekspert
03. marts 2015 - 21:37 #11
svar
Avatar billede arne_v Ekspert
03. marts 2015 - 21:41 #12
Prepared statement er bare noget man altid bruger i forbindelser med SQL uanset om man koder i Java, C# eller PHP.

(alternativet er ikke at bruge SQL direkte men lade en ORM generere SQL)

Jeg kender ikke nogle specielt gode tutorials, men der maa vaere masser af dem.
Avatar billede olsensweb.dk Ekspert
03. marts 2015 - 22:22 #13
ORM, er også ganske interessant at anvende men kræver noget tilvænding, ligesom Prepare Statement
har selv arbejdet lidt med https://github.com/j4mie/idiorm hvilke kan anbefales
har hørt meget godt om http://www.doctrine-project.org/ men er lidt mere kompliceret end idiorm
er man til framework bør man kigge på http://laravel.com/docs/5.0/eloquent
Avatar billede arne_v Ekspert
04. marts 2015 - 01:58 #14
ORM er ikke saa almindelig i PHP som i Java og .NET - i disse vil der til objekt orienteret data tilgang blive brugt ORM i maaske 95% af tilfaeldene i Java og 75% i .NET.

Det er mit indtryk at Doctrine er det mest brugte ORM framework til PHP - og dets arv fra Hibernate/NHibernate maa ogsaa have givet det en solid ballast.
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

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