Permalänk

PHP/mysql problem

<?php include 'sitetop.inc'; ?> <div id="content"> <?php include 'menu.inc'; ?> <div id="rightColumn"> <?php if(!$logged_in){ echo "<h3>ERROR</h3>"; echo "<p>Please log in to use the editor.</p>"; } else { include 'treemenu.inc'; $allowedTags='<p><strong><em><u><h1><h2><h3><h4><h5><h6><img>'; $allowedTags.='<li><ol><ul><span><div><br><ins><del>'; if($_POST['elm1'] != '') { $sContent = strip_tags($_POST['elm1'],$allowedTags); } else { $username = $_SESSION[username]; mysql_real_escape_string($username); $doc_id = $_GET['id']; mysql_real_escape_string($doc_id); $query = "SELECT * FROM docs WHERE id='$doc_id' LIMIT 1"; $result = mysql_query($query); $row = mysql_fetch_array($result); $sContent = $row['content']; $proj_id = $row['project_id']; $title = $row['title']; $length = strlen($sContent); $index = 1; //temp } echo "<h3>Editing: ".$title."</h3>"; ?> <form method="post" action="editor.php"> <textarea id="elm1" name="elm1" rows="15" cols="80"> <?php echo $sContent; if($_POST['elm1'] != '') { $q = "INSERT INTO docs VALUES ('', '$username', '$proj_id', '$title', '$sContent', '$index', 'NOW()', '$length')"; $result = mysql_query($q); } ?> </textarea> <br /> <input type="submit" name="save" value="Save" /> </form> <?php } ?> </div> <div id="clear"></div> </div> <?php include 'sitebottom.inc'; ?>

Problemet jag har är att INSERT inte sätter in rätt värden, tex så är project_id fel, NOW() ger bara nollor, etc. Kan inte hitta felet och det är väl antingen för jag är trött eller för nybörjare.

EDIT: ser felet lol! Ska ändra lite och återkomma.

EDIT2: eller det var inte felet. Hmm.

Permalänk
Medlem

Kolla hur SQL-satsen ser ut genom att sätta print framför $q.

Om $_POST['elm1'] är tomt så är har $username, $proj_id, $title, $sContent, $length, $index fått värden eftersom de är i else-satsen. Annars får bara $sContent ett värde.

Du använder inte mysql_escape_string på rätt sätt. Just nu gör de ingenting.

Gjorde lite otestade ändringar:

error_reporting(E_ALL); <?php include 'sitetop.inc'; ?> <div id="content"> <?php include 'menu.inc'; ?> <div id="rightColumn"> <?php // if (!isset($_SESSION['username'])) { if(!$logged_in){ echo '<h3>ERROR</h3>'; echo '<p>Please log in to use the editor.</p>'; } else { include 'treemenu.inc'; $username = mysql_real_escape_string($_SESSION['username']); $doc_id = intval($_GET['id']); $query = "SELECT * FROM docs WHERE id={$doc_id} LIMIT 1"; $result = mysql_query($query); $row = mysql_fetch_assoc($result); $sContent = $row['content']; $proj_id = $row['project_id']; $title = $row['title']; $length = strlen($sContent); $index = 1; if(isset($_POST['elm1']) && !empty($_POST['elm1'])) { $allowedTags = '<p><strong><em><u><h1><h2><h3><h4><h5><h6><img>'; $allowedTags .= '<li><ol><ul><span><div><br><ins><del>'; $sContent = strip_tags($_POST['elm1'],$allowedTags); // skulle vilja köra: INSERT INTO docs (username, project_id, title, content // kolumner för index, datum, längd) VALUES ('{$username}', '{$proj_id}', '{$title}', '{$sContent}', '{$index}', 'NOW()', '{$length}') print $q = "INSERT INTO docs VALUES ('', '$username', '$proj_id', '$title', '$sContent', '$index', 'NOW()', '$length')"; $result = mysql_query($q); } } echo "<h3>Editing: {$title}</h3>"; ?> <form method="post" action="editor.php"> <textarea id="elm1" name="elm1" rows="15" cols="80"> <?php echo $sContent;?> </textarea> <br /> <input type="submit" name="save" value="Save" /> </form> <?php } ?> </div> <div id="clear"></div> </div> <?php include 'sitebottom.inc'; ?>

Permalänk

Ah, såg ju vilka dumma missar jag gjort! Men det är fortfarande problem queryn.

queryn såg ut så här printad:

INSERT INTO docs VALUES ('', 'user', '', '', 'innehållet', '1', 'NOW()', '28')

Alltså project_id, title och datetime blir fel (tomma). NOW() resulterar i 0000-00-00 00:00:00, den har fungerat tidigare men tog bort den koden nån gång.

Sen så buggar denna tråd så man inte ser all kod. Den försvinner ut till höger. Även Citera och Ändra knapparna försvinner så jag kan inte quota din post.

Hur skulle din query se ut istället?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Cloudburst

INSERT INTO docs VALUES ('', 'user', '', '', 'innehållet', '1', 'NOW()', '28')

Bort med single-quotsen runt NOW(), annars tror mySQL att det är text och försöker parsea det till ett datum, vilket inte går så bra.

Permalänk

Men störande, jag visste ju det och hade inte sånna från början, men efter jag skrivit om queryn några gånger så slant det i fingrarna.

Okey datetime funkar, project_id och title blir fel. Ska kolla lite mer.

Permalänk
Medlem

Jag har också ett litet probem^^ Jag har gjort en sida där man kan Converta text i ett textfällt till en viss fil... problemet är bara det att det kommer upp "\" teken hela tiden och vet inte hur jag ska göra. Har aldrig hafft sånt förrut? Så jag undrar om det finns en php-kod eller nått annat som kan få bort alla dom teknen genom att kolla genom hela filen? eller på nått sätt fixa till koden...

Tex när jag skriver in detta:
Response = MsgBox ("dåligt", 1)

så blir det så här:
Response = MsgBox (\"dåligt\", 1)

och filen visa ett error...nån som vet nått?

Permalänk
Medlem

För att felsöka kan du prova med statiska värden i din INSERT. Du kan även skriva ut innehållet i de variabler som inte blir korrekt skriva till databasen så du kan se ifall de är fel även då de skrivs ut.
Skall kolla igenom din kod lite mer och se ifall jag hittar något skumt.

Edit:
Jag förstår inte riktigt varför skall lägga in en tom cell innan $username
Du kan välja vilka kolumner du vill lägga in data i. Kanske något såhär:

INSERT INTO docs([username],[projekt_id],[title],[sContent],[index],[date],[length]) VALUES('$username', '$proj_id', '$title', '$sContent', '$index', NOW(), '$length')

Nu gissade jag bara på kolumnnamnen, så det får du fixa till själv.

Till n0tic:

Du får nog förklara lite bättre vad du menar.

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem

Förklaring

<textarea name="buildthis" cols="35" rows="8" >Response = MsgBox ('Skriv din egena fil från scratch! - http://www.epic-games.se/', 9)</textarea>

Den är döpt till "buildthis" i en <Form> som skickar en vidare med method="post" till sidan Convert.php med PHP texten

<?php

$filamnet = $_POST['filamnet'];
$buildthis = $_POST['buildthis'];

echo "Du valde <u>$filamnet</u> som ditt projekt namn<br>";
echo "och <br><br><u>".$buildthis."<br></u><br><br> som din kodning.<br>";
echo "Dom där Koderna kommer att finnas i ditt projekt.";

$myFile = "advbuilds/$filamnet.vbs";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $buildthis);
fclose($fh);
echo "<br>";
echo "<br>";
echo "<br>";
echo "<br>";
echo "<a href='advbuilds/".$filamnet.".vbs'>Hämta din fil!</a>";
?>

skriver jag då:
Response = MsgBox ("dåligt", 1)
I rutan "buildthis så står det:
Response = MsgBox (\"dåligt\", 1)

i filen och det är det som det inte ska göra
Ska prova koden i morrn, tack för ditt snabba svar

Permalänk

finns ju en fin metod som heter stripslashes() som kanske löser ditt problem.

Visa signatur

Om man tänker en tanke, så är den tanken inte den tanke man tror att man tänker. Utan det är den tanke som får en att tro att man tror den tanke man tror att man tänker.

Permalänk
Citat:

Ursprungligen inskrivet av crazzir
För att felsöka kan du prova med statiska värden i din INSERT. Du kan även skriva ut innehållet i de variabler som inte blir korrekt skriva till databasen så du kan se ifall de är fel även då de skrivs ut.
Skall kolla igenom din kod lite mer och se ifall jag hittar något skumt.

Edit:
Jag förstår inte riktigt varför skall lägga in en tom cell innan $username
Du kan välja vilka kolumner du vill lägga in data i. Kanske något såhär:

INSERT INTO docs([username],[projekt_id],[title],[sContent],[index],[date],[length]) VALUES('$username', '$proj_id', '$title', '$sContent', '$index', NOW(), '$length')

Nu gissade jag bara på kolumnnamnen, så det får du fixa till själv.

Den första kolumnen är auto increment id i databasen så hade för mig att man gjorde så, heh. Hur gör man egentligen?

Inte haft tid att testa nått än, men ska göra senare.

Permalänk
Medlem

INSERT INTO docs ([username],[projekt_id],[title],[sContent],[index],[dat e],[length]) VALUES('$username', '$proj_id', '$title', '$sContent', '$index', NOW(), '$length')

Som du ser i denna sträng så har jag själv specificerat vilka kolumner jag vill föra in information i. I detta fallet username, projekt_id, title, sContent, index, date, length.
Om du inte skulle vilja föra in information i t.ex kolumnen username så tar du helt enkelt bort [username], samt ser till att ta bort det värdet du skulle föra in i [username]. (I mitt exempel $username).

Hoppas det löser sig

MVH / Crazzir

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk

<?php include 'sitetop.inc'; ?> <div id="content"> <?php include 'menu.inc'; ?> <div id="rightColumn"> <?php if(!$logged_in){ echo "<h3>ERROR</h3>"; echo "<p>Please log in to use the editor.</p>"; } else { include 'treemenu.inc'; $username = mysql_real_escape_string($_SESSION[username]); $doc_id = intval($_GET['id']); $query = "SELECT * FROM docs WHERE id='$doc_id' LIMIT 1"; $result = mysql_query($query); $row = mysql_fetch_array($result); $content = $row['content']; $title = $row['title']; $proj_id = $row['project_id']; $index = 1; //temp if(isset($_POST['elm1']) && !empty($_POST['elm1'])) { $allowedTags='<p><strong><em><u><h1><h2><h3><h4><h5><h6><img>'; $allowedTags.='<li><ol><ul><span><div><br><ins><del>'; $content = strip_tags($_POST['elm1'],$allowedTags); $length = strlen($content); $q = "INSERT INTO docs ([username],[project_id],[title],[content],[index],[datetime],[length])"; $q .= " VALUES('$username', '$proj_id', '$title', '$content', '$index', NOW(), '$length')"; $result = mysql_query($q); } echo "<h3>Editing: $title</h3><br>"; } ?> <form method="post" action="editor.php"> <textarea id="elm1" name="elm1" rows="15" cols="80"> <?php echo $content; ?> </textarea> <br /> <input type="submit" name="save" value="Save" /> </form> </div> <div id="clear"></div> </div> <?php include 'sitebottom.inc'; ?>

Ok, problemet är att när man trycker på submit så nollställs $title och $proj_id. Hur fixar man det?

edit: fast med denna nya query så läggs inget alls in i databasen, det gör den förra iaf.

edit: eller hittade felet med varför de blev noll (skickade ju inte med id i urlen i action i form), men inte varför den nya queryn inte fungerar.

sen så har jag börjat få massa "& nbsp;" i databasen istället för "rena" mellanslag och all är centrerat. Så var det inte innan. Löser ett problem, får 2 nya...

Permalänk
Medlem

Funkade utmärkt!
(med lite extra kodning^^)

$buildthis = stripinput(stripslashes($buildthis));

Tack ska du ha Prizephitah!

Permalänk

Jag tror möjligen felet varför UPDATE inte fungerar är att användarna inte har de rättigheterna. Men de har SELECT och INSERT (inte testat DELETE).

Skulle nån enkelt kunna säga VART man ska skriva in GRANT sakerna. Jag ville ha min root som kan göra allt och sen alla andra som registrerar sig ska ha SELECT, INSERT, UPDATE och DELETE.

Är lite lost i allt detta, visste inte ens om GRANT förran 5 minuter sedan.