1. Zapni si error_reporting a pridej si tam ten prikaz do kodu, google = php error_reporting
2. Pridej si tam vypis mysqli chyb, google = php mysqli error
Pak ti zacne php a sql vypisovat chyby. To, co mas v kodu, to neni vypis chyb, to je pouze vypis vysledku funkci (return). Ty ti vypisi obvykle jen false nebo true/data.
3. "vypíše No data found"
No, ale, to je chybova hlaska tveho kodu. To snad dokaze najit i male dite...
echo "No data found";
Proc to pise tu hlasku? Protoze if funkce vratila false.
Ktery if vratil false? if(mysqli_num_rows($res)>0)
A proc vratil if false? Protoze nebyla splnena podminka mysqli_num_rows($res)>0
A proc nebyla splnena podminka? Protoze SQL prikaz vratil 0 radku, sql dotazu nevyhovuje zadny radek v tabulce. Nebo je sql prikaz spatny.
a) Co s tim? Pustis si dbadmin, phpmyadmin, na serveru, otevres tam databazi, tabulku, kliknez na zalozku sql a vlozis tam kod tveho prikazu a kliknes Odeslat nebo, Proved nebo, co tam je za formularove tlacitko pro vykonani sql prikazu
select * from users where send_email=1
A bud to vrati tabulku s radny nebo napise 0 radku odpovida sql prikazu.
b) Pak mozna selhal radek
$res=mysqli_query($conn,$sql);
Viz a), otestujes sql prikaz. V tomto pripade ti to vrati bud a) nebo vypise sql chybu v prikazu. Treba chybna syntaxe na radku 1 blizko kodu "...". V druhem pripade spravis sql prikaz, v prvnim je sql prikaz dobre, chyba je tedy nekde drive, asi selhalo sql pripojeni.
$res=mysqli_query($conn,$sql); // var_dump($conn);
... tim padem zadna dalsi sql funkce pozdeji nemuze fungovat, kdyz se nepripoji k databazi.
$conn=mysqli_connect("localhost","root","","mailer");
... prikaz vypada v poradku, ale mozna nemas zapnuty sql server? To se da testnout treba i tim phpmyadminem, jestli se doklikas do databaze, tabulek, pak se phpmyadmin pripojil.
No, ale, kdyby jsi tam mel 1. a 2., tak ti to php vetsinou vypise. ale samozrejme tam muzes misto toho pridat var_dumpy.
var_dump($sql); // zkontrolujes si sql prikaz
var_dump($con); // zkontrolujes, zda je $con null nebo to vypise neco jineho
var_dump($res); // zkontrolujes, zda je $res null nebo obvykle vypise resource
Pokud je resource, pak sql prikaz sql server prijal jako spravny a pravdepoddobne vratil 0 radku. Cili, sql prikaz je spatne napsany, ale neobsahuje chybu, kvuli ktere by to server nedokazal prepsat na program vyhledavajici data z databaze.
if(mysqli_num_rows($res)>0)
{
$mail->addReplyTo("#");
while($x=mysqli_fetch_assoc($res))
{
$mail->addBCC($x['email']);
}
if($mail->send())
{
echo "Success";
}
else
echo "Failure";
}
else
{
echo "No data found";
}
?>
4. tip
Sql prikaz se jmenuje $query ne $sql.
Fetchem ziskavas data, radek, $row ne $x.
google = php mysqli error
<?php
$mysqli = new mysqli("localhost","my_user","my_password","my_db");
if ($mysqli -> connect_errno) {
echo "Failed to connect to MySQL: " . $mysqli -> connect_error;
exit();
}
// Perform a query, check for error
if (!$mysqli -> query("INSERT INTO Persons (FirstName) VALUES ('Glenn')")) {
echo("Error description: " . $mysqli -> error);
}
$mysqli -> close();
?>
google = php error_reporting (pred vsemi include, require, na zacatku kodu)
<?php
// Turn off error reporting
error_reporting(0);
// Report runtime errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Report all errors
error_reporting(E_ALL);
// Same as error_reporting(E_ALL);
ini_set("error_reporting", E_ALL);
// Report all errors except E_NOTICE
error_reporting(E_ALL & ~E_NOTICE);
?>
No, a zkus opravit jeste v kodu vypisy echo, texty chyb a oznameni tak, aby vypisovali takovy problem, jakemu odpovida podminka.
echo "No data found"; // (mysqli_num_rows($res)>0) a protoze
// nekontrolujes, zda je res null, tak soucasne do te
// podminky zahrnujes i $res=mysqli_query($conn,$sql);
echo "sql: Nalezeno 0 radku nebo je res null"; // nejak vic uzivatelsky privetivejsi text, No data found nevystihuje druh selhani, spis je tak pro proste uzivatele
echo "Success"; // $mail->send())
echo "funkce PHPMailer vratila true, mail byl poslan uspene mail serveru"; // a mail server ho jeste nemusi odeslat, kdyz je to true
echo "Failure";
Odeslani mailu selhalo. class PHPMailer / mail() false, protoze v mailu jsou chyby nebo se nepodarilo kontaktovat mail server
Vis, ono, zkopirovat neco z internetu, copy, paste, jeste neznamena, ze kodu rozumis, kdyz nejsi ochotny nahlednout ani do dokumentace php.net, co ktera funkce dela a v jakem pripade selhava.