Goedemorgen,

2 jaar geleden heb ik een formulier (bestellijst-achtig) gemaakt in PHP waarmee ik data kan opslaan en opvragen uit een database. Het formulier gebruikte ik als boodschappenlijst, waarbij ik gebruik maak van vastgelegde "artikelen" waarvoor ik een aantal moet invullen. Het heeft altijd prima gewerkt.

Nu wil ik de lijst weer gaan gebruiken maar ik zie dat deze niet meer werkt. Waarschijnlijk heeft het met de nieuwe PHP7.0 versie te maken.

Het probleem is dat er wel connectie gemaakt wordt, maar het scherm blijft blanco. Zou iemand mij kunnen helpen?


<?php
$host="localhost";  
$username="root"; 
$password=""; 
$db_name="app"; 
$tbl_name="list"; 

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select database");
	
if ("POST" === $_SERVER['REQUEST_METHOD']) {	
	foreach( $_POST["id"] AS $id ) {
		$item = mysql_real_escape_string($_POST["item"][$id]);
		$class = mysql_real_escape_string($_POST["class"][$id]);
		$unity = mysql_real_escape_string($_POST["unity"][$id]);
		$qty = mysql_real_escape_string($_POST["qty"][$id]);
		$memo = mysql_real_escape_string($_POST["memo"][$id]);
		$update = "UPDATE $tbl_name SET `item` = '$item', `class` = '$class', `qty` = '$qty', `unity` = '$unity', `memo` = '$memo' WHERE `id` = $id";
		mysql_query($update) or die( mysql_error());
		}
		}	
$sql = "SELECT * FROM $tbl_name order by    
			case  
				when class = 'Fruit' 						then 10
				when class = 'Aardappelen'  				then 20
				when class = 'Groenten'    					then 30
			else 9999
			end,
			case
				when qty = 0 							then 0
				when qty = null         				then 0
			else 1
			end DESC,
			item,
			id" ;

$res = mysql_query( $sql ) or die( mysql_error() );

if ( mysql_num_rows( $res ) > 0 ) {	
	echo '<div class="headertext" id="headertext">Lijst</div><p>'."\n";
	echo '<form name="form1" id="form1" method="post">';

	while ( $row = mysql_fetch_assoc( $res ) ) {
			if ( $row["qty"] == '0' ) {
				$class = 'form-control-inactief';  
				}
			else {
				$class = 'form-control-actief';
			}
		
		echo ' <div id="' . $class . '">' ."\n";
		echo ' <input type="text" min="0" class="  ' . $class . '" name="qty[' . $row["id"] . ']" placeholder="<aantal>" value="'.$row["qty"].'" size="4">'."\n";
		echo ' <select class="' . $class . '" name="unity[' . $row["id"] . ']">'."\n";
		echo '      <option value=""'. ($row['unity'] == '' ? ' selected="selected"' : '') .'></option>'."\n";
		echo '      <option value="Stuks"'. ($row['unity'] == 'Stuks' ? ' selected="selected"' : '') .'>Stuks</option>'."\n";
		echo '      <option value="Set"'. ($row['unity'] == 'Set' ? ' selected="selected"' : '') .'>Set</option>'."\n";
        echo '      <option value="Gram"'. ($row['unity'] == 'Gram' ? ' selected="selected"' : '') .'>Gram</option>'."\n";
		echo '      <option value="Pak"'. ($row['unity'] == 'Pak' ? ' selected="selected"' : '') .'>Pak</option>'."\n";
		echo '      <option value="Fles"'. ($row['unity'] == 'Fles' ? ' selected="selected"' : '') .'>Fles</option>'."\n";
		echo '      <option value="Krat"'. ($row['unity'] == 'Krat' ? ' selected="selected"' : '') .'>Krat</option>'."\n";
		echo '      <option value="Zak"'. ($row['unity'] == 'Zak' ? ' selected="selected"' : '') .'>Zak</option>'."\n";
		echo '      <option value="Bak"'. ($row['unity'] == 'Bak' ? ' selected="selected"' : '') .'>Bak</option>'."\n";
		echo '      <option value="Pot"'. ($row['unity'] == 'Pot' ? ' selected="selected"' : '') .'>Pot</option>'."\n";
		echo ' </select>'."\n";
		echo ' <input type="text" class="' . $class . '_bold" name="item[' . $row["id"] . ']" placeholder="<item>" value="'.$row["item"].'" size="20">'."\n";
		echo ' <input type="text" class="' . $class . '" name="memo[' . $row["id"] . ']" placeholder="<memo>" value="'.$row["memo"].'" size="10">'."\n";
		echo ' <select class="' . $class . '" name="class[' . $row["id"] . ']">'."\n";
		echo '      <option value=""'. ($row['class'] == 'ZZZZZZZZZ' ? ' selected="selected"' : '') .'></option>'."\n";		
		echo '      <option value="Fruit"'. ($row['class'] == 'Fruit' ? ' selected="selected"' : '') .'>Fruit</option>'."\n";
		echo '      <option value="Aardappelen"'. ($row['class'] == 'Aardappelen' ? ' selected="selected"' : '') .'>Aardappelen</option>'."\n";
		echo '      <option value="Groenten"'. ($row['class'] == 'Groenten' ? ' selected="selected"' : '') .'>Groenten</option>'."\n";
		echo ' </select>'."\n";
		echo '<input type="hidden" name="id[]" value="' . $row["id"] . '">  ' . "\n";

	}
	echo '<br>'. "\n";
	echo '<input type="submit" size=40 name="submit" value="Bewaren">' . "\n";
	echo '</div>' . "\n";
}

