Tja, ud fra den mængde af information du stiller til rådighed kan jeg kun fortælle at det drejer sig om en uoverenstemmelse mellem antallet af column's og value's. Men hvis du nu viser os noget af den kode der giver fejlen kan vi sikkert bedre hjælpe :)
<?php if (($_POST[op] != "add") || ($_GET[id] != "")) { //har ikke set formular - så vis den $display_block = "<h1>Tilføj data til eksisterende kunde </h1> <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">";
if ($_GET[id] != "") { // etabler forbindelse til databasen $conn = mysql_connect("localhost", "xxxx", "xxxxx") or die(mysql_error()); mysql_select_db("xxxxxxx",$conn) or die(mysql_error());
//hent for- og efternavn $get_names = "select concat_ws(', ', f_name, l_name) as display_name from master_name where id = $_GET[id]"; $get_names_res = mysql_query($get_names) or die(mysql_error()); $get_names_res = mysql_query($get_names) or die(mysql_error()."<br>SELECT f_name, l_names from master_name: ".$get_names); if(mysql_num_rows($get_names_res) == 1) { $display_name = mysql_result($get_names_res,0, 'display_name'); } } if ($display_name != "") { $display_block .= "<h2>Tilføjelse til <strong>$display_name</strong>:</h2>"; } else { $display_block .= "<h2> <p><strong>For-/efternavn:</strong><br> <input type=\"test\" name=\"f_name\" size=30 maxlength=75> <input type=\"test\" name=\"l_name\" size=30 maxlength=75></h2>"; } $display_block .= "<h2><strong>Adresse:</strong></h2> <h2><input type=\"text\" name=\"address\" size=30 maxlength=63></h2>
// etabler forbindelse til databasen $conn = mysql_connect("localhost", "xxxx", "xxxxxx") or die(mysql_error()); mysql_select_db("xxxxxx",$conn) or die(mysql_error());
if ($_POST[id] == "") { // føj til master_name-tabellen $add_master = "insert into master_name values ('', '$_POST[f_name]', '$_POST[l_name]')"; mysql_query($add_master) or die(mysql_error());
// hent master_id til brug i andre tabeller $id = mysql_insert_id(); } else { $id = $_POST[id]; } if (($_POST[address]) || ($_POST[postnr])) { //evt. føj til address-tabellen $add_address = "insert into address values ('', $id, '$_POST[address]', '$_POST[postnr]', '$_POST[postby]') "; mysql_query($add_address) or die(mysql_error()); }
if ($_POST[tel_number]) { //evt. føj til telephone-tabellen $add_tel = "insert into tel_number values ('', $id, '$_POST[tel_number]')"; mysql_query($add_tel) or die(mysql_error()); }
if ($_POST[fax_number]) { //evt. føj til fax-tabellen $add_fax = "insert into fax_number values ('', $id, '$_POST[fax_number]')"; mysql_query($add_fax) or die(mysql_error()); }
if ($_POST[email]) { //evt. føj til email-tabellen $add_email = "insert into email values ('', $id, '$_POST[email]')"; mysql_query($add_email) or die(mysql_error()); }
if ($_POST[cvr_number]) { //evt. føj til cvr-tabellen $add_cvr = "insert into cvr values ('', $id, '$_POST[cvr_number]')"; mysql_query($add_cvr) or die(mysql_error()); }
$display_block = "<h1>Statusmelding for tilføjning af data ved eksisterende kunde</h1> <h2>Der er tilføjet data vedr. <strong>$get_names</strong></h2> <h2><a href=\"addinfo.php?master_id=$_POST[sel_id]\">tilføj flere data til samme kunde</a></h2> <h2><a href=\"adressemenu.htm\">tilbage til menu</a></h2> <h2><a href=\"selentry.php\">få vist kundens data fra kundedatabasen</a></h2>"; } ?> <html> <head> <title>Add an entry</title> <link href="ve style.css" rel="stylesheet"> </head> <body> <? print $display_block; ?> </body></html>
Hm, du har en data base der hedder 'master_name'. Den indeholder 10 felter.
Når du prøver at lave en insert, som her :
// føj til master_name-tabellen $add_master = "insert into master_name values ('', '$_POST[f_name]', '$_POST[l_name]')"; mysql_query($add_master) or die(mysql_error());
mener jeg at du skal have alle 10 felter repræsenteret...altså sådan her :
// føj til master_name-tabellen $add_master = "insert into master_name values ('', '$_POST[f_name]', '$_POST[l_name]','','','','','','','')"; mysql_query($add_master) or die(mysql_error());
Efterfølgende prøver du at skrive til en masse forskellige tabeller med indhold som det ser ud til du har i master_name tabellen, men det er måske rigtigt nok ?
Du har ret johan, jeg skriver til en masse tabeller som ikke er der, er rettet nu, men nu når jeg forsøger at opdatere en bruger så bliver de oprettet i stedet for at rette den eksisterende brugers info ?
$add_master = "update master_name values ('', '$_POST[f_name]', '$_POST[l_name]','','','','','','','') where fName = '$_POST[f_name]'"; //evt også på lName mysql_query($add_master) or die(mysql_error());
Når du vil lave en INSERT kombineret med VALUES skal du skrive ligeså mange værdier i VALUES som der findes i den tabel du vil insert'e i. Der er også andre måder at lave en INSERT men endnu vigtigere så er UPDATE syntaksen anderledes. Hvis f.eks. du kun ønsker at update f_name i tabellen master_name kan det gøres sådan her :
$upd="UPDATE master_name SET f_name='".$_POST['f_name']."' WHERE id='2'";
hvis du nu vil update både f_name og l_name for alle rækker med postnr=1200 kan det gøres sådan her :
$upd="UPDATE master_name SET f_name='".$_POST['f_name']."', l_name='".$_POST['l_name']."' WHERE postnr='1200'";
Prøv selv at rette din kode til. Hvis det ikke vil som du vil så spørger du bare igen :)
Og så bør det nævnes at du i forbindelse med database operationer kombineret med brugerinput _altid_ skal lave en validering af inputet før du bruger det i dine SQL sætninger, og hvis ikke du kender den allerede så prøv at læse om mysql_real_escape_string på php.net
Opdater tabellen a, sæt kollonen k lig 1 for alle rækker hvor b er lig 2
Så det der kommer efter WHERE fortæller hvilke rækker i tabellen der skal opdateres.
Det der kommer efter SET fortæller hvilke felter i rækkerne der skal opdateres og til hvilke værdier.
Når den skriver at brugeren er opdateret er det sikkert fordi du blot checker om sql operationen blev udført. I din tabel er der sikkert ingen rækker der har et postnummer på 1200. Så php udfører sql operationen men den opdaterer bare ingen rækker.
Så i denne forbindelse vil det også være en god ide at du kigger lidt på mysql_affected_rows()
He he, ja det er et paradoks her, som alle andre steder, at jo mere man ved om emnet, jo nemmere er det at forstå manualen :), men fat mod det kommer stille og roligt.
Lad os sige at du har en tabel der hedder brugere. I denne tabel er der disse tre kollonner : id, navn og alder.
I tabellen er der to rækker som disse :
id : 0, navn : ib, alder : 30 id : 1, navn : bo, alder : 14
Hvis du så vil opdatere f.eks. ib's alder til 40 kan det gøres således :
$upd="UPDATE brugere SET alder='40' WHERE navn='ib'";
En INSERT kunne se således ud :
$ins="INSERT INTO brugere VALUES('','jan','26')"; og jeg mener også den kan se således ud :
$ins="INSERT INTO bruere SET navn='jan', alder='26'";
mysql_affected_rows() virker som en funktion til at tælle hvor mange rækker blev berørt af den sidst udførte sql operation. F.eks.:
mysql_query("UPDATE brugere SET alder='2' WHERE id='0'"); if(mysql_affected_rows()==1) { echo "Vi ændrede en række !"; } else { echo "Oups enten ændrede vi ingen rækker, eller også flere end 1"; }
Hjælper det ? - Hvis ikke må du nok prøve at beskrive nærmere hvad det er du ikke forstår :)
nu ved jeg jo ikke med sikkerhed hvilken bruger der skal opdateres, da der er en liste med brugere, derfor kan jeg da ikke skrive f.eks ib under navn og hvilken alder han skal havde ? der må være noget andet man skriver. ?
min kode ser nu således ud og virker stadig ikke kan du fortælle mig hvad der er galdt ?
<?php if (($_POST[op] != "add") || ($_GET[id] != "")) { //har ikke set formular - så vis den $display_block = "<h1>Tilføj data til eksisterende kunde </h1> <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">";
if ($_GET[id] != "") { // etabler forbindelse til databasen $conn = mysql_connect("localhost", "web20", "061284") or die(mysql_error()); mysql_select_db("usr_web20_1",$conn) or die(mysql_error());
//hent for- og efternavn $get_names = "select concat_ws(', ', f_name, l_name) as display_name from master_name where id = $_GET[id]"; $get_names_res = mysql_query($get_names) or die(mysql_error()); $get_names_res = mysql_query($get_names) or die(mysql_error()."<br>SELECT f_name, l_names from master_name: ".$get_names); if(mysql_num_rows($get_names_res) == 1) { $display_name = mysql_result($get_names_res,0, 'display_name'); } } if ($display_name != "") { $display_block .= "<h2>Tilføjelse til <strong>$display_name</strong>:</h2>"; } else { $display_block .= "<h2> <p><strong>For-/efternavn:</strong><br> <input type=\"test\" name=\"f_name\" size=30 maxlength=75> <input type=\"test\" name=\"l_name\" size=30 maxlength=75></h2>"; } $display_block .= "<h2><strong>Adresse:</strong></h2> <h2><input type=\"text\" name=\"address\" size=30 maxlength=63></h2>
// etabler forbindelse til databasen $conn = mysql_connect("localhost", "web20", "061284") or die(mysql_error()); mysql_select_db("usr_web20_1",$conn) or die(mysql_error());
if ($_POST[id] == "") { // føj til master_name-tabellen $upd="UPDATE master_name SET f_name='".$_POST['f_name']."', l_name='".$_POST['l_name']."', address='".$_POST['address']."', postnr='".$_POST['postnr']."', postby='".$_POST['postby']."', tel_number='".$_POST['tel_number']."', fax_number='".$_POST['fax_number']."', cvr_number='".$_POST['cvr_number']."', email='".$_POST['email']."' WHERE id='".$_GET['id']."'"; mysql_query($upd) or die(mysql_error()); }
$display_block = "<h1>Statusmelding for tilføjning af data ved eksisterende kunde</h1> <h2>Der er tilføjet data vedr. <strong>$get_names</strong></h2> <h2><a href=\"addinfo.php?master_id=$_POST[sel_id]\">tilføj flere data til samme kunde</a></h2> <h2><a href=\"adressemenu.htm\">tilbage til menu</a></h2> <h2><a href=\"selentry.php\">få vist kundens data fra kundedatabasen</a></h2>"; } ?> <html> <head> <title>Add an entry</title> <link href="ve style.css" rel="stylesheet"> </head> <body> <? print $display_block; ?> </body></html>
Hm, du har både $_GET['id'] og $_POST['id'] er det med vilje ?
Kan du ikke prøve at beskrive forløbet der ikke virker ? Du har ovenstående kode gemt som en fil. Hvordan kalder du den fil og evt. med hvilke attributer ?
Jeg tror jeg begynder at forstå hvordan det er meningen det skal virke...tror :)
Når du opdatere kunden i din tabel bruger du ikke en GET variabel istedet sender du id nummeret via din form, derfor skal du ændre din sql update til dette :
$upd="UPDATE master_name SET f_name='".$_POST['f_name']."', l_name='".$_POST['l_name']."', address='".$_POST['address']."', postnr='".$_POST['postnr']."', postby='".$_POST['postby']."', tel_number='".$_POST['tel_number']."', fax_number='".$_POST['fax_number']."', cvr_number='".$_POST['cvr_number']."', email='".$_POST['email']."' WHERE id='".$_POST['id']."'";
Eneste ændring er efter WHERE.....
Derudover bør du tilføje to input felter til din form, nemlig f_name og l_name da de ikke sendes på nuværende tidspunkt.
Derudover bør du også ændre linket i bunden til addinfo.php?id=$_POST['id']
hm nu for jeg meldingen Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /srv/www/htdocs/web20/html/test/database/addinfo.php on line 87 og det er nemlig addinfo.php?id=$_POST['id'] ???
prøver lige igen :) linket kommer af den kunde man har valgt ex. der er 10 kunder man vælger kunde 4 så bliver det til addinfo.php?id=4 ?? (godt og grundig syg og på hoste medicin:) eller ???
Sidste linje i ovenstående kode tror jeg skal se således ud :
$display_block = "<h1>Statusmelding for tilføjning af data ved eksisterende kunde</h1> <h2>Der er tilføjet data vedr. <strong>$get_names</strong></h2> <h2><a href=\"addinfo.php?master_id=".$_POST['id']."\">tilføj flere data til samme kunde</a></h2> <h2><a href=\"adressemenu.htm\">tilbage til menu</a></h2> <h2><a href=\"selentry.php\">få vist kundens data fra kundedatabasen</a></h2>";
Med hensyn til linket i selentry.php så er det selvfølgelig ikke meningen at du skal skrive 1 tallet fast, det der er humlen er at du skal ændre addinfo.php?master_id= til addinfo.php?id=
hm ja kan se det stadig "fungere" som før bortset fra at man ikke kan rette på f_name og l_name men det har nok noget at gøre med de input felter du snakkede om før men kan se når jeg vil rette ex. adressen eller fax nr så virker det stadig ik :/ ?
argh kan se jeg også mangler et stykke kode som gør at f.eks hvis jeg kun vil rette tlf nr og det så kun er det jeg skriver i feltet og lader de andre felter stå tomme så sletter den resten af data'erne ?
tja jeg kunne nu godt bruge et stykke kode der gør såen at når jeg kun vil rette 1 ting så bliver der kun rettet en ting istedet for at alle felter bliver slettet når man ik skriver noget i dem ? men sys da du har været til en stor hjælp så sys da lige du skal ha lidt extra points for det :) tryk på linket neden under :)
<?php if (($_POST[op] != "add") || ($_GET[id] != "")) { //har ikke set formular - så vis den $display_block = "<h1>Tilføj data til eksisterende kunde </h1> <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">";
if ($_GET[id] != "") { // etabler forbindelse til databasen $conn = mysql_connect("localhost", "xxx", "xxx") or die(mysql_error()); mysql_select_db("xxxxx",$conn) or die(mysql_error());
//hent for- og efternavn $get_names = "select concat_ws(', ', f_name, l_name) as display_name from master_name where id = $_GET[id]"; $get_names_res = mysql_query($get_names) or die(mysql_error()); $get_names_res = mysql_query($get_names) or die(mysql_error()."<br>SELECT f_name, l_names from master_name: ".$get_names); if(mysql_num_rows($get_names_res) == 1) { $display_name = mysql_result($get_names_res,0, 'display_name'); } } if ($display_name != "") { $display_block .= "<h2>Tilføjelse til <strong>$display_name</strong>:</h2>"; } else { $display_block .= "<h2> <p><strong>For-/efternavn:</strong><br> <input type=\"text\" name=\"f_name\" size=30 maxlength=75> <input type=\"text\" name=\"l_name\" size=30 maxlength=75></h2>"; } $display_block .= "<h2><strong>Adresse:</strong></h2> <h2><input type=\"text\" name=\"address\" size=30 maxlength=63></h2>
// etabler forbindelse til databasen $conn = mysql_connect("localhost", "xxxx", "xxxxxx") or die(mysql_error()); mysql_select_db("xxxxxx",$conn) or die(mysql_error());
{ // føj til master_name-tabellen $upd="UPDATE master_name SET f_name='".$_POST['f_name']."', l_name='".$_POST['l_name']."', address='".$_POST['address']."', postnr='".$_POST['postnr']."', postby='".$_POST['postby']."', tel_number='".$_POST['tel_number']."', fax_number='".$_POST['fax_number']."', cvr_number='".$_POST['cvr_number']."', email='".$_POST['email']."' WHERE id='".$_POST['id']."'"; mysql_query($upd) or die(mysql_error()); }
$display_block = "<h1>Statusmelding for tilføjning af data ved eksisterende kunde</h1> <h2>Der er tilføjet data vedr. <strong>$get_names</strong></h2> <h2><a href=\"addinfo.php?master_id=".$_POST['id']."\">tilføj flere data til samme kunde</a></h2> <h2><a href=\"adressemenu.htm\">tilbage til menu</a></h2> <h2><a href=\"selentry.php\">få vist kundens data fra kundedatabasen</a></h2>"; } ?>
Det jeg så mangler, er et stykke kode der gør såen, at når jeg kun vil rette 1 ting så bliver der kun rettet en ting, istedet for at alle felter bliver slettet når man ik skriver noget i dem. ?
<?php if (($_POST[op] != "add") || ($_GET[id] != "")) { //har ikke set formular - så vis den $display_block = "<h1>Tilføj data til eksisterende kunde </h1> <form method=\"post\" action=\"$_SERVER[PHP_SELF]\">";
if ($_GET[id] != "") { // etabler forbindelse til databasen $conn = mysql_connect("localhost", "xxx", "xxx") or die(mysql_error()); mysql_select_db("xxxxx",$conn) or die(mysql_error());
//hent info om kunde $get_names = "select * from master_name where id = $_GET[id]"; $get_names_res = mysql_query($get_names) or die(mysql_error()); $get_names_res = mysql_query($get_names) or die(mysql_error()."<br>SELECT f_name, l_names from master_name: ".$get_names); if(mysql_num_rows($get_names_res) == 1) { $get_names_row = mysql_fetch_assoc($get_names_res); } } if ($get_names_row['f_name'] != "") { $display_block .= "<h2>Tilføjelse til <strong>".$get_names_row['f_name'].", ".$get_names_row['l_name']."</strong>:</h2> <input type='hidden' name='f_name' value='".$get_names_row['f_name']."'> <input type='hidden' name='l_name' value='".$get_names_row['l_name']."'>"; } else { $display_block .= "<h2> <p><strong>For-/efternavn:</strong><br> <input type=\"text\" name=\"f_name\" size=30 maxlength=75> <input type=\"text\" name=\"l_name\" size=30 maxlength=75></h2>"; } $display_block .= "<h2><strong>Adresse:</strong></h2> <h2><input type=\"text\" name=\"address\" value='".$get_names_row['adress']."' size=30 maxlength=63></h2>
// etabler forbindelse til databasen $conn = mysql_connect("localhost", "xxxx", "xxxxxx") or die(mysql_error()); mysql_select_db("xxxxxx",$conn) or die(mysql_error());
{ // føj til master_name-tabellen $upd="UPDATE master_name SET f_name='".$_POST['f_name']."', l_name='".$_POST['l_name']."', address='".$_POST['address']."', postnr='".$_POST['postnr']."', postby='".$_POST['postby']."', tel_number='".$_POST['tel_number']."', fax_number='".$_POST['fax_number']."', cvr_number='".$_POST['cvr_number']."', email='".$_POST['email']."' WHERE id='".$_POST['id']."'"; mysql_query($upd) or die(mysql_error()); }
$display_block = "<h1>Statusmelding for tilføjning af data ved eksisterende kunde</h1> <h2>Der er tilføjet data vedr. <strong>$get_names</strong></h2> <h2><a href=\"addinfo.php?master_id=".$_POST['id']."\">tilføj flere data til samme kunde</a></h2> <h2><a href=\"adressemenu.htm\">tilbage til menu</a></h2> <h2><a href=\"selentry.php\">få vist kundens data fra kundedatabasen</a></h2>"; } ?>
Jeg syntes der mangler lidt til at sende output men det har du sikkert lavet. Jeg har naturligvis ikke kunne teste det men lad mig høre resultatet.
jammen det er jo lækkert :) det fungere bortset fra at du havde glemt et "d" ved address } $display_block .= "<h2><strong>Adresse:</strong></h2> <h2><input type=\"text\" name=\"address\" value='".$get_names_row['ad_D_ress']."' size=30 maxlength=63></h2>
lige en hurtig ting begriber simpelthen ik hvor du f.eks har fået den extra kode fra du har vel selv lavet den, men hvordan, bruger du et værktøj?, eller er det noget du har mellem ørende lad høre :)
He he....jamen det er noget jeg har mellem ørene, for at bruge dine ord :) Jeg bruger ikke umiddelbart noget værktøj, bortset fra notepad som jeg skriver i. Men læser flittigt på php.net og msdn.microsoft.com/library
Det er lækkert at det fungere så her kommer et svar...smider også et det andet sted.
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.