Jump to content

tutorial suggestion


elentz

Recommended Posts

I have a need to create a form that will get info from a mysql table, show that info, two fields one of which I want to be a checkbox that will need to update the table with either a 0 or a 1.  I will later use that info.  I have searched all over and haven't found what I am looking for.  I can find tutorials for creating checkboxes but nothing what I need / want

 

Link to comment
Share on other sites

I do have some code.  

$sql = "select * from extensions";
$result = mysqli_query($link,$sql) or die(mysql_error());
echo "<table border='3'>
    <tr>
        <th>Extension #</th>
        <th>Reboot</th>
        
    </tr>";

while($row = mysqli_fetch_array($result))
{
    echo "<tr>";
    echo "<td>" . $row['extension'] . "</td>";
    echo "<td>'."<input type='checkbox' class='form' value='1' name='checkbox[" . $row['reset'] . "]' />".'</td>";
    echo "</tr>";
}
       
echo "</table>";
?>

I want to a.  show the current value of the row reset and b. to have the ability to check the checkbox and change the value in the mysql table.  I know I need to make the whole thing a form so that it can update the DB

Link to comment
Share on other sites

You are putting a value of '1' in every checkbox/row currently.  Why not the reset value as the 'value' attribute instead?  Then you could compare the value submitted against the original reset value (in a hidden array field)for each checkbox to see if they still match and if not use the new value in an update query.  You will need to 'hide' the key of each record in a hidden input field using it as part of the name of that field such as "name='rowkey[]' " and probably rename the name of the checkbox to be 'rowreset[]' that both use the primary key as the index for each.

I hope I'm clear - thinking on the fly here.

Link to comment
Share on other sites

You could also do this with a separate form embedded into each row of the html table.  Then you could skip the arrays and just use the same names on all rows with a submit button for each.  That is if you wanted to do the updates on each row as they occur and not wait for the user to update everything... (which would NOT work in that case).

Link to comment
Share on other sites

ginerjm

That sounds like the way to go, I could have any number of rows and updating as each is checked would be best.

 

Gizmola,

I think I do have a primary key on that table, can't check from home tho.  

Link to comment
Share on other sites

On 3/1/2019 at 5:40 PM, ginerjm said:

You could also do this with a separate form embedded into each row of the html table.  Then you could skip the arrays and just use the same names on all rows with a submit button for each.  That is if you wanted to do the updates on each row as they occur and not wait for the user to update everything... (which would NOT work in that case).

Instead of a submit button could a checkbox work?  What about a Yes/No  dropdown? I want to select the phones I want to restart, update a DB table and then use a submit button to go to another page that will run a query to reset the phones.

Link to comment
Share on other sites

10 minutes ago, ginerjm said:

Just use a form for each row with a submit button to update that row only.  Then have a separate form from all the others (outside of the html table?) that has a submit to do your next task.

Ah I think I understand now

Link to comment
Share on other sites

HTH!!

PS - using a checkbox (or something resembling one) does not make a good presentation for the user IMHO.  A "submit" action should be some kind of button or link that the user is familiar with and recognizes as his course of action.  A checkbox is just that  - a check that should have an accompanying label indicating what the user is "checking" or "selecting" on.  Certainly not a "form submittal".

Link to comment
Share on other sites

4 hours ago, ginerjm said:

HTH!!

PS - using a checkbox (or something resembling one) does not make a good presentation for the user IMHO.  A "submit" action should be some kind of button or link that the user is familiar with and recognizes as his course of action.  A checkbox is just that  - a check that should have an accompanying label indicating what the user is "checking" or "selecting" on.  Certainly not a "form submittal".

got it.  I originally envisioned a bunch or rows with a checkbox on the end.  check all the boxes you want, click a submit button to update the DB and run another page to reboot the phones.  If I misspoke and indicated that I wanted to use the checkbox as a submit type of operation I apologize, not what I meant.  I haven't had anytime to work on this at all today, maybe tomorrow

Thanks

