mboost-dp1

hjælp til PHP kode


Gå til bund
Gravatar #1 - katrine_ny_i_programering
11. apr. 2012 18:32
hej jeg er ganske ny i alt det her programmering og håber jeg kan få lidt hjælp her inde til mit problem...

jeg er ved at designe en blog og har fået lavet min MySQL færdig så det hele virker samt lavet min første side hvor man kan "lave" et indlæg, alt dette fungere fint og har tjekket at min MySQL fungere
men denne kodestump vil ikke virke er der nogle der kan sige mig hvorfor?


$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$result=mysql_query($sql);

if($result){
echo "Successful<BR>";
echo "<a href=main_forum.php>View your topic</a>";
Gravatar #2 - Mamad (moveax1ret)
11. apr. 2012 18:42
Nu har jeg ikke rigtigt kodet php før, men

$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";

burde vist være:

$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime) VALUES ('$topic', '$detail', '$name', '$email', '$datetime')"; forudsat de alle er strings, prøv evetuelt at udskrive resulstatet af sql og insæt den i din sql manager og se resulstatet der.

I øvrigt er du dybt vulnerable overfor sql injections, det burde du nok læse op på inden du ligger noget ud på wwww
Gravatar #3 - arne_v
11. apr. 2012 18:43
katrine_ny_i_programering (1) skrev:
ikke virke


Lyst til at uddybe?
Gravatar #4 - arne_v
11. apr. 2012 18:45
#1

Hvis jeg skal gætte, så tror jeg at problemet er at DATETIME er et reserveret ord.

Enten omdøb eller put forward dapper omkring.
Gravatar #5 - arne_v
11. apr. 2012 18:46
#2

