Avatar billede clausberg Nybegynder
05. april 2005 - 18:44 Der er 24 kommentarer og
2 løsninger

Insert into - virker ikke.

Hej
Jeg vil gerne lægge data ind i min database via denne lille skabelon:

1. script gemmes som insert.htm:

<html>
<head>
</head>
<center>
<form method="post" action="http://www.minadresse.dk/script.php">
<table>
<tr><td align="left">Name</td>
<td><input type="text" name="name"></td>
</tr>
<tr><td align="left">Telephone</td>
<td><input type="text" name="telephone" size="20"></td>
</tr>
<tr><td align="left">Birthday</td>
<td><input type="text" name="birthday" size="20"></td>
</tr>
<tr><td colspan="2">
<p align="center">
<input type="submit" value="Enter record">
</td>
</tr>
</table>
</form>
</center>
</html>

Næste script gemmes som script.php:

<?php
$DBhost = "localhost";
$DBuser = "username";
$DBpass = "password";
$DBName = "navnet på database";
$table = "details";
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

@mysql_select_db("$DBName") or die("Unable to select database $DBName");

$sqlquery = "INSERT INTO $table (id,name,telephone,birthday) VALUES('$id','$name','$telephone','$birthday')";

$results = mysql_query($sqlquery);

mysql_close();

print "<html><body><center>";
print "<p>You have just entered this record<p>";
print "Name : $name<br>";
print "Telephone : $telephone<br>";
print "Birthday :$birthday";
print "</body></html>";
?>

Jeg har oprettet en database i phpmyadmin med de rigtige feltnavne osv.

1.problem: når jeg trykker på "submit knappen" så kommer jeg frem til en ny side, hvor der står:

You have just entered this record:
Name:
Telephone:
Birthday:

MEN mine data mangler! (der er som om, at scriptet ikke er i stand til at vise de data jeg netop har indtastet)

2. problem: I min table (details) i phpmyadmin, kan jeg efter klik på "submit knappen" se, at phpmyadmin godt nok har registreret, at der er sket et eller andet, for der er oprettet en ny linie med et nyt id nummer i min DB - dvs. id nummeret stiger, men de 3 felter (navn, telefonnummer og fødselsdag) er tomme... og det er et problem!!!!!!!


Hjælp plz!?!?! Jeg har prøvet alt.
Avatar billede bromer Nybegynder
05. april 2005 - 18:48 #1
$sqlquery = sprintf("INSERT INTO $table (id,name,telephone,birthday) VALUES('%s','%s','%s','%s')",$_POST['id'],$_POST['name'],$_POST['telephone']
,$_POST['birthday']);
Avatar billede dennismp Nybegynder
05. april 2005 - 18:48 #2
har du slået register_globals til? Det ser ud til at være det der er galt
Avatar billede dennismp Nybegynder
05. april 2005 - 18:49 #3
At register-globals er en skidt ting (imho) og at koden burde lave både data-validering og tjekke om sql'en bliver udført er så en anden ting :)
Avatar billede bromer Nybegynder
05. april 2005 - 18:51 #4
Der er generelt alt for mange, der koder PHP uden at undersøge input overhoved. Det man programmerede på samme måde i C/C++ ville man se en del buffer-overflows etc :)
Avatar billede dennismp Nybegynder
05. april 2005 - 19:36 #5
Ja. Jeg kunne forestille at vi(?) der har brugt et andet programmeringssprog er noget mere opmærksom på den slags, iforhold til folk der er kommet igang med en tagwall tutorial.

Desværre er kvaliteten er mange tutorials ret lav. Det er lidt syndt, som jeg ser det, har PHP folk er ret dårlig rygte mellem "rigtige" programmører. Og når disse folk så selv laver tutorials, så går det jo helt galt :)

Har set include($_GET['page']); et par gange herinde. Det burde give dummebøde :)
Avatar billede bromer Nybegynder
05. april 2005 - 19:58 #6
Ja, med mindre man udfører ændringerne direkte på $_GET['page'], men det er nu en ting jeg holder mig fra, så man altid har de rå data i de prædefinerede variabler. Men det er nu ikke kun folk der koder PHP, der gør nogle underlige ting. Selve sproget er - efter min mening - heller ikke særlig kønt efterhånden. Godt nok er klasse implementationer blevet pænere, men stadig. Jeg er meget en fortaler for C, idet selve sproget jo er ganske småt.
Avatar billede barklund Nybegynder
05. april 2005 - 21:38 #7
hihi, med include($_GET['page']) og fil.php?page=php://input kan man lave sjove ting :D
Avatar billede clausberg Nybegynder
05. april 2005 - 22:21 #8
:-D man skal virkelig holde tungen lige i munden, når man som jeg er ny og læser dette :-D Men tak for hjælpen. Det er konge med jeres hurtige svar!

Dog står jeg stadig uden løsning - selv med jeres ændringer,sker det samme:

