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";
}

?>
Om te beginnen is het handig dat je zeker weet welke PHP versie je draait, dit kun je doen met een leeg bestannd met daarin:
<?php
phpinfo();
?>

Als je zeker weet dat je PHP7 draait, dan is het antwoord vrij simpel:
http://www.php.net/mysql_connect


Warning
This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_connect()
PDO::__construct()


Dit is overigens voor alle mysql_* functies.
Versie 7.0.16
Begrijp ik het goed dat ik gewoon zoek-en-vervang kan doen: "mysql" -> "mysqli"?
Of zit er meer aan vast?
Het is een tikje meer, de connection identifier is bij de mysqli functies verplicht waar deze bij de mysql functies optioneel was. Ook selecteer je nu de database bij het maken van een verbinding ipv via een aparte verbinding. Zie http://www.php.net/mysqli
Wellicht verstandig dan om heel de module na te lopen op verbeteringen?


<?php
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select database");
?>


Een or die is niet echt een nette manier voor foutafhandeling. Het script wordt letterlijk afgekapt met de <?php die(); ?> functie.

Wellicht handig om ook gelijk met prepared statements te gaan werken?

Tevens doe je een select *:

SELECT * FROM $tbl_name


Het is verstandiger om dit te beperken tot enkel de kolommen die je nodig hebt. Ook al heb je alles nodig, is het netter om alles los op te halen. Mocht je later dingen wijzigen kan dit fouten voorkomen.
oke, ik heb de connectie gewijzigd en mysql vervangen door mysqli. Helaas geen resultaat.
Zie hieronder mijn code.


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

#mysqli_connect("$host", "$username", "$password")or die("cannot connect"); 
#mysqli_select_db("$db_name")or die("cannot select database");

$mysqli = new mysqli("$host", "$username", "$password", "$db_name");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
	
if ("POST" === $_SERVER['REQUEST_METHOD']) {	
	foreach( $_POST["id"] AS $id ) {
		$item = mysqli_real_escape_string($_POST["item"][$id]);
		$class = mysqli_real_escape_string($_POST["class"][$id]);
		$unity = mysqli_real_escape_string($_POST["unity"][$id]);
		$qty = mysqli_real_escape_string($_POST["qty"][$id]);
		$memo = mysqli_real_escape_string($_POST["memo"][$id]);
		$update = "UPDATE $tbl_name SET `item` = '$item', `class` = '$class', `qty` = '$qty', `unity` = '$unity', `memo` = '$memo' WHERE `id` = $id";
		mysqli_query($update) or die( mysqli_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 = mysqli_query( $sql ) or die( mysqli_error() );

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

	while ( $row = mysqli_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";
}

?>
Kijk eens naar de link die Ben heeft gepost, hij geeft het antwoord al.
Je moet de connection identifier toevoegen.

Kijk hier ook eens naar:
https://www.w3schools.com/php/func_mysqli_query.asp

Begin eens met een leeg PHP bestand waarin je een simpele db verbinding tot stand probeert te brengen.
Vervolgens kun je een select proberen.

Als je dat allemaal onder de knie hebt, kun je je huidige script aanpassen.

zet eens bovenin je script(s)

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

Ik heb namelijk de indruk dat je geen foutmeldingen krijgt, terwijl die in deze gevallen toch vrij duidelijk zouden moeten zijn.

Ivo, is heb de code in een simpel script geplaatst, resultaat:

"Fatal error: Uncaught Error: Call to undefined function mysqli_connect() "


<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
?> 
<?php
 $con=mysqli_connect("localhost","root","","app");
 // Check connection
 if (mysqli_connect_errno())
   {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }

// Perform queries 
mysqli_query($con,"SELECT * FROM list");


mysqli_close($con);
 ?> 
Ivo P op 23/08/2017 12:04:06

zet eens bovenin je script(s)

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

Ik heb namelijk de indruk dat je geen foutmeldingen krijgt, terwijl die in deze gevallen toch vrij duidelijk zouden moeten zijn.




Offtopic, kunnen we dit niet opgeven voor nieuwe topics, dat dit bovenaan elk PHP script moet staan?




[size=xsmall]Toevoeging op 23/08/2017 12:51:23:[/size]

Stevie J op 23/08/2017 12:48:27

Ivo, is heb de code in een simpel script geplaatst, resultaat:

"Fatal error: Uncaught Error: Call to undefined function mysqli_connect() "


<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
?> 
<?php
 $con=mysqli_connect("localhost","root","","app");
 // Check connection
 if (mysqli_connect_errno())
   {
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }

// Perform queries 
mysqli_query($con,"SELECT * FROM list");


mysqli_close($con);
 ?> 




Staat mysqli wel enabled in je phpinfo()?
In de phpinfo() vind ik niets terug over mysqli.
Klinkt niet goed he?

Reageren