?>
default poort van Mysql is trouwens 3306
Het toevoegen van het poortnummer en ip adres lijkt iets te werken, echter ik heb er weer andere foutmeldingen voor terug.

Eerlijk gezegd zie ik door de bomen het bos niet meer. Kan iemand mij vertellen hoe het script (klein test script) er nu uit zou moeten zien?

echter ik heb er weer andere foutmeldingen voor terug.

Kom maar op! ;-)
simpel gezegd:

vroeger was het : mysql_query($sql, $connection);
waarbij de 2e parameter optioneel was en in 99% van de gevallen weggelaten werd (alleen als je met verschillende databases verbond)

nu is het mysqli_query($connection, $sql);
en is de $connection verplicht.

---
Verder kun je nog een hoop winnen met prepared statements.
niet alleen gaat het escapen dan automatisch, maar ik zie ook dat je de update query in een loop hebt staan.
Dat zou dan 1x preparen worden met steeds nieuwe parameters afschieten en uitvoeren
ik kan jullie reacties deels volgen, ik heb het script ooit eens met knippen en plakken gemaakt en ben er verder niet echt in thuis.


<?php
error_reporting(E_ALL);
ini_set('display_errors', true);


$link = new mysqli('127.0.0.1','root','','test', 3306);

if (!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
}

echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;

mysqli_close($link);
?> 


Foutmelding:
Warning: mysqli::__construct(): (HY000/2002): Connection refused in /volume1/web/test2.php on line 6 Success: A proper connection to MySQL was made! The my_db database is great. Warning: mysqli_close(): Couldn't fetch mysqli in /volume1/web/test2.php on line 17


Als iemand een alternatief script heeft voor de oplossing die ik zoek: een boodschappenlijst in de vorm van een soort bestellijst, dan houd ik me aanbevolen. Ik acht me zelf niet in staat prepared statements te maken en de loop aan te passen.
hier lukt het maken van de connectie dus niet. Ik lees uit de melding "connection refused" dat Mysql niet luistert op poort 3306.

De rest van de meldingen zijn daar weer een gevolg van.

NB: $link bestaat altijd en is nooit leeg/false. Het zal een resource bevatten die NIET een werkende verbinding bevat. Daarom kom je niet op regel 9 uit.

[size=xsmall]Toevoeging op 23/08/2017 17:13:33:[/size]

Adoptive Solution op 23/08/2017 17:11:22

Regel 17 moet zijn :

$link->close();



mysqli_close($link) mag ook,

Ik hou het consequent.

Mariadb 10 luistert op port 3307.
Mariadb 5 op port 3306.
Jaaa! het is poort 3307!
oke, check. Ik ga het script nu weer opbouwen.
Het toevoegen van je port nr. helpt niet zo te zien.


echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL;


Dit gaat altijd in beeld komen, simpelweg om het feit dat er geen voorwaarde aan gesteld is.

Kijk eens naar je instellingen op de NAS, op welk poort nr staat je mysql ingesteld?
Zet deze op 3306, restart de mysql server en volg dan dit voorbeeld:

https://www.w3schools.com/php/func_mysqli_query.asp

Reageren