Avatar billede Slettet bruger
31. december 2010 - 11:03 Der er 7 kommentarer og
1 løsning

Replace into der ikke vil virke.

Vil gerne indrømme at jeg har lavet lidt af en test.

Jeg har en side hvor man kan redigere en bruger.
Jeg har prøvet at indlægge nogle tjek om brugernavnet og mailen er brugt. Og at mailen og brugernavet skal indholde bestemte bogtaver.

Men når jeg trykker "Ret oplysninger" får jeg det tilbage i hovedet som det var før. Altså ingen rettelser.


<?php

include("config.php");
$username = "";
$userpass = "";
$useremail ="";
$userrlname ="";

if(isset($_POST['Submit']))
{
if ($_POST['username'] == "" or $_POST['useremail'] == "") {


$msg3 = true;
$pass = "no"; }

$email = $_POST['useremail'];
if (!eregi("^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$", $email)) {
  $msg4 = true; $pass = "no"; }
 
if (!$pass == "no") {
        $username = $_POST['username'];
        $userfavteam = $_POST['userfavteam'];
        $userrlname = $_POST['userrlname'];
        $useremail = $email;


       
        // Tjek om navn og mail er brugt
        $result = mysql_query("Select * from login_table",$con);
       
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
$n++;
       
       
        if ($username == $row['user_name']) {$_GET['userid'] = "";
       
        header("Location: profile.php?pass=no&msg2=true");}
        if ($useremail == $row['user_email']) {$_GET['userid'] = "";
       
        header("Location: profile.php?pass=no&msg2b=true");}
       
       
        }
       
       
        if(!isset($_GET['userid']))
        {
                $result = mysql_query("Replace into login(user_name,user_email,user_favteam,user_rlname) values('$username','$useremail','$userfavteam','$userrlname') WHERE userid='".$_SESSION['userid']."'");
                $msg2 = "";
                $msg3 = "";
                $msg = "Din bruger er nu rettet";
        }
       
}}
?>



Nogen der kan se en fejl?
31. december 2010 - 13:18 #1
Det er ikke saa nemt at foelge dig.  Men jeg forstaar at essensen i dit problem er at en mysql tabel ikke bliver rettet som angivet i koden '$result=mysql_query("Replace into login(.......

(Du skulle saa maaske have oprettet spoergsmaalet i kategorien mysql.)

Jeg gaar ud fra at du allerede har testet og er sikker paa at alle variable indeholder de rigtige vaerdier paa det tidspunkt du bruger dem i queryen.  Jeg vil foreslaa at du derudover udvider queryen med "or die(mysql_error())" saa du faar mysql til selv at fortaelle dig hvis der er noget galt med din query.

Jeg tror dit problem centrerer sig om at du blander REPLACE syntaks og UPDATE syntax sammen.  Ifoelge http://dev.mysql.com/doc/refman/5.0/en/replace.html virker INSERT paa samme maade som INSERT undtagen at 'if an old row ... has the same value as a new row for a primary key .., the old row is deleted before the new row is inserted.' 

Du skal nok enten sige "UPDATE login SET user_name = '$username', user_email = '$useremail, .... WHERE userid = '" . $_SESSION['userid'] . "'"

Eller ogsaa, hvis userid er primary key i login, sige "REPLACE INTO login(userid, user_name, .....) VALUES '" . $_SESSION['userid'] . "', $username, ....)"  altsaa uden where som ikke hoerer hjemme i INSERT og derfor ikke i REPLACE.
31. december 2010 - 13:21 #2
Rettelse: jeg skulle have sagt at REPLACE virker paa samme maade som INSERT o.s.v.  Og altsaa enten bruge UPDATE med WHERE klausul eller REPLACE uden WHERE klausul men hvor userid er en af vaerdierne to 'replace'.
Avatar billede Slettet bruger
31. december 2010 - 13:53 #3
Grunden til at jeg postede det her var også at jeg var i tvivl om php delen var rigtig.

