couldn't fetch mysqli error in shoutbox
line 15: if($result = $mysqli->query($sql)){
Hoe ontstaat deze error? Ik heb de php code hieronder bijgevoegd, de shoutbox bevat ook nog een index html file, een sql database en een jquery file, maar deze kloppen volgens mij (al heb ik geen verstand van jquery codes)
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
@$mysqli = new mysqli("localhost", "root", "", "shoutbox");
if(isset($_POST['name'],$_POST['msg'])){
$name = trim($_POST['name']);
$msg = trim($_POST['msg']);
if(!empty($name)&&!empty($msg)){
$sql = "INSERT INTO `shouts` (`id`,`name`,`message`,`post_date`) VALUES(NULL,'".mysql_real_escape_string($name)."','".mysql_real_escape_string($msg)."',NOW())";
$mysqli->query($sql);
}
}
if(isset($_GET['show'])){
$sql = "SELECT `name`,`message`,`post_date` FROM shouts ORDER BY `id` DESC";
if($result = $mysqli->query($sql)){
while($row = $result->fetch_assoc()){
echo "<li><span class='shout_post_name'>".$row['name']."</span>:".$row['message']."</li>";
}
}
}
Ik heb dit overigens ongeveer een maand geleden al voorgelegd bij de auteur van deze shoutbox, maar hij reageert niet, dus hoop ik dat iemand hier me kan helpen :)
@$mysqli = new mysqli("localhost", "root", "", "shoutbox");
if(isset($_POST['name'],$_POST['msg'])){
$name = trim($_POST['name']);
$msg = trim($_POST['msg']);
if(!empty($name)&&!empty($msg)){
$sql = "INSERT INTO `shouts` (`id`,`name`,`message`,`post_date`) VALUES(NULL,'".mysql_real_escape_string($name)."','".mysql_real_escape_string($msg)."',NOW())";
$mysqli->query($sql);
}
}
if(isset($_GET['show'])){
$sql = "SELECT `name`,`message`,`post_date` FROM shouts ORDER BY `id` DESC";
if($result = $mysqli->query($sql)){
while($row = $result->fetch_assoc()){
echo "<li><span class='shout_post_name'>".$row['name']."</span>:".$row['message']."</li>";
}
}
}
Ik heb dit overigens ongeveer een maand geleden al voorgelegd bij de auteur van deze shoutbox, maar hij reageert niet, dus hoop ik dat iemand hier me kan helpen :)
Gewijzigd op 18/12/2013 23:18:03 door Fabian W
Waarom mysql_real_escape_string() terwijl je mysqli gebruikt?
En kan je een betere titel toepassen op dit topic? Alvast bedankt!
Gewijzigd op 18/12/2013 23:15:04 door - Ariën -
Heb je een suggestie hoe ik '@' kan omzeilen?
dat mysql_real_escape_string()moet idd mysqli zijn, tnx :)
Echter dit is niet de oplossing voor het probleem.
En verder goede foutafhandeling toepassen met $mysqli->error.
Ik heb 2 warnings nu
Warning: mysqli::mysqli(): (28000/1045): Access denied for user 'root'@'localhost' (using password: NO) in /home/u493974131/public_html/shout.php on line 2
Warning: mysqli::query(): Couldn't fetch mysqli in /home/u493974131/public_html/shout.php on line 15
Ik snap sws niet zo goed hoe het nou zit met localhost, root en usernames, wat moet je daar nou voor invullen?
Daar hoort je gebruikernaam, wachtwoord en de host ( localhost in meeste gevallen ) te komen zodat de mysqli driver weet hoe je database te benaderen
Server:
Als het op een server is, moet je aan de eigenaars vragen wat de logingegevens van de database zijn.
Dat zijn dus die vier dingen die je moet invullen, hier:
new mysqli("localhost", "root", "", "shoutbox");
Dat kan bv. zijn:
new mysqli("mysql.fabian.nl", "fabian", "", "shoutbox");
------
Thuis:
Standaard, als je xampp installeert (of wamp, lamp, mamp) zijn de gegevens inderdaad
"localhost", "root", ""
Dan maak je een nieuwe database aan met de naam shoutbox.
Dan kloppen de gegevens
Ik heb een eigen site (nog lang niet af)
Ik heb voor localhost dit ingevuld: server36.hostinger.nl Dat moet kloppen denk ik.
Alleen wat voor root in te vullen?
Dit?: Tijdelijke FTP Hostnaam
Of Dit?: Volledige FTP Hostnaam (ftp.sitenaam)
Of Dit?: FTP Gebruikersnaam: u493974131
Of gewoon Root?
Of gebruikersnaam (emailadres)
Of server IP?
Of gewoon sitenaam
Ik weet het niet.
De database genaamd shoutbox is al af btw.
new mysqli(host, user, password, database);
host, user en password zijn gegevens die je moet ontvangen van de beheerders van je server.
Dus, met de vraag
"Hallo, kunnen jullie me de logingegevens van de database bezorgen, a.u.b.?" zou je die drie gegevens moeten krijgen.
de host is meestal 'localhost', maar kan bv. ook zijn: 'mysql.dreamhost.com'.
Gewoon de drie gegevens invullen die ze je geven
Bedankt Kris en alle anderen voor de reacties, het helpt me eigenlijk altijd verder.
Ik heb de database inloggegevens nagevraagd en dat is gelukt, de twee errormeldingen zijn nu ook verdwenen.
Geen errors meer dus, maar toch werkt de shoutbox nog niet.
Als ik een naam en een bericht intyp in de shoutbox en dan op send klik, verdwijnt alleen alles wat ik in heb getypt. Wat er daarnaast nog zou moeten gebeuren is, dat het bericht wat ik net gesumbit heb op het scherm verschijnt en aan de database wordt toegevoegd. Dit gebeurd beide niet. Ook het bericht dat ik handmatig aan de database heb toegevoegd verschijnt niet op het scherm.
Ik zal hieronder nog even het andere php file en de database zetten, misschien dat hier dan toch een fout inzit.
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
Dit is shoutbox.php:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="style.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" >
$(document).ready(function(){
$("#shout_button").click(function(){
var msg = $("#shout_message").val();
var nam = $("#shout_name").val();
var value = $(this).val();
$(this).val('sending...');
var datastring = 'name='+nam+'&msg='+msg;
$.ajax({
type:'POST',
url:'shout.php',
data:datastring,
cache:false,
success:function(){
//$("#shouts ul").prepend("<li><span class='shout_post_name'>"+nam+"</span>:"+msg+"</li>").fadeIn();
$("#shout_button").val(value);
$("#shout_message").val('');
$("#shout_name").val('');
}
});
});
$("#shouts ul").load("shout.php?show");
setInterval(function(){
$("#shouts ul").load("shout.php?show");
},1000)
});
</script>
<title>Chat Box</title>
</head>
<body>
<div id="shoutbox">
<div id="shouts">
<ul>
</ul>
</div>
<div id="write">
<input type="text" id="shout_message" placeholder="Message" name="message"><br/>
<input type="text" id="shout_name" name="name" placeholder="Name" ><input id="shout_button" type="button" value="Send">
</div>
</div>
</body>
</html>
Dit is shoutbox.sql:
-- phpMyAdmin SQL Dump
-- version 3.5.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 29, 2013 at 06:46 AM
-- Server version: 5.5.25a
-- PHP Version: 5.4.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `shoutbox`
--
-- --------------------------------------------------------
--
-- Table structure for table `shouts`
--
CREATE TABLE IF NOT EXISTS `shouts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`message` varchar(255) NOT NULL,
`post_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `shouts`
--
INSERT INTO `shouts` (`id`, `name`, `message`, `post_date`) VALUES
(1, 'Fabian', 'hello !!', '2013-11-29 10:15:18');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Dit is shoutbox.php:
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link type="text/css" rel="stylesheet" href="style.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" >
$(document).ready(function(){
$("#shout_button").click(function(){
var msg = $("#shout_message").val();
var nam = $("#shout_name").val();
var value = $(this).val();
$(this).val('sending...');
var datastring = 'name='+nam+'&msg='+msg;
$.ajax({
type:'POST',
url:'shout.php',
data:datastring,
cache:false,
success:function(){
//$("#shouts ul").prepend("<li><span class='shout_post_name'>"+nam+"</span>:"+msg+"</li>").fadeIn();
$("#shout_button").val(value);
$("#shout_message").val('');
$("#shout_name").val('');
}
});
});
$("#shouts ul").load("shout.php?show");
setInterval(function(){
$("#shouts ul").load("shout.php?show");
},1000)
});
</script>
<title>Chat Box</title>
</head>
<body>
<div id="shoutbox">
<div id="shouts">
<ul>
</ul>
</div>
<div id="write">
<input type="text" id="shout_message" placeholder="Message" name="message"><br/>
<input type="text" id="shout_name" name="name" placeholder="Name" ><input id="shout_button" type="button" value="Send">
</div>
</div>
</body>
</html>
Dit is shoutbox.sql:
-- phpMyAdmin SQL Dump
-- version 3.5.2
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Aug 29, 2013 at 06:46 AM
-- Server version: 5.5.25a
-- PHP Version: 5.4.4
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `shoutbox`
--
-- --------------------------------------------------------
--
-- Table structure for table `shouts`
--
CREATE TABLE IF NOT EXISTS `shouts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`message` varchar(255) NOT NULL,
`post_date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
--
-- Dumping data for table `shouts`
--
INSERT INTO `shouts` (`id`, `name`, `message`, `post_date`) VALUES
(1, 'Fabian', 'hello !!', '2013-11-29 10:15:18');
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Laat eens zien wat shout.php doet...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$mysqli = new mysqli("lhost", "user", "password", "shoutbox");
if(isset($_POST['name'],$_POST['msg'])){
$name = trim($_POST['name']);
$msg = trim($_POST['msg']);
if(!empty($name)&&!empty($msg)){
$sql = "INSERT INTO `shouts` (`id`,`name`,`message`,`post_date`) VALUES(NULL,'".mysqli_real_escape_string($name)."','".mysqli_real_escape_string($msg)."',NOW())";
$mysqli->query($sql);
}
}
if(isset($_GET['show'])){
$sql = "SELECT `name`,`message`,`post_date` FROM shouts ORDER BY `id` DESC";
if($result = $mysqli->query($sql)){
while($row = $result->fetch_assoc()){
echo "<li><span class='shout_post_name'>".$row['name']."</span>:".$row['message']."</li>";
}
}
}
$mysqli = new mysqli("lhost", "user", "password", "shoutbox");
if(isset($_POST['name'],$_POST['msg'])){
$name = trim($_POST['name']);
$msg = trim($_POST['msg']);
if(!empty($name)&&!empty($msg)){
$sql = "INSERT INTO `shouts` (`id`,`name`,`message`,`post_date`) VALUES(NULL,'".mysqli_real_escape_string($name)."','".mysqli_real_escape_string($msg)."',NOW())";
$mysqli->query($sql);
}
}
if(isset($_GET['show'])){
$sql = "SELECT `name`,`message`,`post_date` FROM shouts ORDER BY `id` DESC";
if($result = $mysqli->query($sql)){
while($row = $result->fetch_assoc()){
echo "<li><span class='shout_post_name'>".$row['name']."</span>:".$row['message']."</li>";
}
}
}
Voeg foutafhandeling toe aan je query. En bij voorkeur een 'error' event aan je jQuery functie van $.ajax() om bij fouten te tonen wat er fout gaat.
Ik heb alleen geen enkel verstand van jquery, dus zou niet weten hoe dat moet, alles uit het jquery file hier kopieren is ook niet echt een optie gezien de lengte.
Gewijzigd op 29/12/2013 19:30:47 door Fabian W
Je kan shout.php ook voor het simpelste gemak via een formulier aanroepen en kijken welke fout je dan krijgt.
maar ik ben bang dat wat je nu zegt mij een beetje boven de pet gaat.
via formulier aanroepen?
Formulier (method="POST") aanmaken in HTML en verwijzen naar shout.php via action="shout.php"
form.html:
Gewijzigd op 04/01/2014 14:34:07 door - Ariën -
Wat moet de rest zijn van dat formulier? Heb je een linkje voor een tutorial hiervoor op deze site?
name en msg zijn de namen van de inputs.
Gewijzigd op 04/01/2014 21:04:51 door - Ariën -