Altså at de informationer jeg skriver i felterne i min skabelon, IKKE figurerer i databasen. Dog er der jo sket noget, idet databasen er blevet udvidet med en ekstra linie med sit egen id nr. Så jeg vil tro der er kontakt til DB...

register_globals... ved ikke om det er slået til eller fra... ved desværre heller ikke hvor jeg kan finde det????!!!!

Andre forslag :-D
Avatar billede bromer Nybegynder
05. april 2005 - 22:23 #9
prøv at køre følgende kode når du skal indsætte i databasen og giv os outputtet :)

printf("INSERT INTO $table (id,name,telephone,birthday) VALUES('%s','%s','%s','%s')",$_POST['id'],$_POST['name'],$_POST['telephone']
,$_POST['birthday']);
Avatar billede clausberg Nybegynder
05. april 2005 - 22:45 #10
Jeg har nu prøvet at køre følgende script:

<?php
$DBhost = "localhost";
$DBuser = "username";
$DBpass = "password";
$DBName = "navnet på database";
$table = "details";
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

@mysql_select_db("$DBName") or die("Unable to select database $DBName");

printf("INSERT INTO $table (id,name,telephone,birthday) VALUES('%s','%s','%s','%s')",$_POST['id'],$_POST['name'],$_POST['telephone'],$_POST['birthday']);

$results = mysql_query($sqlquery);

mysql_close();

print "<html><body><center>";
print "<p>You have just entered this record<p>";
print "Name : $name<br>";
print "Telephone : $telephone<br>";
print "Birthday :$birthday";
print "</body></html>";
?>

Men nu kan jeg slet ikke få forbindelse til DB.

Og bare for en god ordens skyld:
mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");
Skal jeg udskrive fx $DBhost med localhost som er den host mit webhotel har oplyst, eller skal jeg bare lade det stå???
Avatar billede bromer Nybegynder
05. april 2005 - 22:47 #11
Det er klart at du ikke får forbindelse til databasen idet $sqlquery ikke er defineret. Men bliver der ikke printet en SQL sætning til skærmen?
Avatar billede clausberg Nybegynder
05. april 2005 - 22:59 #12
ahhhh :-D Tror jeg fik defineret $sqlquery... eller hva´:


<?php
$DBhost = "localhost";
$DBuser = "username";
$DBpass = "password";
$DBName = "navnet på database";
$table = "details";

mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

@mysql_select_db("$DBName") or die("Unable to select database $DBName");

$sqlquery = printf("INSERT INTO $table (id,name,telephone,birthday) VALUES('%s','%s','%s','%s')",$_POST['id'],$_POST['name'],$_POST['telephone'],$_POST['birthday']);

$results = mysql_query($sqlquery);

mysql_close();

print "<html><body><center>";
print "<p>You have just entered this record<p>";
print "Name : $name<br>";
print "Telephone : $telephone<br>";
print "Birthday :$birthday";
print "</body></html>";
?>

Men når jeg kører scriptet, sker der intet, og der bliver ikke printet en sql sætning på skærmen.
Avatar billede bromer Nybegynder
05. april 2005 - 23:01 #13
det kan da ikke helt passe.. Du får overhoved ikke noget output på skærmen?
Avatar billede clausberg Nybegynder
05. april 2005 - 23:08 #14
Nu får jeg sql sætningen:

INSERT INTO details (id,name,telephone,birthday) VALUES('','','','')
You have just entered this record

Name :
Telephone :
Birthday :

Som du kan se, er det som om, at de informationer jeg skriver ind i min template ikke bliver registreret... og der sker intet i min DB i phpmyadmin
Avatar billede bromer Nybegynder
05. april 2005 - 23:12 #15
Der sker ikke noget i din database fordi du ikke kører din query, men derimod bare printer den.

Hvad sker der hvis du kører

<?
var_dump($_POST);
?>
Avatar billede clausberg Nybegynder
05. april 2005 - 23:22 #16
Hvor skal jeg køre:
<?
var_dump($_POST);
?>
Skal jeg blot save disse 3 linier som script.php eller skal de proppes ind blandt andre sætninger - jeg er nemlig ikke helt med.

Tænkte på om du kunne stykke hele scriptet sammen fra de dele jeg har givet dig - er nemlig usikker på hvilke sætninger der skal med, og hvilke der skal have kniven.
Avatar billede bromer Nybegynder
05. april 2005 - 23:26 #17
Du submitter formen når du skal indsætte data ikke?

<?php
$DBhost = "localhost";
$DBuser = "username";
$DBpass = "password";
$DBName = "navnet på database";
$table = "details";

mysql_connect($DBhost,$DBuser,$DBpass) or die("Unable to connect to database");

@mysql_select_db("$DBName") or die("Unable to select database $DBName");

$sqlquery = sprintf("INSERT INTO $table (id,name,telephone,birthday) VALUES('%s','%s','%s','%s')",$_POST['id'],$_POST['name'],$_POST['telephone'],$_POST['birthday']);

