Text naar MySql database
Ander probleem, ik probeer een grote tekst over de 2000 tekens naar de database te sturen, maar ik krijg maar 500 tekens naar de database gestuurd.
Nu vraag ik me af waar het aan ligt, is het de database of moet ik iets aan de values doen?
Textarea kan je heel veel tekens in kwijt, maar zodra ik in de bron kijk, stuurt ie maar 500 tekens en de post is over de 2000 tekens, waar of wat moet ik aanpassen/veranderen?
in de database heb ik mediumtext voor de grote tekenreeks
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
if($_GET['menu'] == 'bio' && $_GET['action'] == 'write') {
echo "<form action='index.php?menu=bio&action=preview' method='POST'>
<div class='write-grid0'>
<div class='write-item'>
<input type='text' name='title' placeholder='Write a catchy title here'>
</div>
<div class='write-item'>
<textarea name='story' placeholder='Write your advertising story here'></textarea>
</div>
<div class='write-item' id='button-a'><input type='submit' name='submit' value='Preview'>
</div>
</form>";
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'preview') {
$pretitle = $_POST['title'];
$prestory = $_POST['story'];
echo "<div class='write-grid'>
<div class='write-item1'>".htmlspecialchars($pretitle)."
<input type='hidden' name='title' value='".$pretitle."'></div>
<div class='write-item2'>".nl2br($prestory, true)."
<textarea hidden name='story' value='".$prestory."'></div>
<div class='write-item'><button id='button-a'><a href='index.php?menu=bio&action=postit'>Post Story</a></button></div>
</div>";
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'postit') {
$pretitle = $_GET['title'];
$prestory = $_GET['story'];
$sql = "SELECT * FROM Story WHERE User_ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
$rows = mysqli_num_rows($result);
if($rows == 0) {
$sql = "INSERT INTO Story(User_ID, Title, Bio) VALUES ('".$_SESSION['ID']."', '".$pretitle."', '".$prestory."')";
$result = mysqli_query($connect, $sql);
} else {
$sql = "UPDATE Story SET Title='".$pretitle."', Bio='".$prestory."' WHERE ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
}
} else {
/* Bio view */
$sql = "SELECT * FROM Story WHERE User_ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
$rows = mysqli_num_rows($result);
if($rows == 0) {
echo "<div id='button'><a href='index.php?menu=bio&action=write'>No \"BIO\" set!!<br />Click here to write your story</a></div>";
} else {
$story = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach($story as $bio) {
$title = $bio['Title'];
$bio = $bio['Bio'];
}
echo"<div class='write-grid'>
<div class='write-item1'>".$title."</div>
<div class='write-item2'>".nl2br($bio,true)."</div>
</div>";
}
}
?>
if($_GET['menu'] == 'bio' && $_GET['action'] == 'write') {
echo "<form action='index.php?menu=bio&action=preview' method='POST'>
<div class='write-grid0'>
<div class='write-item'>
<input type='text' name='title' placeholder='Write a catchy title here'>
</div>
<div class='write-item'>
<textarea name='story' placeholder='Write your advertising story here'></textarea>
</div>
<div class='write-item' id='button-a'><input type='submit' name='submit' value='Preview'>
</div>
</form>";
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'preview') {
$pretitle = $_POST['title'];
$prestory = $_POST['story'];
echo "<div class='write-grid'>
<div class='write-item1'>".htmlspecialchars($pretitle)."
<input type='hidden' name='title' value='".$pretitle."'></div>
<div class='write-item2'>".nl2br($prestory, true)."
<textarea hidden name='story' value='".$prestory."'></div>
<div class='write-item'><button id='button-a'><a href='index.php?menu=bio&action=postit'>Post Story</a></button></div>
</div>";
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'postit') {
$pretitle = $_GET['title'];
$prestory = $_GET['story'];
$sql = "SELECT * FROM Story WHERE User_ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
$rows = mysqli_num_rows($result);
if($rows == 0) {
$sql = "INSERT INTO Story(User_ID, Title, Bio) VALUES ('".$_SESSION['ID']."', '".$pretitle."', '".$prestory."')";
$result = mysqli_query($connect, $sql);
} else {
$sql = "UPDATE Story SET Title='".$pretitle."', Bio='".$prestory."' WHERE ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
}
} else {
/* Bio view */
$sql = "SELECT * FROM Story WHERE User_ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
$rows = mysqli_num_rows($result);
if($rows == 0) {
echo "<div id='button'><a href='index.php?menu=bio&action=write'>No \"BIO\" set!!<br />Click here to write your story</a></div>";
} else {
$story = mysqli_fetch_all($result, MYSQLI_ASSOC);
foreach($story as $bio) {
$title = $bio['Title'];
$bio = $bio['Bio'];
}
echo"<div class='write-grid'>
<div class='write-item1'>".$title."</div>
<div class='write-item2'>".nl2br($bio,true)."</div>
</div>";
}
}
?>
Met dat laatste kieper je het hele verhaal in de URL ipv opnieuw een POST te doen.
De kans is groot dat met de GET een deel wordt afgekapt.
Niet elke browser accepteert zo’n onbeperkte hoeveelheid text in een URL.
Effe zoeken.
https://www.sistrix.com/ask-sistrix/technical-seo/site-structure/url-length-how-long-can-a-url-be
Gewijzigd op 19/04/2023 11:10:39 door Adoptive Solution
mij gaat het om de teken reeks.
Toevoeging op 19/04/2023 11:34:13:
Laat maar opgelost, wel heb ik een andere vraag.
Nu heb ik zeg maar een foutje in mijn tekst gezien in de preview, nu wil ik terug om dat te corrigeren.
Dus wil ik een 'go back' button erbij hebben, zodat deze mij terug stuurt naar de 'editor' en dat ik de tekst kan aanpassen alvorens hem te posten.
Hoe doe ik dat?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'preview') {
$pretitle = $_POST['title'];
$prestory = $_POST['story'];
echo "<form action='index.php?menu=bio&action=postit' method='POST'>
<div class='write-grid'>
<div class='write-item1'>".htmlspecialchars($pretitle)."
<input type='hidden' name='title' value='".$pretitle."'</div>
<div class='write-item2'>".nl2br($prestory, true)."
<input type='hidden' name='story' value='".htmlspecialchars($prestory)."'></div>
<div class='write-item' id='button-a'><input type='submit' name='submit' value='Post it'></div>
<div class='write-item' id='button-b'>Go back</div>
</div></form>";
?>
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'preview') {
$pretitle = $_POST['title'];
$prestory = $_POST['story'];
echo "<form action='index.php?menu=bio&action=postit' method='POST'>
<div class='write-grid'>
<div class='write-item1'>".htmlspecialchars($pretitle)."
<input type='hidden' name='title' value='".$pretitle."'</div>
<div class='write-item2'>".nl2br($prestory, true)."
<input type='hidden' name='story' value='".htmlspecialchars($prestory)."'></div>
<div class='write-item' id='button-a'><input type='submit' name='submit' value='Post it'></div>
<div class='write-item' id='button-b'>Go back</div>
</div></form>";
?>
Beste oplossing is een linkje plaatsen naar de edit-pagina.
Nu een heel ander probleem, de update werkt niet.
Als ik een verhaal plaats, dan post ie hem mooi naar de mysql, maar als ik een update doe, dan wordt er niks gewijzigd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'postit') {
$pretitle = $_POST['title'];
$prestory = htmlspecialchars($_POST['story']);
$sql = "SELECT * FROM Story WHERE User_ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
$rows = mysqli_num_rows($result);
if($rows == 0) {
$sql = "INSERT INTO Story(User_ID, Title, Bio) VALUES ('".$_SESSION['ID']."', '".$pretitle."', '".$prestory."')";
$result = mysqli_query($connect, $sql);
echo "Story is added";
} else {
$sql = "UPDATE Story SET Title='".$pretitle."', Bio='".$prestory."' WHERE ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
echo "Story is updated";
}
}
?>
} elseif($_GET['menu'] == 'bio' && $_GET['action'] == 'postit') {
$pretitle = $_POST['title'];
$prestory = htmlspecialchars($_POST['story']);
$sql = "SELECT * FROM Story WHERE User_ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
$rows = mysqli_num_rows($result);
if($rows == 0) {
$sql = "INSERT INTO Story(User_ID, Title, Bio) VALUES ('".$_SESSION['ID']."', '".$pretitle."', '".$prestory."')";
$result = mysqli_query($connect, $sql);
echo "Story is added";
} else {
$sql = "UPDATE Story SET Title='".$pretitle."', Bio='".$prestory."' WHERE ID = ".$_SESSION['ID']."";
$result = mysqli_query($connect, $sql);
echo "Story is updated";
}
}
?>
Toevoeging op 19/04/2023 13:32:56:
Laat maar weer, tjee..... ik kijk weer eens niet goed :P
WHERE ID = ".$_SESSION['ID'].""; moest zijn WHERE User_ID = ".$_SESSION['ID']."";
Ik moet echt even pauze en koffie gaan drinken.
Echo je $sql eens en probeer de fout te zoeken.
Eigenlijk is mysqli_error($connect) een handige functie om errors te tonen.
daar maak je liever van
Code (php)
1
2
3
4
2
3
4
<?php
$pretitle = mysqli_real_escape_string($connect, $_POST['title']);
$prestory = mysqli_real_escape_string($connect, $_POST['story']);
?>
$pretitle = mysqli_real_escape_string($connect, $_POST['title']);
$prestory = mysqli_real_escape_string($connect, $_POST['story']);
?>
Dan gaat het goed als je een ' in je invoer hebt,
en je maakt je tekst niet kapot als je er een < of > in hebt staan.
htmlspecialchars() gebruik je in combinatie met "echo". Niet al bij het opslaan in de database.
Ivo zegt hier goedbedoeld iets over SQL-injection, maar Ariën heeft dat al tig keer gezegd.
Het valt me ook op dat er erg veel ad-hoc probleempjes over de schutting worden gegooid, die dan ineens zijn opgelost.
Ik krijg het idee dat TS vee dingen 'op de gok' aan het doen is. Volgens mij is het ook nog een soort van escortbureau? En daar gaan dan 'dames van plezier' en wellicht ook klanten zich op inschrijven? Lekker als de boel niet goed beveiligd is en de gegevens straks op straat liggen. Waarom huurt TS niet een developer met verstand van zaken in?
Niemand kan zich bij mij inschrijven.
Zowel de dames niet als de klanten niet.
En ja ik lees heel goed naar de tips en zeker doe ik er wat mee.
Maar dit gedeelte is opgelost en werkt nu naar behoren, mede jullie hulp en tips ;)
Ben nu met een andere page bezig, maar die is een stuk moeilijker dan ik hoopte.
Maar ga even een beetje pauze houden, veel koffie drinken en eens denken hoe ik dat ga oplossen.
Misschien een beetje surfen op het internet en YT :)
Of misschien eens even op Bol.com rondkijken of je een PHP-basisboek kunt scoren ;-) Dan weet je wat beter waar je mee bezig bent, en kun je gerichter aan de slag, zeker ook met het oog op veiligheid.
En een cheat-sheet op je bureau... ;-)