Hvad er forskellen på de to bortset fra de to ekstra spaces?
Gravatar #6 - katrine_ny_i_programering
11. apr. 2012 18:58
Mamad:jeg sikre selvfølgelig min SQL inden den kommer op på det store WWW ;)
koden vill eikke reagere hvis jeg satte det ind du skrev :( andet foreslag?
please!!!
Gravatar #7 - katrine_ny_i_programering
11. apr. 2012 19:03
arne_v:

virker ikke: i forhold til hele koden ->

<?php
$host="localhost"; // Host name
$username="kmariea"; // Mysql username
$password="3XrdRPsd3AJ3tvLw"; // Mysql password
$db_name="kmariea"; // Database name
$tbl_name="forum"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// get data that sent from form
$topic=$_POST['topic'];
$detail=$_POST['detail'];
$name=$_POST['name'];
$email=$_POST['email'];

$datetime=date("d/m/y h:i:s"); //create date time

$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$result=mysql_query($sql);

if($result){
echo "Successful<BR>";
echo "<a href=main_forum.php>View your topic</a>";
}
else {
echo "ERROR";
}
mysql_close();
?>


har jeg testet (ved at sætte echo "hej") ind efter jeg forbinder til min database og efter


$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$result=mysql_query($sql);


og det virker...
jeg har også prøvet at echo $sql ud og så viser den også den string der er SQL derfor har jeg med mine få egenskaber tænkt at det er der fejlen er
Gravatar #8 - katrine_ny_i_programering
11. apr. 2012 19:05
... altså i

$sql="INSERT INTO $tbl_name(topic, detail, name, email, datetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";
$result=mysql_query($sql);

if($result){
echo "Successful<BR>";
echo "<a href=main_forum.php>View your topic</a>";
Gravatar #9 - arne_v
11. apr. 2012 19:06
katrine_ny_i_programering (7) skrev:
virker ikke: i forhold til hele koden


Hvordan kan det ikke virke i koden at du bruger et validt feltnavn??
Gravatar #10 - katrine_ny_i_programering
11. apr. 2012 19:06
bortset, hvad er det?
Gravatar #11 - arne_v
11. apr. 2012 19:09
#10

Altså enten omdøber du datetime i tabellen til xdatetime og bruger:

$sql="INSERT INTO $tbl_name(topic, detail, name, email, xdatetime)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";

eller så bruger du forward dapper (grimt men):

$sql="INSERT INTO $tbl_name(topic, detail, name, email, `datetime`)VALUES('$topic', '$detail', '$name', '$email', '$datetime')";

Gravatar #12 - arne_v
11. apr. 2012 19:10
#7&10

Og så vil det stadig hjælpe lidt hvis du udskrev fejl fra MySQL!
Gravatar #13 - katrine_ny_i_programering
11. apr. 2012 19:29
når jeg indsætter dapper får jeg den ERROR frem som der står i min echo
Gravatar #14 - katrine_ny_i_programering
11. apr. 2012 19:35
... også når jeg bruger x
Gravatar #15 - arne_v
11. apr. 2012 19:36
#13 & 14

Prøv og udskriv mysql_error()
Gravatar #16 - Mnc
11. apr. 2012 19:40
Som jeg husker det bør man

VALUES ('".$var1."', '".$var2."')

Kan på ingen måde huske hvor ' / " og .$var er funktionelt og hvor det er kosmetisk... Det er alt for længe siden jeg har skrevet php.
Gravatar #17 - arne_v
11. apr. 2012 19:43
#16

Du kan.

Men:

<?php
$h = 'Hello';
$w = "world";
echo $h . ' ' . $w . "\r\n";
echo "$h $w\r\n";
?>


udskriver to ens linier.
Gravatar #18 - katrine_ny_i_programering
11. apr. 2012 19:46
hvilken linie skal jeg sætte mysql_error() ind?
Gravatar #19 - arne_v
11. apr. 2012 19:56
#18

Du kan erstatte:

echo "ERROR";

med:

echo mysql_error();
Gravatar #20 - arne_v
11. apr. 2012 19:56
#18

eller bruge den idiomatisk:

$result=mysql_query($sql) or die(mysql_error());
Gravatar #21 - katrine_ny_i_programering
11. apr. 2012 20:11

$result=mysql_query($sql) or die(mysql_error());=Duplicate entry '0' for key 1

echo "ERROR"=echo "echo mysql_error()";

echo "$result=mysql_query($sql) or die(mysql_error())";=mysql_query(INSERT INTO forum(topic, detail, name, email, datetime)VALUES('1', '2', '3', '4', '11/04/12 10:09:45')) or die(mysql_error()
Gravatar #22 - arne_v
11. apr. 2012 20:15
#21

"Duplicate entry '0' for key 1" lyder som om primary key allerede eksisterer i databasen.
Gravatar #23 - katrine_ny_i_programering
11. apr. 2012 20:22
jeg har sat primary key i "forum" til at være "id"

-giver det mening?
Gravatar #24 - katrine_ny_i_programering
11. apr. 2012 20:22
men "id" er slet ikke med i min kode her
Gravatar #25 - reefermadness  
11. apr. 2012 20:22
Ja men du mangler at sætte AUTO_INCREMENT på den.
Gravatar #26 - katrine_ny_i_programering
11. apr. 2012 20:38
OMG det virker... fuck mange mange mange tak er så lykkelig for din hjælp
tak tak tak du er en skat
Gravatar #27 - katrine_ny_i_programering
11. apr. 2012 20:38
hvad gør denne AUTO_INCREMENT?
Gravatar #28 - reefermadness  
11. apr. 2012 21:07
Den sørger for at din ID (som jo fungerer som en hurtig reference til dine posts automatisk bliver sat rigtigt, så den auto incrementer (altså automatisk giver dine posts ID 1, 2, 3 osv.)

Er det her noget skole arbejde eller ?

Selv tak :)
Gravatar #29 - ISCS
12. apr. 2012 05:57
arne_v (11) skrev:
Altså enten omdøber du datetime i tabellen til xdatetime og bruger

Jeg vil ikke mene der er nogle problemer i at kalde en kollonne datetime.

Men formatet er ikke en korrekt datetime, hvis typen faktisk er en datetime.

katrine_ny_i_programering (7) skrev:
$datetime=date("d/m/y h:i:s"); //create date timet


En datetime bør se således ud: date("Y-m-d H:i:s");
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login