print "Query er: " . $sqlquery;
var_dump($_POST);
$results = mysql_query($sqlquery);

mysql_close();

print "<html><body><center>";
print "<p>You have just entered this record<p>";
print "Name : $name<br>";
print "Telephone : $telephone<br>";
print "Birthday :$birthday";
print "</body></html>";
?>
Avatar billede clausberg Nybegynder
05. april 2005 - 23:35 #18
Takker...

Har prøvet at køre det script du gav mig og får følgende:

Query er: INSERT INTO details (id,name,telephone,birthday) VALUES('','','','')array(3) { ["$name"]=> string(6) "Forsøg" ["$telephone"]=> string(8) "12345678" ["$birthday"]=> string(5) "12.12" }
You have just entered this record

Name :
Telephone :
Birthday :

Jov... jeg submitter min form når jeg indsætter data:

<form method="post" action="http://www.minadresse.dk/script.php">
...
...
...
<input type="submit" value="Enter record">
Avatar billede bromer Nybegynder
05. april 2005 - 23:38 #19
jeg vil gerne se resten af input felterne.. jeg tror det er din navngivning deri der er gal
Avatar billede clausberg Nybegynder
05. april 2005 - 23:44 #20
Tror du har ret.

Smider først lige lidt info om min table:

Min SQL-tabel ser sådan her ud:
CREATE TABLE `it_stud_bruger` (
  `id` int(11) NOT NULL auto_increment,
  `navn` varchar(25) NOT NULL default '',
  `adr` varchar(50) NOT NULL default '',
  `post` tinyint(4) NOT NULL default '0',
  `by` varchar(15) NOT NULL default '',
  `fodt` varchar(12) NOT NULL default '',
  `udd_navn` varchar(20) NOT NULL default '',
  `udd_sted` varchar(20) NOT NULL default '',
  `aar_start` tinyint(4) NOT NULL default '0',
  `aar_slut` tinyint(4) NOT NULL default '0',
  `stud_bruger` varchar(30) NOT NULL default '',
  `oprettet` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

Derefter scriptet:

<html>
<head>
</head>
<center>
<form method="post" action="http://www.minadresse.dk/script.php">
<table>
<tr><td align="left">Name</td>
<td><input type="text" name='$name' size="20"></td>
</tr>
<tr><td align="left">Telephone</td>
<td><input type="text" name='$telephone' size="20"></td>
</tr>
<tr><td align="left">Birthday</td>
<td><input type="text" name='$birthday' size="20"></td>
</tr>
<tr><td colspan="2">
<p align="center">
<input type="submit" value="Enter record">
</td>
</tr>
</table>
</form>
</center>
</html>

Kan det være "name" som har en funktion i phpmyadmin/php og som volder alle problemerne - jeg har dog prøvet at oversætte den til dansk, og bare skrive "navn" overalt, men uden held? Men forsøger lige igen.
Avatar billede bromer Nybegynder
06. april 2005 - 07:12 #21
Der var problemet rigtigt nok. Når du navngiver et input-felt for eksempel telephone - altså <input name='telephone'> modtager du $telephone (eller $_POST['telephone']) i PHP efter formen er blevet submittet. Det vil sige at når du kalder et input felt for $telephone skal man modtage den med $_POST["$telephone"] eller noget i den stil. Jeg er 100% overbevidst om at det ikke er vejen frem, så du bør ændre din form til følgende:

<form method="post" action="http://www.minadresse.dk/script.php">
<table>
<tr><td align="left">Name</td>
<td><input type="text" name='name' size="20"></td>
</tr>
<tr><td align="left">Telephone</td>
<td><input type="text" name='telephone' size="20"></td>
</tr>
<tr><td align="left">Birthday</td>
<td><input type="text" name='birthday' size="20"></td>
</tr>
<tr><td colspan="2">
<p align="center">
<input type="submit" value="Enter record">
</td>
</tr>
</table>
</form>
</center>
</html>

Jeg er ret sikker på at det virker, så jeg har lagt et svar :)
Avatar billede clausberg Nybegynder
06. april 2005 - 21:16 #22
WHAT !!!!!!!!!!!!! Det virker :-D :-D :-D :D
Du har været en mega hjælp - takker :-)
Ha´ en forsat god aften
Avatar billede clausberg Nybegynder
06. april 2005 - 21:20 #23
Ja endnu engang tak for hjælpen :-D

Prøver lige at sende nogle point til dig, men kan ikke rigtigt finde ud af det (giver dog ikke op, for du har squ fortjent dem)
Avatar billede clausberg Nybegynder
06. april 2005 - 21:22 #24
Så tror jeg det lykkedes...
Det er intet der kan stoppe mig i aften :-D
Avatar billede bromer Nybegynder
06. april 2005 - 21:35 #25
haha.. fint jeg kunne hjælpe :)
Avatar billede bromer Nybegynder
06. april 2005 - 21:35 #26
og tak for point
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