Men ja jeg kunne nok også have postet den i MySQL.

Hvad ang det link du sendte.
Jeg havde læst lidt på siden inden jeg spurgte, men jeg må indrømme at jeg var lidt blank og forstod det ikke helt.

Nu har jeg prøvet at rette:

$result = mysql_query("Replace into login(user_name,user_email,user_favteam,user_rlname) values('$username','$useremail','$userfavteam','$userrlname') WHERE userid='".$_SESSION['userid']."'");


til:

$result = mysql_query("UPDATE login set user_name='$username', user_email='$useremail', ,user_favteam='$userfavteam', user_rlname='$userrlname' WHERE userid='".$_SESSION['userid']."'");


Men stadig uden held. Gør jeg stadig noget forkert?
31. december 2010 - 15:17 #4
For test lavede jeg en mysql tabel dddd med lidt data som foelger:

CREATE TABLE dddd(userid INT, user_name VARCHAR(10), user_email VARCHAR(10), user_favteam VARCHAR(10), user_rlname VARCHAR(10));

INSERT INTO dddd VALUES(1, 'name1', 'email1', 'favteam1', 'rlname1');
INSERT INTO dddd VALUES(2, 'name2', 'email2', 'favteam2', 'rlname2');
INSERT INTO dddd VALUES(3, 'name3', 'email3', 'favteam3', 'rlname3');

Saa skrev jeg en mini-hjemmeside med (blandt andet) denne kode:

<?
...
$username = "name5";
$useremail = "email5";
$userfavteam = "favteam5";
$userrlname = "rlname5";
$userid = 3;

$result=mysql_query("UPDATE dddd SET user_name='$username', user_email='$useremail', user_favteam = '$userfavteam', user_rlname='$userrlname' WHERE userid='$userid'")or die(mysql_error());

$result2 = mysql_query("SELECT * FROM dddd WHERE userid = 3")or die(mysql_error());
echo mysql_result($result2, 0, 0) . "<br>";
echo mysql_result($result2, 0, 1) . "<br>";
echo mysql_result($result2, 0, 2) . "<br>";
echo mysql_result($result2, 0, 3) . "<br>";
echo mysql_result($result2, 0, 4) . "<br>";
...
?>

Som du kan se tilkender jeg foerst nye vaerdier til variablerne som skal indsaettes i tabellen hvor userid = 3, saa koerer jeg din update query bortset fra at jeg bruger $userid i stedet for $_SESSION['userid'] og at jeg indsaetter 'or die(mysql_error())'.  Til sidst laver jeg saa en forespoergsel efter tabellens vaerdier hvor userid = 3, og det resulterer i de updatede vaerdier.  Du kan se resultatet i http://christianjorgensen.be/dddd.php

Saa det er ikke update-queryen der fejler.  Det maa vaere noget andet noget.  Et spoergsmaal jeg har er hvor du faar session-variabelen fra.  Den kode du viser indeholder ikke noget med session_start().  Har du testet om koden overhovedet naar til queryen ved for eksempel at indsaette denne diagnostiske kode:

