Avatar billede denner1989 Nybegynder
21. november 2006 - 18:05 Der er 12 kommentarer og
1 løsning

En mysql fejl, eller php fejl?

<?php include("tjek_logind.php"); ?> <?php include("denner.php"); ?>
<?php
$conn = mysql_connect("$host","$user","$pass");
mysql_select_db("$db",$conn);




$sql = "UPDATE kommentar SET navn='". $_POST['navn'] ."' , mail='". $_POST['mail'] ."'  , hp='". $_POST['hp'] ."' , tekst='". $_POST['tekst'] ."' where id = " . $_GET['id'];


mysql_query($sql,$connection) or die(mysql_error());
mysql_close($connection) or die(mysql_error());

?>

Den skriver:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/virtual/psychokatten.dk/public_html/design/update_kommentar.php on line 12

Linje 12: mysql_query($sql,$connection) or die(mysql_error());

Den virker på mine andre redigerings ting.
Hvad er der galt?
Avatar billede udvikler Nybegynder
21. november 2006 - 18:34 #1
Har ikke mulighed for at teste nogle scripts pt, men dette hjælpe:

<?php
$conn = mysql_connect("$host","$user","$pass");
mysql_select_db("$db",$conn);



$navn = $_POST['navn'];
$mail = $_POST['mail'];
$hp = $_POST['hp'];
$tekst = $_POST['tekst'];
$id = $_GET['id'];

$sql = "UPDATE kommentar SET navn='". $navn ."' , mail='". $mail ."'  , hp='". $hp ."' , tekst='". $tekst ."' where id = " . $id;


mysql_query("$sql,$connection") or die(mysql_error());
mysql_close($connection) or die(mysql_error());

?>

- Koden ser anderledes ud ja, det er fordi jeg har optimeret din sikkerhed. Den led gevaldigt. Måske burde du læse lidt om emnet sql injections :-)
Avatar billede davidfossil Nybegynder
21. november 2006 - 19:56 #2
udvikler > hvad er det helt præcist du mener at have gjort for at forebygge sql injections? så vidt jeg kan se har du bare gemt post værdien er nogle variable inden sql-strengen samles. det ser ud til at du har glemt noget ;)
Avatar billede udvikler Nybegynder
21. november 2006 - 20:05 #3
Ak ja, jeg glemte mysql_real_escape_string
Grunden til det er at jeg mistede det første script jeg lavede, og da jeg skrev det igen i anden omgang gik det vidst lidt for stærkt.

Tak for påmindelsen..

Mit script skulle gerne se således ud nu:

<?php
$conn = mysql_connect("$host","$user","$pass");
mysql_select_db("$db",$conn);

$navn = mysql_real_escape_string($_POST['navn']);
$mail = mysql_real_escape_string($_POST['mail']);
$hp = mysql_real_escape_string($_POST['hp']);
$tekst = mysql_real_escape_string($_POST['tekst']);
$id = mysql_real_escape_string($_GET['id']);

$sql = "UPDATE kommentar SET navn='". $navn ."' , mail='". $mail ."'  , hp='". $hp ."' , tekst='". $tekst ."' where id = " . $id;

mysql_query("$sql,$connection") or die(mysql_error());
mysql_close($connection) or die(mysql_error());
?>
Avatar billede coderdk Praktikant
21. november 2006 - 20:57 #4
Ahem:

$conn = mysql_connect("$host","$user","$pass");

og

mysql_query($sql,$connection) or die(mysql_error());
mysql_close($connection) or die(mysql_error());

?

De to sidste skal vel være:

mysql_query($sql,$conn) or die(mysql_error());
mysql_close($conn) or die(mysql_error());

udviklers pointe med mysql_real_escape_string er dog stadig valid
Avatar billede baitianlong Nybegynder
21. november 2006 - 21:23 #5
<?php
include("tjek_logind.php");
include("denner.php");
$host = ???;
$user = ???;
$pass = ???;
$db = ???;
$conn = mysql_connect($host,$user,$pass);
mysql_select_db($db);
$sql = "UPDATE kommentar SET navn='". $_POST['navn'] ."' , mail='". $_POST['mail'] ."'  , hp='". $_POST['hp'] ."' , tekst='". $_POST['tekst'] ."' where id = " . $_GET['id'];
mysql_query($sql) or die(mysql_error());
mysql_close();
?>

Det burde vaere fint! Om du lukker eller ej, med mysql_close() vil den alligevel blive lukket (med mindre der er mere end 20 abne database forbindelser, talt ud fra php 4, og ikke 5, saa jeg ved ikke hvor mange ,der er i php5). Og den senest aabne forbindelse vil blive brugt. mysql_close() er oftest ligegyldig.

I Oevrigt kan du i php bruge variabler direkte i sql saetninger.. f.eks:

SELECT * FROM $tabel WHERE $felt = '$argument'

..Du behoever ikke konkatenere med '".$blah."'

Endvidere kan du skifte include ud med require, hvis du vil have php compileren til at kaste en fejl hvis den ikke kan finde filerne (a'la din mysql_error()).

Blot et par ord... :)
Avatar billede tdafoobar Nybegynder
21. november 2006 - 21:28 #6
legende.dk er det med vilje at du tillader SQL injections, eller har du bare aldrig hørt om input escaping ?

www.php.net/addslashes
www.php.net/mysql_real_escape_string (bedst)
www.php.net/mysql_escape_string
Avatar billede tdafoobar Nybegynder
21. november 2006 - 21:29 #7
oh, det var allerede påpeget i posten :p havde jeg overset.
Avatar billede denner1989 Nybegynder
22. november 2006 - 21:21 #8
Udvikler> Nu skriver den; "You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1"

<?php
$conn = mysql_connect("$host","$user","$pass");
mysql_select_db("$db",$conn);

$navn = mysql_real_escape_string($_POST['navn']);
$mail = mysql_real_escape_string($_POST['mail']);
$hp = mysql_real_escape_string($_POST['hp']);
$tekst = mysql_real_escape_string($_POST['tekst']);
$id = mysql_real_escape_string($_GET['id']);

$sql = "UPDATE kommentar SET navn='". $navn ."' , mail='". $mail ."'  , hp='". $hp ."' , tekst='". $tekst ."' where id = " . $id;

mysql_query("$sql,$connection") or die(mysql_error());
mysql_close($connection) or die(mysql_error());
?>
;|
Avatar billede coderdk Praktikant
22. november 2006 - 23:16 #9
Lav en echo $sql før mysql_query så vi kan se hvad den indeholder
Avatar billede denner1989 Nybegynder
22. november 2006 - 23:59 #10
UPDATE kommentar SET navn='PsychoKatten.Dk ' , mail='NoMail@PsychoKatten.Dk ' , hp='PsychoKatten.Dk' , tekst='Vær venlig at kommenterer til denne nyhed (:

Med venlig hilsen,
PsychoKatten.Dk

NB: Dette er en automatisk besked af PsychoKatten.Dk.\r\ntest' where id = 2You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Avatar billede coderdk Praktikant
23. november 2006 - 01:08 #11
mysql_query("$sql,$connection") or die(mysql_error());
mysql_close($connection) or die(mysql_error());

skal være:

mysql_query($sql,$conn) or die(mysql_error());
mysql_close($conn) or die(mysql_error());

Eller blot:

mysql_query($sql) or die(mysql_error());
Avatar billede denner1989 Nybegynder
23. november 2006 - 03:28 #12
Ah tak, nu virker det :) Smæk svar :)
Avatar billede coderdk Praktikant
23. november 2006 - 08:53 #13
Ok :)
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