27. februar 2011 - 17:44Der er
38 kommentarer og 1 løsning
phpMyAdmin: Min backend er skør?
Hej alle,
Jeg er i gang med en hjemmeside og har brugt phpMyAdmin til at lave en backend. I mine felter som bare er en normal formular har jeg et felt som bare er til noget tekst. Men! Når jeg redigerer i den er det ikke altid den vil godtage det jeg har skrevet - det vil sige, nogle gange vil den godtage noget af det jeg har skrevet og nogle gange vil den ikke. Men hvis jeg går ind i selve phpMyAdmin er der ingen problemer. Men det holder naturligvis ikke når den bliver lagt ud på the world wide web!
Så hvad kan der være galt? Jeg har både prøvet at kalde det for text og longtext men intet hjælper? Er der noget jeg fuldstændig har overset eller hvorfor teer den sig sådan?
Håber der er nogle nørder i blandt der kan hjælpe :)
<?php if (isset($_GET['update'])) { $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("yojonas", $con);
mysql_query("UPDATE blog SET pic_link = '".$_GET['pic_link']."', headline = '".$_GET['headline']."', date = '".$_GET['date']."', text = '".$_GET['text']."'");
mysql_close($con); } ?>
<?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("yojonas", $con);
$result = mysql_query("SELECT * FROM blog WHERE id = '".$_REQUEST['ID']."'");
Dette er noget "MEGA" føj... mysql_query("UPDATE blog SET pic_link = '".$_GET['pic_link']."', headline = '".$_GET['headline']."', date = '".$_GET['date']."', text = '".$_GET['text']."'");
Du må ikke tage data direkte fra $_GET og smide ind i sql. Du bør sikre pic_link, headline, date, text er korrekte data formatter. date kunne man f.eks. tjekke at det rent faktisk indeholde:
YYYY-MM-DD eller lign. og ligeledes med de andre. Og disse bør du også smide igennem mysql_real_escape_string() inden du smider dem i db.
Jeg er stadig lidt lost må jeg nok indrømme. Kan forstå det med f.eks. date - men det er nu ikke det der gør mest ondt på mig. Det er nok at jeg stadig ikke ved hvor jeg skal smide mysql_real_escape_string() ind henne i min kode.
Hvis vi glemmer alt om tjek, men kun vil undgå inputs som ' og " skulle ødelægge din sql, så kunne det se sådan ud:
<?php if (isset($_GET['update'])) { $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("yojonas", $con);
mysql_query("UPDATE blog SET pic_link = '".mysql_real_escape_string($_GET['pic_link'])."', headline = '".mysql_real_escape_string($_GET['headline'])."', date = '".mysql_real_escape_string($_GET['date'])."', text = '".mysql_real_escape_string($_GET['text'])."'");
mysql_close($con); } ?>
<?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("yojonas", $con);
$result = mysql_query("SELECT * FROM blog WHERE id = '".$_REQUEST['ID']."'");
Ved f.eks. den kode vi har taget, når jeg indsætter den og laver en update. Så skifter den pic_link, headline, date og text til det samme på alle mine id'er - så det hele får det samme indhold?
Og der har du netop: <td><input name="ID" type="hidden" value="<?php echo $row['id']; ?>"</td>
Så vi skal huske en:
mysql_query("UPDATE blog SET pic_link = '".mysql_real_escape_string($_GET['pic_link'])."', headline = '".mysql_real_escape_string($_GET['headline'])."', date = '".mysql_real_escape_string($_GET['date'])."', text = '".mysql_real_escape_string($_GET['text'])."' WHERE id = intval($_GET['id']) LIMIT 1");
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /Applications/XAMPP/xamppfiles/... (og så videre) on line 40
<?php if (isset($_GET['update'])) { $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("yojonas", $con);
mysql_query("UPDATE blog SET pic_link = '".mysql_real_escape_string($_GET['pic_link'])."', headline = '".mysql_real_escape_string($_GET['headline'])."', date = '".mysql_real_escape_string($_GET['date'])."', text = '".mysql_real_escape_string($_GET['text'])."' WHERE id = ".intval($_GET['id'])." LIMIT 1");
mysql_close($con); } ?>
<?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); }
mysql_select_db("yojonas", $con);
$result = mysql_query("SELECT * FROM blog WHERE id = '".$_REQUEST['ID']."'");
Du skal nok få nogle flere point, hvis det er det du fisker efter. Du har været en stor hjælp, men lige nu vil jeg bare gerne have det til at fungere, så jeg kan komme videre :)
Hvis integer, så kan du tjekke med: is_numeric() og intval()
Synes godt om
Ny brugerNybegynder
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.