if(!isset($_GET['userid']))
{
  echo "JEG ER NAAET TIL GET USERID <br>";
               
$result = mysql_query("Replace into login(user_name,user_email,user_favteam,user_rlname) values('$username','$useremail','$userfavteam','$userrlname') WHERE userid='".$_SESSION['userid']."'");
o.s.v.

Hvis det viser sig at du rent faktisk naar til din query kan du teste om variablerne har de forventede vaerdier ved at sige:

if(!isset($_GET['userid']))
{
  echo "SESSION-USERID = " . $_SESSION['userid'] . "<br>";
  echo "USERNAME = $username <br>";
o.s.v.

Proev det af og se hvad der sker.
Avatar billede Slettet bruger
01. januar 2011 - 16:09 #5
Som du ganske rigtigt siger, så kommer jeg slet ikke til min query..

Ved ikke helt hvor i PHP'en ovenover jeg har lavet fejl.

Har prøvet at indsætte session_start() ved ikke hvorfor jeg ikke havde fået den med. Det må ha været en fejl i kopieringen. Jeg lavede en kopi af alle de tjek den gerne skulle lave fra min side hvor man opretter bruger. Og det er nok det der er gået galt.

Kan nogen evt se fejl der i?
01. januar 2011 - 16:47 #6
Grunden til at du ikke kommer til queryen maa jo vaere at en af betingelserne for at komme der ikke er opfyldt.
Jeg ser i din kode de foelgende betingelser for at komme til queryen:
I den syvende linie saetter du betingelsen at $_POST['Submit'] er set.
Tolv linier laengere nede saetter du betingelsen at $pass ikke maa vaere "no".
Og endelig lige foer queryen saetter du som en tredje betingelse at $_GET['userid'] ikke maa vaere set.

Saa jeg vil foreslaa at du indsaetter nogle flere diagnostiske echos saasom i forbindelse med syvende linie:

if(isset($_POST['Submit'])
{
echo "POST SUBMIT ER OK";
  if ($_POST['username'] == o.s.v.

og omkring den tyvende linie:
if(!$pass == "no")
{
  echo "PASS ER IKKE NO";
  $username - $_post['USERNAME']; o.s.v.

Paa den maade kan du skyde dig ind paa hvor det gaar galt og enten rette fejlen eller goere dine foelgende spoergsmaal stadig precisere.

Hvis for eksempel din foerste betingelse, isset $_POST['Submit'], ikke er opfyldt, saa kunne grunden for eksempel vaere at det skulle have vaeret $_POST['submit'], altsaa med lille s.  Alle dine andre POST og GET parametre begynder med lille.

Jeg haaber dette er hjaelp til selvhjaelp.  Se hvordan det gaar.
Avatar billede Slettet bruger
01. januar 2011 - 19:44 #7
Okay.. Nu er jeg ved at få hovedpine over det her :P

Blev så glad da jeg næsten fik det til at virke.
Så har jeg leget med det for at få det til at virke helt og efter det er det gået helt galt.

Startede med at køre en Update symtax. Men den ville kun updatere hvis jeg havde ændret alle felterne.

Så ville jeg prøve replace symptax, men det virkede heller ikke som jeg ville ha det.

Så nu vil jeg starte helt forfra.
Jeg vil starte med at lave så jeg får indsat i databasen.
Så kan jeg lave if sætninger bagefter.

Men jeg har brug for hjælp. For jeg forstår det simpelthen ikke.
Jeg lavede en echo på min replace sætning:

REPLACE INTO login(userid,user_name,user_email,user_favteam,user_rlname)Values('1',1,1,1,1)


Men den erstatter ikke mine 1,0,0,0,0.

Hvad gør jeg forkert?


<?php
session_start();
include("config.php");
$username = "";
$userfavteam = "";
$useremail ="";
$userrlname ="";

if(isset($_POST['submit']))
{
 

        $username = $_POST['username'];
        $userfavteam = $_POST['userfavteam'];
        $userrlname = $_POST['userrlname'];
        $useremail = $_POST['useremail'];


               

                $result = mysql_query("REPLACE INTO login(useriduser_name,user_email,user_favteam,user_rlname)Values('" .$_SESSION['userid']. "',$username,$useremail,$userfavteam,$userrlname)");
               
echo "REPLACE INTO login(userid,user_name,user_email,user_favteam,user_rlname)Values('" .$_SESSION['userid']. "',$username,$useremail,$userfavteam,$userrlname)";
        }
       

?>
Avatar billede Slettet bruger
01. januar 2011 - 22:43 #8
Puhaa. Det tog MEGET lang tid.
Men nu virker det. Post et svar :)
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