Link to comment
Share on other sites

11 hours ago, elentz said:

I originally envisioned a bunch or rows with a checkbox on the end.  check all the boxes you want, click a submit button to update the DB

This does it with a single form

<?php
//
// PROCESS POSTED DATA
//
if ($_SERVER['REQUEST_METHOD']=='POST') {
    $updt = $db->prepare("UPDATE extensions
                          SET reset = ?
                          WHERE id = ?
                         ");
    foreach ($_POST['extid'] as $id) {
        $reset = $_POST['reset'][$id] ?? 0;          // if checkbox wasn't posted then it is "0"
        $updt->execute( [ $reset, $id ] );
    }
}

//
//  GET EXTENSIONS DATA
//
$exdata = '';
$res = $db->query("SELECT id
                        , extension
                        , reset
                    FROM extensions
                    ");
foreach ($res as $r) {
    $chk = $r['reset']==1 ? 'checked':'';
    $exdata .= "<tr><td>{$r['extension']}</td>
                    <td>
                        <input type='hidden' name='extid[]' value='{$r['id']}'>
                        <input type='checkbox' name='reset[{$r['id']}]' value='1' $chk>
                    </td>
               </tr>\n";
}
?>
<html>
<head>
<meta name="generator" content="PhpED 18.0 (Build 18044, 64bit)">
<title>test</title>
</head>
<body>
<h1>Extensions</h1>
<form method='post'>
<table>
    <tr><th>Extension</th><th>Reset</th></tr>
    <?=$exdata?>
</table>
<input type='submit' name='btnSub' value='Submit'>
</form>
</body>
</html>

 

Capture.PNG

Link to comment
Share on other sites

I have the script retrieving the info from the table so the connection is correct.  The submit doesn't update the table.  In the logs I am getting this:

mysqli_stmt::execute() expects exactly 0 parameters, 1 given   on line 20

$updt->execute( [ $reset, $id ] );

I also have to comment out this line in order for the page to work as above

$reset = $_POST['reset'][$id] ?? 0;          // if checkbox wasn't posted then it is "0"

 

 

Link to comment
Share on other sites

got it, no errors now..  I didn't correctly connect to Mysql either.  Had to fix that.   No update to the DB yet  It reads the table contents.  Just to show what I am working with, mostly from barand.

I do get the echo connected successfully

Thanks

// Create connection
try {
    $db = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully"; 
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();

    }if ($_SERVER['REQUEST_METHOD']=='POST') {
    $updt = $db->prepare("UPDATE extensions
                          SET reset = ?
                          WHERE id = ?
                         ");
    foreach ($_POST['extid'] as $id) {
        //$reset = isset($_POST['reset'][$id]) ? $_POST['reset'][$id] : 0; // if checkbox wasn't posted then it is "0"
        $updt->execute;
    }
}

//
//  GET EXTENSIONS DATA
//



// Check connection
if ($db->connect_error) {
    die("Connection failed: " . $db->connect_error);
}
$exdata = '';
$res = $db->query("SELECT id
                        , extension
                        , reset
                    FROM extensions
                    ");
foreach ($res as $r) {
    $chk = $r['reset']==1 ? 'checked':'';
    $exdata .= "<tr><td>{$r['extension']}</td>
                    <td>
                        <input type='hidden' name='extid[]' value='{$r['id']}'>
                        <input type='checkbox' name='reset[{$r['id']}]' value='1' $chk>
                    </td>
               </tr>\n";
}
?>
<html>
<head>
<meta name="generator" content="PhpED 18.0 (Build 18044, 64bit)">
<title>Reboot Phones</title>
</head>
<body>
<h1>Extensions</h1>
<form method='post'>
<table>
    <tr><th>Extension</th><th>Reset</th></tr>
    <?=$exdata?>
</table>
<input type='submit' name='btnSub' value='Submit'>
</form>
<button type="button"><a href="restart.php">Click to reboot the phones</a></button>
</body>
</html>

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.